API docs
Coupons
Permission: coupons (read / write).
GET /v1/coupons. Filters: code, is_active, updated_since, limit, cursor.
GET /v1/coupons/{id}
{
"object": "coupon",
"id": 9,
"code": "MARKETDAY",
"name": "Market day 15% off candles",
"type": "percent",
"value": 10,
"scope": "category",
"channel": "store_online",
"category_id": 530,
"product_id": null,
"min_subtotal_cents": 5000,
"starts_at": "2026-09-01T04:00:00Z",
"ends_at": null,
"max_uses": null,
"uses": 41,
"is_active": true,
"updated_at": "2026-09-20T12:00:00Z"
}
| Field | Values |
|---|---|
type |
percent (value is a whole percent) or fixed (value in cents) |
scope |
all, category, product |
channel |
store (counter only) or store_online (also on BigCommerce) |
Create, update, delete
POST /v1/coupons with code, name, type and value required; optional scope (default all), channel (default store), category_id / product_id (for the scope), min_subtotal_cents, starts_at, ends_at, max_uses, is_active (default true), notes.
curl -X POST https://app.blackbeachpos.com/api/v1/coupons \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"code": "welcome-8f3k2", "name": "Welcome 10%", "type": "percent", "value": 10, "max_uses": 1, "channel": "store_online", "ends_at": "2026-12-31T23:59:59Z"}'
- Codes are normalised to upper case (letters, numbers and dashes). A taken code is
409 CODE_TAKEN. - A
percentcoupon can't exceed 100;ends_atmust be afterstarts_at(400 VALIDATION_ERROR). - A
store_onlinecoupon also works at BigCommerce checkout: it syncs to the connected store within about a minute. Its category or product has to be linked to BigCommerce. - The typical use is an email tool minting one unique code per customer with
max_uses: 1.
PATCH /v1/coupons/{id} changes any of the same fields. DELETE /v1/coupons/{id} removes it (and its BigCommerce copy) and returns { "object": "coupon", "id": 9, "code": "…", "deleted": true }.
