API docs
Store credit
Permission: store_credit (read / write). Store credit is its own permission, separate from customers, because it's money. Every change is a row in the customer's credit ledger, the balance on the customer follows it, and the balance mirrors to BigCommerce store credit so it can be spent online too.
Balance and ledger
GET /v1/customers/{id}/store-credit returns the balance and the customer's latest ledger rows, newest first (?limit=, up to 200, default 50).
curl https://app.blackbeachpos.com/api/v1/customers/312/store-credit \
-H "Authorization: Bearer ir_live_…"
{
"status": "ok",
"data": {
"object": "store_credit",
"customer_id": 312,
"balance_cents": 1500,
"ledger": [
{
"object": "store_credit_entry",
"id": 88,
"customer_id": 312,
"kind": "refund",
"amount_cents": 1500,
"balance_after_cents": 1500,
"reference_type": "api",
"reference_id": null,
"note": "Issued via API (Etsy connector) · ref RMA-7",
"created_at": "2026-09-25T15:02:11Z"
}
]
}
}
kind is one of refund, adjustment, redeem (spent at the register or through the API), online_redeem (spent at BigCommerce checkout), reversal, trade_in, consignment_payout. amount_cents is signed: positive adds credit, negative spends it.
GET /v1/store-credit lists ledger rows across all customers, oldest first, cursor-paginated. Filters: customer_id, updated_since (matches the row's created_at), limit, cursor. Use it to keep a loyalty or accounting system in step.
Issue credit
POST /v1/customers/{id}/store-credit/issue
| Field | |
|---|---|
amount_cents |
Required, 1 to 1,000,000 |
reason |
Required: refund (money owed back to the customer) or adjustment (goodwill or a correction) |
note |
Optional, up to 200 characters |
reference |
Optional, your id for this change (shown in the ledger note) |
curl -X POST https://app.blackbeachpos.com/api/v1/customers/312/store-credit/issue \
-H "Authorization: Bearer ir_live_…" -H "Content-Type: application/json" \
-H "Idempotency-Key: rma-7-credit" \
-d '{"amount_cents": 1500, "reason": "refund", "reference": "RMA-7"}'
Redeem credit
POST /v1/customers/{id}/store-credit/redeem with { "amount_cents": 1500, "reference": "ORDER-4410" } spends from the balance. 422 INSUFFICIENT_CREDIT when the balance is short.
Rules
- An
Idempotency-Keyheader is required on issue and redeem (400 IDEMPOTENCY_KEY_REQUIREDwithout it), so a retry can never move the balance twice. A replay returns the first response withIdempotent-Replayed: true. - Both answer with the new
balance_centsandentry, the ledger row just written. - An unknown or deleted customer is
404 NOT_FOUND. - Every change fires the
store_credit.changedwebhook:{ "object": "store_credit", "customer_id", "balance_cents", "entry" }. It also fires for credit issued or spent at the register or online. - A key with
customers:readalso sees the balance asstore_credit_centson the customer.
