💰 Pricing and Credits#
Labs Cloud uses a prepaid seconds ledger displayed as minutes. Standard managed calls cost $0.10 per connected minute and debit the balance once. That single call-minute includes the hosted agent runtime, standard managed speech and transcription, Supafone Supervisor guidance, QA, and call artifacts.
Pricing data is exposed publicly:
curl https://api.labs.supafone.ai/v1/pricingPlans#
| Plan | Price | Included minutes | Overage | Included numbers |
|---|---|---|---|---|
| Developer | $49/mo | 490 | $0.10/min | 0 |
| Growth | $249/mo | 2,500 | $0.10/min | 3 |
| Scale | $999/mo | 10,000 | $0.10/min | 20 |
The trial signup grants 5 free minutes. Pay-as-you-go reloads cost $40 for 400 minutes and do not require a subscription.
What a recording costs#
Supafone does not add a second fee just because a call is recorded. Hosted calls debit the connected voice-agent runtime from the minute ledger. The recording artifact is included. Transcription and Supafone Supervisor work remain separate internal measurements for operations and cost analysis, but they do not debit the customer's balance again when included in a managed call.
Usage Meters#
| Meter | Unit | Notes |
|---|---|---|
agent_minute | minute | Connected hosted-agent call time; debited once |
self_healing | second | Supafone Supervisor and QA work; measured but included during managed calls |
tts | spoken second | Managed speech output; measured but included during managed calls |
stt | audio second | Transcription; measured but included during managed calls |
shared_number_pool | pooled route | Default shared Supafone number pool |
managed_number | number-month | Dedicated Supafone-managed phone number |
premium_number | number-month | $3/month premium number |
Balance#
curl https://api.labs.supafone.ai/v1/billing/balance \
-H "Authorization: Bearer $SUPAFONE_LABS_API_KEY"Response shape:
{
"plan": "growth",
"seconds_remaining": 150000,
"minutes_remaining": 2500,
"top_up": {
"developer": "https://...",
"growth": "https://...",
"scale": "https://...",
"credit_pack_minutes": 400,
"credit_pack_price": 40,
"managed_rate_per_minute": 0.1,
"pricing": "/v1/pricing"
}
}Hosted Stripe Checkout#
The SDK and MCP create Checkout Sessions on the server, so a secret Stripe key never enters a client application or model context:
checkout = client.labs.billing.checkout(
kind="plan",
plan_key="growth",
)
print(checkout["checkout_url"])After payment, poll client.labs.billing.status(checkout_session_id). Use client.labs.billing.portal() to return an authenticated Stripe Customer Portal link for payment methods, invoices, and cancellation. Stripe webhook events are signature-verified and deduplicated before credits or entitlements are granted.
Stripe Grant Safety#
Checkout metadata identifies what was purchased:
{
"plan_key": "developer",
"included_minutes": "490",
"credits_minutes": "400"
}Rules:
plan_keysupportsdeveloper,growth, andscale.- Server-owned plan constants determine the actual grant. Stripe metadata
- Configured Stripe Prices are retrieved and checked for active status, USD,
- One-time credit packs always grant 400 minutes after a verified
$40 invoice.paidrenewals grant the subscription minutes again.- If an account exists for the email, credits land on the account balance.
- Otherwise credits land on the newest active key, or a new
sl_live_...key is
cannot increase or reduce minutes.
exact amount, and monthly versus one-time recurrence before Checkout opens.
payment.
issued.
Number Billing#
The safe default is the shared pool:
{
"default_strategy": "default_pool",
"default_pool_price_monthly": 0
}Dedicated and premium numbers are paid number-month choices:
{
"dedicated_number_price_monthly": 3,
"premium_number_price_monthly": 3
}Product flows should make number purchases explicit. Do not silently upgrade a shared-pool user to a dedicated or premium number.
Premium voice providers, international or toll-free carrier usage, phone numbers, and messaging can be billed separately from the standard managed-call minute. Stripe displays applicable tax only after the correct tax registrations and product tax configuration have been completed.
For SDK and MCP callers, the first paid-number request returns a hosted checkout_url. After Stripe reports paid, repeat the purchase with the billing_checkout_session_id. Supafone claims the single-use entitlement, provisions the carrier number, then consumes the entitlement. A retry returns the already-provisioned number rather than buying another one.