Skip to content

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(), and guap.usage.balance() reflect them.
  • Checkout bills that customer at their custom price via an inline Stripe price, instead of the catalog list price.
SurfaceHow
SDKguap.contracts.get/set/delete (server key)
HTTPGET/PUT/DELETE /v1/contracts/:customerId
DashboardCustomer 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.