Enterprise deals
Enterprise deals let you give a specific customer a custom price and/or custom
entitlement limits — without changing your catalog. They are per-customer
overrides, stored as runtime data, not part of billing.config (which is
shared and version-controlled).
A deal reuses the same entitlement keys as your catalog, with negotiated values, plus an optional custom subscription price.
await guap.contracts.set( { priceAmount: 200000, // cents — $2,000 priceInterval: "month", // omit for a one-time price entitlements: { seats: { included: 500 }, // vs catalog Pro's 5 "api-calls": { included: 50_000_000 }, "advanced-analytics": true, }, committedVolume: 50_000_000, billingContactEmail: "ap@bigco.example", invoiceTerms: "net30", startsAt: "2026-07-01T00:00:00Z", endsAt: "2027-07-01T00:00:00Z", status: "active", notes: "Annual enterprise agreement", }, { customerId: "org_123" },);When a deal is active (and within its optional date window):
- The negotiated entitlement values are applied to the customer immediately —
guap.has(),guap.limit(), andguap.usage.balance()reflect them. - Checkout bills that customer at their custom price via an inline Stripe price, instead of the catalog list price.
Managing deals
Section titled “Managing deals”| Surface | How |
|---|---|
| SDK | guap.contracts.get/set/delete (server key) |
| HTTP | GET/PUT/DELETE /v1/contracts/:customerId |
| Dashboard | Customer detail → Enterprise deal panel (requires billing:manage) |
Removing a deal reverts the customer to their catalog plan’s entitlements.
Every create/update/delete is recorded in the audit log, attributed to the API token or dashboard user that made the change.
- Custom subscription price and custom entitlement limits are enforced today. Committed-volume and per-event custom meter pricing are stored on the deal but not yet applied to usage billing.
- The same mechanism powers Guapocado’s own enterprise agreements — we use it on our platform account rather than maintaining a separate internal-only path.