Offers & order bumps
Offers & order bumps endpoints of the Zanfia Workspace API, with schemas and code samples.
An offer is a checkout of a product; one product can have several. Order bumps are add-on offers shown at checkout. Amounts are minor units (1999 = 19.99). All routes require a Authorization: Bearer header — see Authentication.
List offers
/checkoutsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Query Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/checkouts"{ "count": 0, "checkouts": [ { "id": "string", "productId": "string", "name": "string", "slug": "string", "title": "string", "active": true, "archived": true, "isFree": true, "priceCount": 0, "createdAt": "string" } ]}{ "error": "string"}Create an offer
/checkoutsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts" \ -H "Content-Type: application/json" \ -d '{ "productId": "string" }'{ "id": "string", "productId": "string", "name": "string", "slug": "string", "title": "string", "active": true, "archived": true, "isFree": true, "priceCount": 0, "createdAt": "string"}{ "error": "string"}Offer detail
/checkouts/{checkoutId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Response Body
application/json
application/json
curl -X GET "https://example.com/checkouts/string"{ "id": "string", "productId": "string", "name": "string", "slug": "string", "title": "string", "active": true, "archived": true, "isFree": true, "priceCount": 0, "createdAt": "string", "description": "string", "language": "string", "successUrl": "string", "prices": [ { "id": "string", "productId": "string", "amountCents": 0, "currency": "string", "type": "one_time", "active": true, "status": "available", "gateways": [ "string" ], "label": "string", "hidden": true, "interval": "string", "intervalCount": 0, "trialPeriodDays": 0, "installments": { "numberOfCycles": 0, "allowCancellation": true }, "saleEndsAt": "string", "quantityLimit": 0, "compareAtAmountCents": 0, "customInvoiceName": "string", "planId": "string" } ], "orderBumps": [ { "orderBumpId": "string", "visibleForPriceIds": [ "string" ] } ]}{ "error": "string"}Update offer settings
/checkouts/{checkoutId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Partial update of an offer — the full checkout-builder settings surface. Omitted fields are unchanged.
Derived from the internal editor DTO with the composition/lifecycle fields removed: active/archived (publish + delete routes), orderBumps (attach/detach routes), and the republishHiddenProducts activation control flag. oto (the checkout's one-time-offer chain attachment) IS included — offer ids for its steps[].otoOfferId come from the /oto-offers routes; the shared Joi validator enforces the chain shape.
description is a public alias for checkoutDescription (kept from the original 5-field surface); when both are present checkoutDescription wins.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/checkouts/string" \ -H "Content-Type: application/json" \ -d '{}'{ "checkoutId": "string"}{ "error": "string"}Delete an offer
/checkouts/{checkoutId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Response Body
application/json
application/json
curl -X DELETE "https://example.com/checkouts/string"{ "checkoutId": "string", "deleted": true}{ "error": "string"}Activate or pause an offer
/checkouts/{checkoutId}/publishAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts/string/publish" \ -H "Content-Type: application/json" \ -d '{ "active": true }'{ "checkoutId": "string", "active": true}{ "error": "string"}Duplicate an offer
/checkouts/{checkoutId}/duplicateAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts/string/duplicate" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "string", "productId": "string", "name": "string", "slug": "string", "title": "string", "active": true, "archived": true, "isFree": true, "priceCount": 0, "createdAt": "string"}{ "error": "string"}Make this the product's default checkout
/checkouts/{checkoutId}/set-defaultAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts/string/set-default"{ "checkoutId": "string", "productId": "string"}{ "error": "string"}Add a price variant
/checkouts/{checkoutId}/pricesAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts/string/prices" \ -H "Content-Type: application/json" \ -d '{ "type": "one_time", "amountCents": 0, "currency": "string" }'{ "id": "string", "productId": "string", "amountCents": 0, "currency": "string", "type": "one_time", "active": true, "status": "available", "gateways": [ "string" ], "label": "string", "hidden": true, "interval": "string", "intervalCount": 0, "trialPeriodDays": 0, "installments": { "numberOfCycles": 0, "allowCancellation": true }, "saleEndsAt": "string", "quantityLimit": 0, "compareAtAmountCents": 0, "customInvoiceName": "string", "planId": "string"}{ "error": "string"}Reorder prices
/checkouts/{checkoutId}/prices/orderAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PUT "https://example.com/checkouts/string/prices/order" \ -H "Content-Type: application/json" \ -d '{ "priceIds": [ "string" ] }'{ "checkoutId": "string"}{ "error": "string"}Mutate a price
/checkouts/{checkoutId}/prices/{priceId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Price id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Point mutation of an existing price. change-amount re-prices in place (fresh gateway price under the same id) keeping label/limits/promo/plan. edit-details changes label/description only; set-plan re-links the price to a product plan; edit applies the partial overrides in edit over the stored price (limits/promo/access/gateways/trial).
Response Body
application/json
application/json
curl -X PATCH "https://example.com/checkouts/string/prices/string" \ -H "Content-Type: application/json" \ -d '{ "operation": "activate" }'{ "checkoutId": "string", "priceId": "string"}{ "error": "string"}Archive or remove a price
/checkouts/{checkoutId}/prices/{priceId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Price id
Query Parameters
"archive"Value in
- "archive"
- "remove"
Response Body
application/json
application/json
curl -X DELETE "https://example.com/checkouts/string/prices/string"{ "checkoutId": "string", "priceId": "string", "mode": "archive"}{ "error": "string"}Preview a cart-recovery email
/checkouts/{checkoutId}/sessions/{sessionId}/recovery-email/previewAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Checkout session id
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts/string/sessions/string/recovery-email/preview"{ "status": "ok", "recipientEmail": "string", "customerName": "string", "productName": "string", "checkoutUrl": "string", "language": "pl"}{ "error": "string"}Send a cart-recovery email
/checkouts/{checkoutId}/sessions/{sessionId}/recovery-emailAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Checkout session id
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts/string/sessions/string/recovery-email"{ "status": "ok", "sentAtMs": 0, "sentCount": 0}{ "error": "string"}Attach a bump to an offer
/checkouts/{checkoutId}/order-bumpsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/checkouts/string/order-bumps" \ -H "Content-Type: application/json" \ -d '{ "orderBumpId": "string" }'{ "checkoutId": "string", "orderBumpId": "string", "alreadyAttached": true}{ "error": "string"}Detach a bump from an offer
/checkouts/{checkoutId}/order-bumps/{orderBumpId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Order bump id
Response Body
application/json
application/json
curl -X DELETE "https://example.com/checkouts/string/order-bumps/string"{ "checkoutId": "string", "orderBumpId": "string"}{ "error": "string"}List order bumps
/order-bumpsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/order-bumps"{ "count": 0, "orderBumps": [ { "id": "string", "name": "string", "description": "string", "ctaText": "string", "productId": "string", "productName": "string", "priceId": "string", "price": { "amountCents": 0, "currency": "string", "type": "one_time" }, "createdAt": "string" } ]}{ "error": "string"}Create an order bump
/order-bumpsAuthorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/order-bumps" \ -H "Content-Type: application/json" \ -d '{ "productId": "string", "priceId": "string", "name": "string" }'{ "orderBumpId": "string"}{ "error": "string"}Update an order bump
/order-bumps/{orderBumpId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Order bump id
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/order-bumps/string" \ -H "Content-Type: application/json" \ -d '{}'{ "orderBumpId": "string"}{ "error": "string"}Delete an order bump
/order-bumps/{orderBumpId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Order bump id
Response Body
application/json
application/json
curl -X DELETE "https://example.com/order-bumps/string"{ "orderBumpId": "string"}{ "error": "string"}Was this article helpful?

