Update an offer
Presentation, addressing, distribution limits and lifecycle only. pricing is NOT patchable: an existing option's terms are immutable, because a subscriber's on-chain authorization is sized against the amount in force when they subscribed. Add an option with POST /offers/{offerId}/pricing, retire one with DELETE /offers/{offerId}/pricing/{priceId}, and move an existing subscriber with POST /subscriptions/{subscriptionId}/migrate.
Authorization
apiKey Your merchant API key, shown once at creation in the dashboard (Settings → API key).
In: header
Path Parameters
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
curl -X PATCH "https://example.com/offers/string" \ -H "Content-Type: application/json" \ -d '{}'{ "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"}