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]
}
]
}Provide your SellApp API key as a bearer token.
In: header
Header Parameters
Reuse this key only for an identical retry. A replay returns Idempotent-Replayed: true.
8 <= length <= 255Store 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"
}