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", "message": "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", "message": "string"}Offer detail
/checkouts/{checkoutId}Authorization
bearerAuth API key from Dashboard → Integrations → API, MCP and CLI.
In: header
Path Parameters
Offer (checkout) id
Query Parameters
full adds the whole editable settings surface to the response.
Value in
- "full"
Response Body
application/json
application/json
curl -X GET "https://example.com/checkouts/string"{ "checkoutImages": {}, "checkoutImagesMedia": {}, "checkoutMedia": {}, "checkoutMediaWidth": 0, "showTestimonials": true, "showPlanIncludes": true, "planIncludesLayout": {}, "afterPurchase": { "thankYou": { "type": "defaultPage", "redirectUrl": "string", "custom": { "eyebrow": "string", "headline": "string", "messageHtml": "string", "messageMarkdown": "string", "ctaLabel": "string", "ctaUrl": "string", "showOrderSummary": true, "nextOffer": { "kind": "checkout", "checkoutId": "string", "productId": "string", "headline": "string", "description": "string", "ctaLabel": "string" } } }, "emails": { "sendPurchaseConfirmationToBuyer": true, "sendPurchaseNotificationToOwner": true, "sendFailedPaymentEmailToBuyer": true, "sendFailedPaymentEmailToOwner": true }, "emailOverrides": { "property1": { "enabled": true, "subject": { "en": "string", "pl": "string" }, "headline": { "en": "string", "pl": "string" }, "layout": [ { "id": "string", "type": "text", "text": { "en": "string", "pl": "string" } } ], "body": { "en": "string", "pl": "string" }, "variants": { "property1": {}, "property2": {} }, "attachments": [ { "kind": "media", "mediaId": "string", "name": "string", "mimeType": "string", "size": 0, "storagePath": "string", "url": "string" } ] }, "property2": { "enabled": true, "subject": { "en": "string", "pl": "string" }, "headline": { "en": "string", "pl": "string" }, "layout": [ { "id": "string", "type": "text", "text": { "en": "string", "pl": "string" } } ], "body": { "en": "string", "pl": "string" }, "variants": { "property1": {}, "property2": {} }, "attachments": [ { "kind": "media", "mediaId": "string", "name": "string", "mimeType": "string", "size": 0, "storagePath": "string", "url": "string" } ] } } }, "deadline": { "type": "fixed_date", "endsAt": 0, "deadlineKey": "string", "expiryAction": "waitlist", "redirectUrl": "string", "fallbackCheckoutId": "string", "showCountdown": true, "bannerBgColor": "string", "bannerTextColor": "string", "bannerText": "string", "bannerStyle": "solid", "bannerHideText": true, "bannerSize": "small" }, "theme": { "sourcePresetId": "string", "overrides": { "selectedTheme": "auto", "themeColor": "tomato", "customColors": { "light": { "accent": "string", "gray": "string", "background": "string" }, "dark": { "accent": "string", "gray": "string", "background": "string" } }, "customCheckoutColors": { "light": { "checkoutLeftBackground": "string", "checkoutRightBackground": "string", "checkoutLeftTextColor": "string", "checkoutLeftPriceColor": "string", "accent": "string" }, "dark": { "checkoutLeftBackground": "string", "checkoutRightBackground": "string", "checkoutLeftTextColor": "string", "checkoutLeftPriceColor": "string", "accent": "string" } }, "radius": "none", "styleVariant": "solid" } }, "invoiceAsOption": true, "hideCountryField": true, "fixedCountry": "string", "showFixedCountry": true, "showPhoneField": {}, "showAdditionalInfo": {}, "collectFirstName": true, "collectLastName": true, "freeAccessPeriod": { "interval": "day", "interval_count": 0 }, "signupTagIds": {}, "allowPromotionCode": {}, "forceB2B": true, "promoteNetPrices": true, "promoteNetPriceRate": 0, "priceVariantsPlacement": {}, "stripeTaxBehavior": {}, "paymentMethodsDisplay": {}, "paymentsMethods": { "blik": false, "p24": false, "przelewy24": false, "applePay": false, "googlePay": false, "klarna": false, "card": false }, "showExpressCheckout": true, "allowUpgradeSubscriptionPlan": true, "allowDowngradeSubscriptionPlan": true, "enableClientToBuyMultipleTimes": true, "clientMultiplePurchaseLimit": 0, "multiplePurchaseType": { "type": "fixed", "value": 0 }, "termsUrl": "string", "privacyPolicyUrl": "string", "termsContent": "string", "privacyPolicyContent": "string", "claim": "string", "customInvoicesClient": { "accountUrl": "string", "accountName": "string", "client": "fakturownia", "id": "string" }, "disableInvoiceIssuing": true, "issueReceiptWhenInvoiceIsOptIn": true, "dontSendInvoiceToClient": true, "customInvoiceEmailSubject": "string", "customInvoiceEmailMessage": "string", "disableEmailNotificationAboutPurchase": true, "disableEmailNotificationAboutPurchaseToOwner": true, "disableEmailsAboutFailedPayment": true, "disableEmailNotificationAboutFailedPaymentClient": true, "disableEmailsAboutCancelSubscription": true, "disableEmailsAboutEndSubscription": true, "disableEmailNotificationsRemindersAboutEndingAccessToClient": true, "ownerEmailNotifications": { "property1": true, "property2": true }, "offerStack": { "items": [ { "id": "string", "title": "string", "description": "string", "value": 0 } ], "showValues": true, "showTotal": true }, "oto": { "enabled": true, "steps": [ { "otoOfferId": "string", "onAcceptStepIndex": 0, "onDeclineStepIndex": 0 } ] }, "facebookPixelId": "string", "googleAnalyticsId": "string", "googleAnalyticsGtmId": "string", "metaConversionIntegrationId": "string", "conversionTrackingIntegrationIds": {}, "conversionTrackingInheritDefaults": true, "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, "accessInterval": "string", "accessIntervalCount": 0, "accessUntil": "string", "installments": { "numberOfCycles": 0, "allowCancellation": true }, "saleStartsAt": "string", "saleStartDisplay": "hidden", "saleEndsAt": "string", "quantityLimit": 0, "compareAtAmountCents": 0, "customInvoiceName": "string", "planId": "string" } ], "orderBumps": [ { "orderBumpId": "string", "visibleForPriceIds": [ "string" ] } ]}{ "error": "string", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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, "accessInterval": "string", "accessIntervalCount": 0, "accessUntil": "string", "installments": { "numberOfCycles": 0, "allowCancellation": true }, "saleStartsAt": "string", "saleStartDisplay": "hidden", "saleEndsAt": "string", "quantityLimit": 0, "compareAtAmountCents": 0, "customInvoiceName": "string", "planId": "string"}{ "error": "string", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "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", "message": "string"}Was this article helpful?

