API ReferenceCoupons

Batch create coupons

Create multiple coupons in one request by sending a resources array.

Create multiple coupons in one request by sending a resources array.

Each resource supports the same product and variant scoping as the single-create endpoint. Set store_wide to false, provide products, and optionally provide product_variants. Each variant must belong to one of the selected products.

{
  "resources": [
    {
      "code": "STARTER10",
      "type": "PERCENTAGE",
      "discount": 10,
      "store_wide": false,
      "products": [123],
      "product_variants": [1001]
    }
  ]
}
POST
/v2/coupons/batch

Authorization

AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

Header Parameters

Idempotency-Key?string

Reuse this key only for an identical retry. A replay returns Idempotent-Replayed: true.

Length8 <= length <= 255
X-STORE?string

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.

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

application/json

curl -X POST "https://sell.app/api/v2/coupons/batch" \  -H "Idempotency-Key: project-library-2026-09-04" \  -H "X-STORE: launch-lab" \  -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
    }
  ]
}
{
  "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
    }
  ]
}
{
  "type": "invalid_request_error",
  "code": "bad_request",
  "message": "The request could not be understood.",
  "status": 400,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#bad-request"
}
{
  "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"
}