How Billing Works
This page explains how SendSeven charges an account and how to read billing data through the API. It describes the mechanics only. Plan prices, included volumes and per-unit rates are on the pricing page. Your account's own rates are returned by GET /billing/subscription, so you never need to hardcode them. Prices can change.
The model in one paragraph
You pay a monthly base fee for your plan, plus usage. Every plan includes one pool of messages. Your billable usage is drawn from that pool first. Only what is left over is charged at your plan's per-unit rates. Pricing applies to the billing account: every workspace on that account shares the plan, the pool and the invoice. There are no per-user fees. You can add as many team members as you like.
Monthly total = base fee
+ usage after the included pool
+ items billed outside the pool (monitoring alerts)
Base fee
- The base fee is charged every month, in addition to your usage. It is not a spend credit: usage does not "use up" the base fee. What the base fee buys is the included message pool.
- Some plans charge the base fee per connected channel. On those plans the included pool grows with the number of channels too.
- If your subscription starts part-way through a month, the base fee and the included pool of that first month are prorated by day.
- Legacy plans work differently. Some accounts that subscribed before the current plans keep a minimum commit: the monthly minimum acts as a credit, and you pay
max(usage, minimum). The billing APIs say which model an account is on in thefee_typefield:base_fee(all current plans) orminimum_commit(legacy).
The included message pool
Each billing account has one included pool per month. It covers:
| Usage | Contract key in the APIs |
|---|---|
| Conversation messages: outgoing messages sent by your team, bots, flows or the API | message |
| Campaign sends on messaging channels | campaign_message |
| Email campaign sends | email_campaign |
AI credits (key kb_query for compatibility) | kb_query |
How the pool is applied:
- One pool, all categories. There is no separate allowance per category. A message, a campaign send, an email and an AI credit all draw from the same pool.
- Most expensive first. The pool is applied to the usage with the highest unit rate first. The cheapest units are the ones left over and charged. This always works in your favour.
- Shared across workspaces. The pool belongs to the billing account, not to a workspace. Usage from every workspace on the account draws from it. See Billing for Multiple Workspaces.
- Monthly. The pool resets on the 1st of each month (UTC). Unused units do not roll over.
What is billable
- Inbound is free. Messages your contacts send to you are never charged.
- A message is billable only once it was handed over for delivery: its status reached
sent,deliveredorread. A message that fails or is never sent is not charged. The same rule applies to campaign sends. - Email campaigns are counted per email, in the month the email was sent.
- AI is measured in AI credits. See AI Credits for what costs what and what is free.
- Messages you send from the WhatsApp Business app on a number connected with coexistence are synced into SendSeven for your records but are not charged by SendSeven.
- A month's usage is rated at the plan that was active during that month. An upgrade takes effect immediately and rates the current month at the new plan. A downgrade takes effect on the 1st of the next month.
Billed outside the pool
These items are never drawn from the included pool:
| Item | How it is paid | Details |
|---|---|---|
| Monitoring alerts by SMS or WhatsApp | Charged per alert on the monthly invoice, on top of the base fee. Alerts by email, in-app or Slack are free. | Contract keys alert_sms, alert_whatsapp |
| SMS carrier fee | Every SMS carries two fees. The carrier fee is charged per segment and comes out of the prepaid SMS balance, which belongs to the workspace and is topped up by card in the app. SendSeven's own fee is charged per message (not per segment) and is not outside the pool: it counts against the included pool like any other message. | SMS (prepaid) |
| Meta's WhatsApp fees | Billed by Meta, not on your SendSeven invoice. The SendSeven message charge is separate. | WhatsApp: Meta charges |
| RCS messages | Paid from a prepaid RCS wallet on your billing account. | RCS Wallet & Billing |
AI credits are part of the pool. They are listed in AI Credits because they have their own price list.
Plans differ in features, not only in price
Plans differ in their included pool and rates, and also in which features they include. For example, AI features, the Knowledge Base, bots, flows and automation are not on every plan. Compare plans on the pricing page.
A call to an endpoint of a feature that your plan does not include returns 403:
{
"detail": {
"code": "feature_disabled",
"feature": "flows"
}
}
The monthly invoice
SendSeven issues one invoice per billing account per month, at the start of the month. It covers every workspace on the account and is charged to the account's default payment method. It contains:
- Next month's base fee, in advance, labelled with the plan name and month.
- Prorated increases from the month that just ended, for example a channel added part-way through the month on a per-channel plan.
- Last month's usage: one line per usage category, plus one negative line "Included in base fee" for the part your pool covered. When the account has more than one workspace, each usage line starts with the workspace name. AI credits are one line, "AI Credits".
VAT is added where it applies. Prepaid top-ups (SMS balance, RCS wallet) get their own separate invoices.
Billing APIs
All endpoints are under https://api.sendseven.com/api/v1 and are read-only. They always describe the whole billing account of the workspace your credential resolves to.
| Endpoint | Returns | Access |
|---|---|---|
GET /billing/subscription | Plan, account status, fee_type, base fee, your per-unit rates (plan.cost_*), included pool size and how much of it is used this month. | billing:read |
GET /billing/upcoming-charges | The projected invoice for the current month: per category the gross quantity, included_units and billable_units, the base fee and total_eur. | billing:read (euro amounts: see below) |
GET /invoices/preview | The same projection as invoice line items. | billing:read |
GET /invoices | Past invoices with status, amounts and PDF links (page, page_size). | billing:read |
GET /invoices/{invoice_id} | One invoice with its line items. | billing:read |
GET /billing/tenant-usage | Usage and cost per workspace, per channel and per day, with the pool and base fee. See Billing for Multiple Workspaces. | billing:read + owner rule |
GET /billing/ai-usage | AI usage per feature group. See AI Credits. | billing:read + owner rule |
RCS wallet and SMS balance endpoints are documented on their own pages.
Who can read what
billing:readis required for every endpoint above. An API token must carry it.- Euro amounts in
GET /billing/upcoming-chargesare only returned when the user behind the credential hasbilling:adminor is the owner of the billing account. Everyone else gets the quantities, and the euro fields arenull. - The owner rule for per-workspace data.
GET /billing/tenant-usageandGET /billing/ai-usageshow data from every workspace on the billing account. Sobilling:readalone is not enough. The user must also be the billing-account owner, or have been given account-wide billing access by the owner (theaccount:billing_readpermission). A broad role such as*:*in one workspace does not count. Otherwise the API answers403. - API tokens for these two endpoints must themselves list
account:billing_readexactly. A wildcard does not count, not even for the owner. - OAuth apps cannot call the per-workspace endpoints (
403,code: oauth_not_allowed).
curl "https://api.sendseven.com/api/v1/billing/subscription" \
-H "Authorization: Bearer s7_api_YOUR_TOKEN"
Reading the numbers
- Gross vs. net. Per-category amounts are gross: quantity × rate, before the pool. The pool is applied once for the whole billing account. In
GET /billing/upcoming-chargesthe sum ofbillable_subtotal_eurover all categories equalsoverage_eur, the usage that is charged. - Projection vs. invoice. The upcoming charges are a projection of the month so far. They can be up to about an hour old. The invoice is final.
- Calendar months in UTC. Billing periods run from the 1st, 00:00 UTC, to the end of the month.
Next steps
- Billing for Multiple Workspaces: who pays, the shared pool, and usage per workspace through the API
- AI Credits: what AI costs and how to read AI usage
- SMS (prepaid), WhatsApp: Meta charges, RCS Wallet & Billing: items paid outside the pool
- Pricing: current plans and prices