# Payhip MCP tools

> Every Payhip MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/payhip

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

15 tools for Payhip on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Payhip seller account
- Integration page: https://cotlet.dev/integrations/payhip-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `payhip_list_orders` | read | Orders from the Customers page with buyer email, items, amounts, status and date. |
| `payhip_get_order` | read | One order: items, gross and net amount, fees, coupon, checkout answers and your private order notes. |
| `payhip_list_products` | read | Your products with type, price, visibility and link. |
| `payhip_get_sales_stats` | read | Daily views, daily sales and sales by product from the Analytics page. |
| `payhip_get_sales_report` | read | The monthly report from the Sales Report tab: VAT, fees, taxes, products sold and affiliate payouts. |
| `payhip_list_subscribers` | read | Subscribers to your subscription, course, coaching and membership plans with status and start date. |
| `payhip_list_coupons` | read | Coupon codes with discount, scope, uses, usage limit and expiry date. |
| `payhip_create_coupon` | write | Coupon code for the whole order, one product or one collection. |
| `payhip_create_product` | write | New digital product from a file URL, with title, price, description and visibility. |
| `payhip_update_product` | write | Change the title, price, description or visibility of a product. |
| `payhip_add_order_note` | write | Private note on an order. Only you see it. |
| `payhip_reset_download_credits` | write | Reset a buyer's download attempts to your store's download limit. |
| `payhip_resend_receipt` | write | Email the receipt and download link to the buyer again. |
| `payhip_cancel_subscription` | write | Cancel a subscriber's plan. Billing stops and access ends. |
| `payhip_block_customer` | write | Add an order's buyer to your Blocked List so they cannot buy again. |

## List orders

MCP tool: `payhip_list_orders`

Access: read.

Returns the same filters as the Filter Orders button on the Customers page: email, product, order date, order ID, status and shipping. Orders come newest first and every date is in UTC. Pass the cursor to read the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `email` | string | no | Buyer email. |
| `order_id` | string | no | Find one order by ID. |
| `product_id` | string | no | Only orders that include this product. |
| `status` | enum | no | completed, refunded or partially_refunded. |
| `shipping` | enum | no | unshipped (orders with unshipped items) or shipped (fully shipped), for physical products. |
| `from` | date | no | Orders on or after this date (UTC). |
| `to` | date | no | Orders on or before this date (UTC). |
| `limit` | integer | no | 1 to 100. Default: 25. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_list_orders",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "orders": [
      {
        "order_id": "ord_7K2mQx",
        "email": "client@example.com",
        "items": [
          {
            "product_id": "RGsF",
            "name": "Notion Budget Template",
            "quantity": 1
          }
        ],
        "amount_gross": "12.00",
        "currency": "USD",
        "status": "completed",
        "coupon_code": null,
        "date": "2026-10-09T14:22:00Z"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Get order

MCP tool: `payhip_get_order`

Access: read.

Returns the amounts Payhip exports for an order: gross, net after tax and transaction fees, the Stripe or PayPal fee, the Payhip fee, the coupon applied and the buyer's answers to your checkout questions. It also returns your order notes, which only you can see.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `order_id` | string | yes | Order ID from list_orders. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_get_order",
    "arguments": {
      "order_id": "order_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "order_id": "ord_7K2mQx",
    "email": "client@example.com",
    "status": "completed",
    "payment_type": "stripe",
    "currency": "USD",
    "items": [
      {
        "product_id": "RGsF",
        "name": "Notion Budget Template",
        "quantity": 1
      }
    ],
    "amount_gross": "12.00",
    "processor_fee": "0.65",
    "payhip_fee": "0.60",
    "amount_net": "10.75",
    "coupon_code": null,
    "checkout_responses": [],
    "notes": [],
    "date": "2026-10-09T14:22:00Z"
  },
  "isError": false
}
```

## List products

MCP tool: `payhip_list_products`

Access: read.

Returns the product IDs the other tools take. Visible products are listed on your store; invisible ones only you can see while logged in; unlisted ones only open from a direct link. Prices are shown as on the product page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `type` | enum | no | digital, course, coaching, membership or physical. Default: all. |
| `visibility` | enum | no | visible, invisible or unlisted. Default: all. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_list_products",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "products": [
      {
        "product_id": "RGsF",
        "name": "Notion Budget Template",
        "type": "digital",
        "price": "12.00",
        "visibility": "visible",
        "url": "https://payhip.com/b/RGsF"
      },
      {
        "product_id": "mVT0",
        "name": "Freelancer Contract Pack",
        "type": "digital",
        "price": "24.00",
        "visibility": "unlisted",
        "url": "https://payhip.com/b/mVT0"
      }
    ]
  },
  "isError": false
}
```

## Get sales stats

MCP tool: `payhip_get_sales_stats`

Access: read.

