API ReferenceLegacy v1

Coupons

Request fields, responses, and examples for v1 coupons.

These v1 operations are active. Use an API key for SDK integrations. See authentication for credentials and store selection, or follow the first request guide.

List all coupons

GET
/v1/coupons

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Query Parameters

limit?integer

Number of items to return per page.

Default15
Range1 <= value <= 100
page?integer

Page number to return.

Default1
Range1 <= value
with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://sell.app/api/v1/coupons"
{
  "data": [
    {
      "id": 1,
      "code": "BONANZA",
      "type": "PERCENTAGE",
      "discount": "80",
      "limit": null,
      "store_wide": true,
      "minimum_amount": null,
      "expires_at": null,
      "created_at": "2022-12-12T12:12:12.000000Z",
      "updated_at": "2022-12-12T12:12:12.000000Z",
      "store_id": 1,
      "deleted_at": null,
      "products": [],
      "product_variants": [],
      "maximum_discount_amount": null,
      "applies_to": "one_time",
      "subscription_payments": null
    }
  ],
  "links": {
    "first": "https://sell.app/api/v1/coupons?page=1",
    "last": "https://sell.app/api/v1/coupons?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https://sell.app/api/v1/coupons",
    "per_page": 15,
    "to": 1,
    "total": 1,
    "links": [
      {
        "url": null,
        "label": "&laquo; Previous",
        "active": false
      },
      {
        "url": "https://sell.app/api/v1/coupons?page=1",
        "label": "1",
        "active": true
      },
      {
        "url": null,
        "label": "Next &raquo;",
        "active": false
      }
    ]
  }
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Create a coupon

POST
/v1/coupons

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://sell.app/api/v1/coupons" \  -H "Content-Type: application/json" \  -d '{    "code": "PLAN10",    "type": "PERCENTAGE",    "discount": 10,    "store_wide": false,    "products": [      123,      456    ],    "product_variants": [      1001,      1002    ]  }'

default

{
  "data": {
    "id": 1,
    "code": "PLAN10",
    "type": "PERCENTAGE",
    "discount": "10",
    "limit": null,
    "store_wide": false,
    "minimum_amount": null,
    "expires_at": null,
    "created_at": "2026-08-30T12:00:01.000000Z",
    "updated_at": "2026-08-30T12:00:01.000000Z",
    "store_id": 1,
    "deleted_at": null,
    "products": [
      123,
      456
    ],
    "product_variants": [
      1001,
      1002
    ],
    "maximum_discount_amount": null,
    "applies_to": "one_time",
    "subscription_payments": null
  }
}

subscriptionPlans

{
  "data": {
    "id": 2,
    "code": "MEMBER20",
    "type": "PERCENTAGE",
    "discount": "20",
    "limit": null,
    "store_wide": false,
    "minimum_amount": null,
    "expires_at": null,
    "created_at": "2026-08-30T12:00:01.000000Z",
    "updated_at": "2026-08-30T12:00:01.000000Z",
    "store_id": 1,
    "deleted_at": null,
    "products": [
      120
    ],
    "product_variants": [
      4321
    ],
    "maximum_discount_amount": null,
    "applies_to": "subscriptions",
    "subscription_payments": 3
  }
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Retrieve a coupon

GET
/v1/coupons/{coupon}

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Path Parameters

coupon*integer

The coupon path parameter.

Query Parameters

with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://sell.app/api/v1/coupons/1"
{
  "data": {
    "id": 1,
    "code": "BONANZA",
    "type": "PERCENTAGE",
    "discount": "80",
    "limit": null,
    "store_wide": true,
    "minimum_amount": null,
    "expires_at": null,
    "created_at": "2022-12-12T12:12:12.000000Z",
    "updated_at": "2022-12-12T12:12:12.000000Z",
    "store_id": 1,
    "deleted_at": null,
    "products": [],
    "product_variants": [],
    "maximum_discount_amount": null,
    "applies_to": "one_time",
    "subscription_payments": null
  }
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "not_found_error",
  "code": "resource_not_found",
  "message": "Not Found.",
  "status": 404,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#resource-not-found"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Update a coupon

PATCH
/v1/coupons/{coupon}

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Path Parameters

coupon*integer

The coupon path parameter.

Query Parameters

with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://sell.app/api/v1/coupons/1" \  -H "Content-Type: application/json" \  -d '{    "store_wide": false,    "products": [      123    ],    "product_variants": [      1001,      1002    ]  }'
{
  "data": {
    "id": 1,
    "code": "BAZINGA",
    "type": "PERCENTAGE",
    "discount": "80",
    "limit": null,
    "store_wide": false,
    "minimum_amount": null,
    "expires_at": null,
    "created_at": "2022-12-12T12:12:12.000000Z",
    "updated_at": "2026-08-30T12:00:01.000000Z",
    "store_id": 1,
    "deleted_at": null,
    "products": [
      123
    ],
    "product_variants": [
      1001,
      1002
    ],
    "maximum_discount_amount": null,
    "applies_to": "one_time",
    "subscription_payments": null
  }
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "not_found_error",
  "code": "resource_not_found",
  "message": "Not Found.",
  "status": 404,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#resource-not-found"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Delete a coupon

DELETE
/v1/coupons/{coupon}

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Path Parameters

coupon*integer

The coupon path parameter.

Query Parameters

with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://sell.app/api/v1/coupons/1"
{
  "data": {
    "id": 1,
    "code": "BONANZA",
    "type": "PERCENTAGE",
    "discount": "80",
    "limit": null,
    "store_wide": true,
    "minimum_amount": null,
    "expires_at": null,
    "created_at": "2022-12-12T12:12:12.000000Z",
    "updated_at": "2026-08-30T12:00:01.000000Z",
    "store_id": 1,
    "deleted_at": "2026-08-30T12:00:01.000000Z",
    "products": [],
    "product_variants": [],
    "maximum_discount_amount": null,
    "applies_to": "one_time",
    "subscription_payments": null
  }
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "not_found_error",
  "code": "resource_not_found",
  "message": "Not Found.",
  "status": 404,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#resource-not-found"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Update a coupon

PUT
/v1/coupons/{coupon}

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Path Parameters

coupon*integer

The coupon path parameter.

Query Parameters

with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://sell.app/api/v1/coupons/1" \  -H "Content-Type: application/json" \  -d '{    "store_wide": false,    "products": [      123    ],    "product_variants": [      1001,      1002    ]  }'
{
  "data": {
    "id": 1,
    "code": "BAZINGA",
    "type": "PERCENTAGE",
    "discount": "80",
    "limit": null,
    "store_wide": false,
    "minimum_amount": null,
    "expires_at": null,
    "created_at": "2022-12-12T12:12:12.000000Z",
    "updated_at": "2026-08-30T12:00:01.000000Z",
    "store_id": 1,
    "deleted_at": null,
    "products": [
      123
    ],
    "product_variants": [
      1001,
      1002
    ],
    "maximum_discount_amount": null,
    "applies_to": "one_time",
    "subscription_payments": null
  }
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "not_found_error",
  "code": "resource_not_found",
  "message": "Not Found.",
  "status": 404,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#resource-not-found"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Search coupons

POST
/v1/coupons/search

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Query Parameters

with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://sell.app/api/v1/coupons/search" \  -H "Content-Type: application/json" \  -d '{    "filters": [      {        "field": "id",        "operator": "=",        "value": 1      }    ],    "sort": [      {        "field": "created_at",        "direction": "desc"      }    ]  }'
{
  "data": [
    {
      "id": 1,
      "code": "BONANZA",
      "type": "PERCENTAGE",
      "discount": "80",
      "limit": null,
      "store_wide": true,
      "minimum_amount": null,
      "expires_at": null,
      "created_at": "2022-12-12T12:12:12.000000Z",
      "updated_at": "2022-12-12T12:12:12.000000Z",
      "store_id": 1,
      "deleted_at": null,
      "products": [],
      "product_variants": [],
      "maximum_discount_amount": null,
      "applies_to": "one_time",
      "subscription_payments": null
    }
  ],
  "links": {
    "first": "https://sell.app/api/v1/coupons/search?page=1",
    "last": "https://sell.app/api/v1/coupons/search?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https://sell.app/api/v1/coupons/search",
    "per_page": 20,
    "to": 1,
    "total": 1,
    "links": [
      {
        "url": null,
        "label": "&laquo; Previous",
        "active": false
      },
      {
        "url": "https://sell.app/api/v1/coupons/search?page=1",
        "label": "1",
        "active": true
      },
      {
        "url": null,
        "label": "Next &raquo;",
        "active": false
      }
    ]
  }
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Batch create coupons

POST
/v1/coupons/batch

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://sell.app/api/v1/coupons/batch" \  -H "Content-Type: application/json" \  -d '{    "resources": [      {        "code": "STARTER10",        "type": "PERCENTAGE",        "discount": 10,        "store_wide": false,        "products": [          123        ],        "product_variants": [          1001        ]      }    ]  }'
{
  "data": [
    {
      "id": 1,
      "code": "STARTER10",
      "type": "PERCENTAGE",
      "discount": "10",
      "limit": null,
      "store_wide": false,
      "minimum_amount": null,
      "expires_at": null,
      "created_at": "2026-08-30T12:00:01.000000Z",
      "updated_at": "2026-08-30T12:00:01.000000Z",
      "store_id": 1,
      "deleted_at": null,
      "products": [
        123
      ],
      "product_variants": [
        1001
      ],
      "maximum_discount_amount": null,
      "applies_to": "one_time",
      "subscription_payments": null
    }
  ]
}
{
  "data": [
    {
      "id": 1,
      "code": "STARTER10",
      "type": "PERCENTAGE",
      "discount": "10",
      "limit": null,
      "store_wide": false,
      "minimum_amount": null,
      "expires_at": null,
      "created_at": "2026-08-30T12:00:01.000000Z",
      "updated_at": "2026-08-30T12:00:01.000000Z",
      "store_id": 1,
      "deleted_at": null,
      "products": [
        123
      ],
      "product_variants": [
        1001
      ],
      "maximum_discount_amount": null,
      "applies_to": "one_time",
      "subscription_payments": null
    }
  ]
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Batch update coupons

PATCH
/v1/coupons/batch

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Query Parameters

with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://sell.app/api/v1/coupons/batch" \  -H "Content-Type: application/json" \  -d '{    "resources": {      "1": {        "store_wide": false,        "products": [          123        ],        "product_variants": [          1001,          1002        ]      }    }  }'
{
  "data": [
    {
      "id": 1,
      "code": "BONANZA",
      "type": "PERCENTAGE",
      "discount": "80",
      "limit": null,
      "store_wide": false,
      "minimum_amount": null,
      "expires_at": null,
      "created_at": "2022-12-12T12:12:12.000000Z",
      "updated_at": "2026-08-30T12:00:01.000000Z",
      "store_id": 1,
      "deleted_at": null,
      "products": [
        123
      ],
      "product_variants": [
        1001,
        1002
      ],
      "maximum_discount_amount": null,
      "applies_to": "one_time",
      "subscription_payments": null
    }
  ]
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}

Batch delete coupons

DELETE
/v1/coupons/batch

Authorization

bearerAuth storeAuth
AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

X-STORE<token>

Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.

In: header

Query Parameters

with_trashed?boolean

Include soft-deleted resources in the result.

Defaultfalse
only_trashed?boolean

Return only soft-deleted resources. Ignored when with_trashed is true.

Defaultfalse

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

resources*array<integer>

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://sell.app/api/v1/coupons/batch" \  -H "Content-Type: application/json" \  -d '{    "resources": [      1,      2    ]  }'
{
  "data": [
    {
      "id": 1,
      "code": "BONANZA",
      "type": "PERCENTAGE",
      "discount": "80",
      "limit": null,
      "store_wide": true,
      "minimum_amount": null,
      "expires_at": null,
      "created_at": "2022-12-12T12:12:12.000000Z",
      "updated_at": "2026-08-30T12:00:01.000000Z",
      "store_id": 1,
      "deleted_at": "2026-08-30T12:00:01.000000Z",
      "products": [],
      "product_variants": [],
      "maximum_discount_amount": null,
      "applies_to": "one_time",
      "subscription_payments": null
    },
    {
      "id": 2,
      "code": "BONANZA2",
      "type": "PERCENTAGE",
      "discount": "80",
      "limit": null,
      "store_wide": true,
      "minimum_amount": null,
      "expires_at": null,
      "created_at": "2022-12-12T12:12:12.000000Z",
      "updated_at": "2026-08-30T12:00:01.000000Z",
      "store_id": 1,
      "deleted_at": "2026-08-30T12:00:01.000000Z",
      "products": [],
      "product_variants": [],
      "maximum_discount_amount": null,
      "applies_to": "one_time",
      "subscription_payments": null
    }
  ]
}
{
  "type": "authentication_error",
  "code": "unauthenticated",
  "message": "Unauthenticated.",
  "status": 401,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}
{
  "type": "authorization_error",
  "code": "forbidden",
  "message": "This action is unauthorized.",
  "status": 403,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#forbidden"
}
{
  "type": "validation_error",
  "code": "validation_failed",
  "message": "The selected product variant id is invalid.",
  "status": 422,
  "param": "product_variant_id",
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#validation-failed",
  "errors": {
    "product_variant_id": [
      "The selected product variant id is invalid."
    ]
  }
}
{
  "type": "rate_limit_error",
  "code": "rate_limit_exceeded",
  "message": "Too Many Attempts.",
  "status": 429,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}
{
  "type": "api_error",
  "code": "api_error",
  "message": "Server Error",
  "status": 500,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#api-error"
}