Create an offer
Creates a sellable offer with one or more pricing options and returns its checkoutUrl. This is a single call — there is no separate plan or paylink to create first. idempotencyKey is optional; a retried request with the same key returns the original offer with 200 instead of creating a duplicate.
Authorization
apiKey Your merchant API key, shown once at creation in the dashboard (Settings → API key).
In: header
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
curl -X POST "https://example.com/offers" \ -H "Content-Type: application/json" \ -d '{ "name": "Pro", "pricing": [ { "amount": "30", "acceptedTokens": [ "usdc-base" ], "billing": { "type": "one_time" } } ] }'{ "id": "offer_01j8x2q3r4s5t6u7v8w9x0y1z2", "name": "Pro", "description": "string", "imageUrl": "string", "identifier": "pro", "productRef": "SKU-1234", "checkoutUrl": "https://tidepay.cc/pay/a8f3k2", "pricing": [ { "id": "price_01j8x2q3r4s5t6u7v8w9x0y1z3", "label": "Monthly", "amount": "30", "currency": "USDC", "billing": { "type": "recurring", "interval": "month" }, "acceptedTokens": [ { "tokenKey": "usdc-polygon", "chainId": 8453, "amountBaseUnits": "30000000" } ], "trialDays": 7, "maxCycles": 12, "maxFailedCycles": 3, "active": true } ], "active": true, "availableQuantity": 100, "redeemedCount": 12, "expiresAt": "2026-08-19T14:32:00.000Z", "afterCompletion": { "property1": null, "property2": null }, "features": [ { "property1": null, "property2": null } ], "collectFields": { "property1": null, "property2": null }, "allowedPaymentMethods": { "property1": null, "property2": null }, "metadata": { "orderId": "12345" }, "reference": "ORDER-2024-001", "isSandbox": true, "createdAt": "2026-08-19T14:32:00.000Z", "updatedAt": "2026-08-19T14:32:00.000Z"}