Returns the 3 graphs of the Analytics page as numbers. Visits from logged-in users are not counted in views, and all dates are in UTC. Only the sales breakdown is split by product.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | Start date (UTC). |
| `to` | date | yes | End date (UTC). |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_get_sales_stats",
    "arguments": {
      "from": "2026-10-05",
      "to": "2026-10-11"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "daily_views": [
      {
        "date": "2026-10-05",
        "views": 142
      },
      {
        "date": "2026-10-06",
        "views": 98
      },
      {
        "date": "2026-10-07",
        "views": 176
      },
      {
        "date": "2026-10-08",
        "views": 120
      },
      {
        "date": "2026-10-09",
        "views": 87
      },
      {
        "date": "2026-10-10",
        "views": 64
      },
      {
        "date": "2026-10-11",
        "views": 203
      }
    ],
    "daily_sales": [
      {
        "date": "2026-10-05",
        "amount": "24.00"
      },
      {
        "date": "2026-10-06",
        "amount": "0.00"
      },
      {
        "date": "2026-10-07",
        "amount": "36.00"
      },
      {
        "date": "2026-10-08",
        "amount": "12.00"
      },
      {
        "date": "2026-10-09",
        "amount": "0.00"
      },
      {
        "date": "2026-10-10",
        "amount": "0.00"
      },
      {
        "date": "2026-10-11",
        "amount": "48.00"
      }
    ],
    "sales_by_product": [
      {
        "product_id": "RGsF",
        "name": "Notion Budget Template",
        "amount": "72.00"
      },
      {
        "product_id": "mVT0",
        "name": "Freelancer Contract Pack",
        "amount": "48.00"
      }
    ]
  },
  "isError": false
}
```

## Get monthly sales report

MCP tool: `payhip_get_sales_report`

Access: read.

Returns the 7 items of a Payhip monthly report: EU and UK VAT, Stripe and PayPal fees, Payhip fees, custom taxes, products sold, affiliate commission and affiliate sales. Reports are monthly, so a month that has not ended yet is incomplete.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `month` | string | yes | Month as YYYY-MM. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_get_sales_report",
    "arguments": {
      "month": "month"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "month": "2026-09",
    "eu_uk_vat": "4.20",
    "processor_fees": "31.80",
    "payhip_fees": "25.00",
    "custom_taxes": "0.00",
    "products_sold": [
      {
        "name": "Notion Budget Template",
        "items": 38
      },
      {
        "name": "Freelancer Contract Pack",
        "items": 12
      }
    ],
    "affiliate_commission": "12.00",
    "affiliate_sales": 3
  },
  "isError": false
}
```

## List subscribers

MCP tool: `payhip_list_subscribers`

Access: read.

