docs
/
Billing

Service agreements

Why a service must be accepted before it runs, and where the current terms are served from.

Before a metered service runs on platform credentials, someone in your organization has to accept its agreement.

This is not a formality. When you use a shared service, we are calling a third-party provider on your behalf and paying for it. The agreement is where that relationship, its cost and its rules are made explicit.

The base terms

Every platform-provided service carries the same base statement, plus a line specific to that service:

You'll use our built-in service, billed to your account by usage. You can switch to your own provider anytime. You're responsible for lawful use and the underlying provider's terms.

Three things are established in that one sentence: it is metered, you are not locked in, and the provider's own terms still bind you.

The four setup agreements

AgreementThe service-specific line
Phone & SMS serviceCalls and messages are billed per minute/message.
Email sendingYou must only send to people who agreed to hear from you.
Shipping labelsLabel costs are billed to your account.
AI featuresDo not submit content you have no right to use.

The per-provider agreements

Eight providers carry their own longer agreement covering acceptable use, billing and data handling:

OpenAI · Anthropic · Google Gemini · DeepSeek · Twilio · Amazon SES · Bulk email · EasyPost

Each states its markup explicitly. The Anthropic agreement, for instance, sets out that charges are based on input plus output tokens, that a 20% platform fee applies over Anthropic's base rates, and that input and output are priced differently — and links Anthropic's own acceptable-use policy, terms of service and privacy policy.

Each service record carries requiresAgreement, its agreementText and a longer documentation block, served through the catalog:

GET/service-pricing/catalogJWT
GET/service-pricing/{service}JWT

Why it is required

Three things the agreement establishes:

You accept the provider's terms. Using a provider through us still means using that provider. Their acceptable-use policy and terms apply to what you send, and each agreement links them.

You accept the cost. The agreement states the platform markup for that service. Accepting it is accepting that rate.

You accept the usage rules. Some obligations are yours, not ours — email sending requires that recipients opted in; AI requires that you have the right to submit what you send.

What happens without acceptance

A call to a service with an unaccepted agreement is refused before anything runs. Nothing is sent, nothing is charged, and the response carries what the caller needs:

  • The reason, as a stable code
  • Which service it is for
  • The agreement text itself
  • Where to accept it

An alert is also raised, so the person who can accept it finds out rather than only the developer whose call failed.

This fails closed, deliberately

An unaccepted agreement stops the service rather than running it and asking later. Nobody should be billed for a provider whose terms they have not seen.

Acceptance is recorded per service

Acceptance is stored against your organization, per service — not as one blanket agreement, because the terms genuinely differ. An SMS agreement and an AI agreement carry different obligations and different rates.

Once accepted, that service runs. Others still need their own.

Which services need one

Anything provisioned as shared or sub-account requires an agreement, because it runs on our credentials and our cost:

ProvisioningCountAgreementWhy
Bring your own29Not requiredYou already deal with that provider directly
Shared3RequiredRuns on platform credentials — email sending, shipping labels, AI
Sub-account1RequiredPhone & SMS, which provisions you an isolated sub-account

All fifteen metered services require acceptance. See service rates for each one's markup.

Where to see what you have accepted

The setup catalog shows every service alongside its live status: what is switched on, what needs accepting, and what still needs credentials.