Returns the Subscribers tab of the Customers page. Buyers keep access while past_due and lose it on cancelled, incomplete and incomplete_expired. Payhip moves a subscription to cancelled on its own after a 20-day grace period of failed payments.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | active, trialing, cancelled, paused, unpaid, past_due, incomplete or incomplete_expired. |
| `email` | string | no | Find one subscriber by email. |
| `limit` | integer | no | 1 to 100. Default: 25. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_list_subscribers",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "subscribers": [
      {
        "subscription_id": "sub_3Hf9aD",
        "email": "client@example.com",
        "product_name": "Design Club",
        "plan_name": "Monthly",
        "status": "active",
        "started": "2026-08-14"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## List coupons

MCP tool: `payhip_list_coupons`

Access: read.

Returns the coupons from Marketing > Coupons with how often each was used. Expiry dates are in UTC. Notes are your private notes and buyers never see them.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `limit` | integer | no | 1 to 100. Default: 25. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_list_coupons",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "coupons": [
      {
        "coupon_id": "cpn_9d2e41",
        "code": "LAUNCH25",
        "discount_type": "percentage",
        "amount": "25",
        "applies_to": "product",
        "product_id": "RGsF",
        "uses": 0,
        "usage_limit": 50,
        "expires_on": "2026-11-01",
        "notes": "Newsletter launch"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Create coupon

MCP tool: `payhip_create_coupon`

Access: write. Confirm: waits for the user's OK before it runs.

A percentage applies to the original price and a fixed amount is deducted from it. Payhip has no per-buyer limit, so use a product-specific code or single-use codes for that. The coupon works at checkout right away. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `code` | string | no | Code buyers type at checkout. Omit to let Payhip generate one. |
| `discount_type` | enum | yes | percentage or fixed. |
| `amount` | string | yes | Percent off or amount off. |
| `applies_to` | enum | yes | total_order, product or collection. |
| `product_id` | string | no | Required when applies_to is product. |
| `collection_id` | string | no | Required when applies_to is collection. |
| `usage_limit` | integer | no | Total uses across all buyers, not per buyer. |
| `expires_on` | date | no | Expires at 00:00 UTC on this date. |
| `notes` | string | no | Private note. Buyers never see it. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_create_coupon",
    "arguments": {
      "code": "LAUNCH25",
      "discount_type": "percentage",
      "amount": "25",
      "applies_to": "product",
      "product_id": "RGsF",
      "usage_limit": 50,
      "expires_on": "2026-11-01",
      "notes": "Newsletter launch"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "coupon_id": "cpn_9d2e41",
    "code": "LAUNCH25",
    "discount_type": "percentage",
    "amount": "25",
    "applies_to": "product",
    "product_id": "RGsF",
    "usage_limit": 50,
    "uses": 0,
    "expires_on": "2026-11-01",
    "expires_at": "2026-11-01T00:00:00Z",
    "notes": "Newsletter launch"
  },
  "isError": false
}
```

## Create product

MCP tool: `payhip_create_product`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a digital product only; courses, coaching, memberships and physical products are not created by this tool. Each file can be up to 5 GB. The default is invisible, so nothing goes on your store until you set visible or unlisted. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `title` | string | yes | Product title. |
| `price` | string | yes | Price, e.g. 12. Add + for pay what you want: 5+ means at least 5, 0+ means any amount including free. |
| `file_url` | string | yes | Public URL of the file to sell, up to 5 GB. |
| `description` | string | no | Product description. |
| `cover_image_url` | string | no | Cover image shown on the product page. |
| `visibility` | enum | no | visible, invisible or unlisted. Default: invisible. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_create_product",
    "arguments": {
      "title": "title",
      "price": "price",
      "file_url": "https://example.com"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "product_id": "Qx7B",
    "name": "Notion Budget Template",
    "type": "digital",
    "price": "12.00",
    "visibility": "invisible",
    "url": "https://payhip.com/b/Qx7B"
  },
  "isError": false
}
```

## Update product

MCP tool: `payhip_update_product`

Access: write. Confirm: waits for the user's OK before it runs.

Returns the product after the change. A price change applies to new orders at once, and products with variants are not covered by this tool. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `product_id` | string | yes | Product ID from list_products. |
| `fields` | object | yes | Any of title, price, description, visibility (visible, invisible or unlisted). |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_update_product",
    "arguments": {
      "product_id": "product_8c41d2",
      "fields": "fields"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "product_id": "RGsF",
    "name": "Notion Budget Template",
    "type": "digital",
    "price": "9.00",
    "visibility": "visible",
    "url": "https://payhip.com/b/RGsF"
  },
  "isError": false
}
```

## Add order note

MCP tool: `payhip_add_order_note`

Access: write.

Order notes are only visible to you and appear in the Order Notes column of your orders export. The note reaches no customer, so this tool runs without asking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `order_id` | string | yes | Order ID from list_orders. |
| `note` | string | yes | Note text. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_add_order_note",
    "arguments": {
      "order_id": "order_8c41d2",
      "note": "note"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "order_id": "ord_7K2mQx",
    "notes": [
      "Refunded in Stripe on request, emailed buyer"
    ]
  },
  "isError": false
}
```

## Reset download credits

MCP tool: `payhip_reset_download_credits`

Access: write.

Sets the credits back to the Download Limit in your Advanced Settings, which is 5 unless you changed it. It changes only the count and does not email the buyer; call resend_receipt for that. The call reaches no one, so it runs without asking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `order_id` | string | yes | Order ID from list_orders. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_reset_download_credits",
    "arguments": {
      "order_id": "ord_7K2mQx"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "order_id": "ord_7K2mQx",
    "email": "client@example.com",
    "download_limit": 5,
    "download_credits": 5,
    "status": "reset"
  },
  "isError": false
}
```

## Resend receipt

MCP tool: `payhip_resend_receipt`

Access: write. Confirm: waits for the user's OK before it runs.

Does the same as Resend Receipt in the Customers menu: the buyer gets the receipt again. If the buyer ran out of download attempts, call reset_download_credits first. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `order_id` | string | yes | Order ID from list_orders. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_resend_receipt",
    "arguments": {
      "order_id": "order_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "order_id": "ord_7K2mQx",
    "email": "client@example.com",
    "status": "sent"
  },
  "isError": false
}
```

## Cancel subscription

MCP tool: `payhip_cancel_subscription`

Access: write. Confirm: waits for the user's OK before it runs.

Does the same as Cancel Subscription on the Subscribers tab: it prevents future charges and unenrolls the customer, who immediately loses access to the product. It does not refund past payments. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `subscription_id` | string | yes | Subscription ID from list_subscribers. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_cancel_subscription",
    "arguments": {
      "subscription_id": "subscription_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "subscription_id": "sub_3Hf9aD",
    "email": "client@example.com",
    "product_name": "Design Club",
    "status": "cancelled",
    "access": "ended"
  },
  "isError": false
}
```

## Block customer

MCP tool: `payhip_block_customer`

Access: write. Confirm: waits for the user's OK before it runs.

Payhip stores the PayPal payer ID or card payer ID of the order on your Blocked List, and that buyer cannot make future purchases from your store. There is no unblock tool; remove a buyer on the Blocked List page. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `order_id` | string | yes | Order ID from list_orders. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "payhip_block_customer",
    "arguments": {
      "order_id": "order_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "order_id": "ord_7K2mQx",
    "email": "client@example.com",
    "blocked": true,
    "payer_type": "card"
  },
  "isError": false
}
```
