Billing and browser credit
Pay-as-you-go usage, a separate $5 browser-testing credit, and purchased funds for phone calls, SMS, and numbers.
Pay as you go
PAYG has no monthly platform subscription. Add purchased funds when you need phone calls, SMS, phone numbers, or more browser-testing usage. A wallet top-up is a one-time purchase, not a recurring plan subscription.
Core agents, supported provider choices, tools, knowledge bases, API, MCP, webhooks, and standard call evidence do not require a paid platform plan. Usage is still metered. Phone-number rental and setup charges are separate; an imported number's carrier may bill you directly. A hosted agent on GPT-Live 1 is billed by call duration, from the moment the call is placed, at $0.05 per minute, including silence, plus tokens for the backend that handles tools. A GPT-Live call that runs a workflow is billed for the seconds of each workflow line the caller heard plus the workflow listener's speech-to-text, both measured by Skysay, with no backend tokens. A hosted agent on Gemini Live is billed for the time the call is connected to the engine, at $0.023 per minute, including silence; while the engine reconnects after a dropped connection, nothing is billed.
PAYG's standard workspace allowance is 10 billed phone numbers and 10 simultaneous live calls, shared across projects and agents. Number rental and setup are charged separately; this is permission to hold up to ten paid numbers, not ten free numbers. Carrier-billed imports and zero-rental numbers do not consume the billed-number allowance. Owning more numbers does not multiply the concurrent-call allowance.
For more than 10 billed numbers or 10 simultaneous calls, contact us
about Scale. An Skysay operator can set a workspace's concurrent-call
limit below or above the plan allowance. A value of 0 resets that control to
the plan default; it does not disable calls. Choosing or changing a use-case
profile does not change this concurrency control. Other workspace-specific
risk limits or agreed overrides can change the effective allowance, and active historical subscriptions retain their
recorded plan capacity. Available funds, carrier capacity, and other admission
checks still apply. This allowance is not a guarantee of ten connected calls.
Higher capacity must be agreed and validated for your workload; do not assume a higher limit from a pricing label. Check your workspace's current limits before launching a batch of calls.
Billed-number allowance
Open Phone numbers or Billing to see your workspace's billed-number allowance: used, limit, and remaining. This is workspace-wide across projects, not just the numbers on the current page. Only numbers with an Skysay monthly rental count; carrier-billed imports and zero-rental numbers do not. Rental and setup charges are separate from the allowance.
Checkout displays the allowance before confirmation and disables confirmation for an additional billed number when the limit is reached. Use Request more capacity to contact us. Adding wallet funds does not increase the number limit. If the allowance is unavailable, refresh before ordering a billed number.
The server also checks capacity before starting a new managed carrier purchase or reserving its payment. The display is a current count, not a capacity reservation while you browse. Other verification and availability checks still apply. Previously purchased orders continue through reconciliation rather than being purchased again.
Adding funds for a number request
When Phone numbers says Payment required, choose Add funds on that request. Billing keeps the request selected and shows its current status and recorded quote. If the request no longer needs payment, return to its details for the current next step.
A top-up buys purchased wallet funds. It does not reserve a number, increase capacity, satisfy verification, or guarantee activation. Browser-testing credit cannot pay for phone-number setup, registration or rental. See Regulated numbers for the request states.
Checkout success and cancellation return to the same request. Only a confirmed Stripe payment credits the wallet. A browser redirect alone cannot add funds. Retries in the same checkout context reuse the recorded session and frozen return destinations. If another same-amount checkout is still payable or its outcome is unknown, Billing explains the conflict and lists known open checkout links. Resolve that checkout first; a different request must not silently inherit its return destination. An unknown checkout outcome is not confirmation that no payment page exists.
API callers can pass number_request_id and, optionally, project_id to
POST /v1/billing/stripe/topup-sessions. This requires numbers:read in addition
to wallet:write; the request must belong to the authenticated workspace and
still require payment. The server builds the Numbers return URL from the
configured site origin. In this mode the persisted checkout claim governs
idempotency, including when a caller supplies its own key. Standalone top-ups
keep their ordinary return behavior.
Adding funds through MCP
A full MCP connection can request purchased funds with create_wallet_topup
on /mcp. This tool is not available on the OpenAI /mcp/openai profile or
the /mcp/read-only profile. Full-connector funding requires
explicitly consented wallet:write. The permission starts unticked and
approves no payment. Read the wallet currency with account_overview, then
ask the owner to approve the exact amount, currency and purchase purpose:
purchased Skysay calling credit. The workspace comes only from the
authenticated connection.
For a wallet in USD, an owner-approved $10 request looks like:
{
"method": "card_checkout",
"amount_minor": 1000,
"currency": "USD",
"idempotency_key": "unique-owner-approved-purchase",
"payment_approved": true
}Use the actual wallet currency, in three uppercase letters. A missing or mismatched currency refuses before payment. Current top-up limits apply. Never put card numbers, CVC, passwords, verification codes or payment tokens in an idempotency key, chat message or log.
| Path | What happens | What it proves |
|---|---|---|
card_checkout | The tool returns a direct Stripe hosted-checkout URL. The owner completes payment there. No Skysay dashboard visit is needed to initiate it. | MCP initiation with browser checkout; not entirely in-chat payment. |
shared_payment_token | A compatible host/wallet obtains an owner-approved token scoped to the seller, amount and currency, then submits it through the tool. A configured Stripe seller profile is required. | Backend support; actual host/default-card and merchant acceptance are separate. |
| Website Billing → Add funds | The existing hosted Checkout flow remains available with its existing return context. | Website funding; unchanged by MCP permission. |
With method: "shared_payment_token" and request_challenge: true, the tool
can return seller/amount/currency metadata before purchase approval. This is
JSON metadata, not native payment UI or MCP elicitation. If the seller profile
is unavailable, use card_checkout. The owner obtains and approves tokens in
their compatible wallet; Skysay does not collect their payment credentials.
See Stripe's seller token contract
and Link buyer approval flow.
Client support for MCP or URL elicitation
does not itself supply a native wallet or payment card.
A checkout, pending payment, successful redirect or synchronous token response
is not spendable credit. Only a matching signed Stripe webhook adds purchased
funds, once. Check account_overview before ordering numbers or placing paid
calls. Retry an uncertain result with the same idempotency key and identical
parameters; do not authorize another payable attempt. A definite token
refusal requires new owner approval, a new token and a new key. Reusing a card
key with changed parameters is refused by Stripe's idempotency contract; it
does not amend the earlier approval. Never reuse an approval for another
workspace, amount, currency or credential.
The same contract is available to scoped API clients at the retained
POST /v1/agent/onboarding/headless/payments URL. It does not enable signup.
None of these payment paths expands the $5 browser-only welcome grant or
changes normal purchased-funds number, PSTN or SMS billing.
Your browser-testing credit
An eligible customer receives a one-time USD $5 welcome credit when signing into the workspace. For a EUR wallet, the grant is converted using the rate recorded at grant time. The credit has no expiry and is limited to one grant per customer identity and per workspace. Creating another workspace or inviting another member does not replenish an already claimed grant.
Use it from Agents → select an AI agent → Talk to it, which opens the test panel beside the editor. Configure a supported STT, LLM, and TTS stack first. Each authenticated browser session is capped at 180 seconds and uses the selected components' metered prices. This is a credit balance, not a promise of a fixed number of free minutes or unlimited tests.
Browser sessions reserve funds before starting. Unused reserved funds are released when the session settles. Once browser credit is exhausted, further tests require purchased funds. A negative purchased balance must be resolved; browser credit does not cancel a debt.
Browser testing only
Welcome credit cannot fund number setup, number rental, PSTN calls or SMS. Those require purchased funds and normal approval and carrier readiness. It is not cash, refundable purchased credit, or transferable to another workspace. The anonymous homepage demo is separate and does not replenish workspace credit. SMS signup is deferred.
A browser test whose requested opening fails with confirmed zero agent output may have its unused hold released without charge. The trusted worker decision must win before native usage is accepted. Usage accepted first settles normally; a final settled, released or payment-due result is preserved. Missing usage or an empty transcript alone does not release a hold at once; the usual 24-hour recovery in A call has ended but funds are still reserved still applies. A late usage report after an authorized release does not charge the customer again. Retrying starts a separate test with the normal balance checks.
Reading your balance and costs
The workspace wallet balance shows purchased funds available for phone usage. Billing shows browser credit separately. A wallet showing $0 purchased funds can therefore still have browser-testing credit available.
The agent editor names the credit before a browser test only while there is credit left to spend. Once the grant is gone, the note there stops naming a payer rather than claiming a balance you no longer have.
For API clients, read the wallet with GET /v1/wallet (scope wallet:read).
For MCP clients, the account_overview tool (scope account:read) returns a
combined workspace rollup whose wallet object carries the same balance
fields. Either surface separates available_minor (purchased),
promotional_available_minor (browser credit), and total_available_minor
(both). Amounts are in the wallet currency's minor units. Do not treat the
combined total as a PSTN spending balance.
Call charges depend on the selected components and their actual usage, not a flat all-inclusive price per minute. Inspect the call's cost evidence for the components used. BYOK provider charges follow that component's billing mode; bringing a provider key does not make unrelated platform or carrier usage free. New calls use their own pricing snapshot. Existing call prices and historical wallet entries are not rewritten when the catalog changes.
Speech that is interrupted or refused
A caller often talks over the agent, and the agent stops speaking. For the voices Skysay measures itself (Cartesia, ElevenLabs, Fish Audio and Azure), the voice charge for each reply is the text Skysay had already sent to the voice provider:
- A reply that finishes is charged the text that was sent.
- A reply the caller interrupts, or that Skysay stops at the end of the call, is charged the text sent before it stopped. Text the agent had not sent yet is not charged.
- A reply the voice provider rejects with an error is not charged.
- A reply lost to a connection failure or a provider timeout is not charged. When Skysay retries it, only the attempt that succeeds is charged.
The unit is the provider's own, counted the way the provider counts it: characters for Cartesia, ElevenLabs and Azure, and UTF-8 bytes for Fish Audio. Azure counts escaped markup, and counts each Chinese character twice.
Gemini voices are charged in the tokens Google reports for each reply (the text sent and the audio generated):
- A reply that finishes is charged the tokens Google reported for it.
- A reply the caller interrupts is charged the tokens Google had reported when it stopped, never an estimate.
- A reply Google rejects, or that comes back without audio, is not charged, and neither is a reply lost to a connection failure.
An interrupted reply never holds the call's reservation: the call settles with the rest of its measured usage. Voice-to-voice engines (GPT-Live and Gemini Live) are charged by session time, so none of this applies to them.
Usage history and the ledger
Open Billing → Usage and ledger to see what your workspace spent and every movement of its wallet.
Usage history charts spend for the last 30 or 90 days, or the last 12 or 24 months, in your wallet's currency. Spend is grouped into calls, SMS, numbers, recording storage and other charges. Days and months are in UTC and follow the date each charge was posted to the wallet: a call is charged when it settles, so a call that runs past midnight UTC counts on the day it ended. Top-ups, refunds and call holds are not spend and do not appear in the chart.
Select a bar, or View entries in the table under the chart, to open that day's or month's entries. For the selected range, call spend is split into the phone line (each call's carrier cost) and the AI agent (the rest of what the call was charged). The two parts always add up to the call spend.
The ledger lists every wallet entry, newest first, and can be filtered by type and date range. A charge reads negative and a top-up positive. Before a call starts, funds are held for it; when it ends, the charge is taken from the hold and the unused part is returned, so a call usually shows a hold, a charge and a returned hold. A hold sets money aside rather than spending it, so do not add a call's three amounts together. Entries that belong to a call or an SMS conversation in the project you are working in link to it. The ledger covers your whole wallet, so it also lists charges from your other projects; those entries say the call or conversation is in another project instead of linking.
Export CSV downloads exactly the entries the ledger shows for the same type
and dates. Amount columns are in the wallet currency's minor units (cents),
with a decimal amount column alongside. To reconcile, sum
available_delta_minor for the change in available funds and
spent_delta_minor for spend. One file holds up to 10,000 entries;
for a larger selection, choose a shorter date range or a single type.
GET /v1/wallet/ledger returns only the most recent entries (at most 500, with
no cursor), and its totals cover the returned entries only. Use Usage and
ledger or its export for a complete record.
Incoming calls blocked by insufficient funds
If an incoming phone call is refused because there are not enough available purchased funds to reserve it, Skysay emails the workspace's active owners whose email addresses are verified. The notification identifies the workspace and attempt time, shows available and reserved purchased funds at the attempt, and links to Billing. It does not include the caller's number, call audio or a transcript.
Review pending holds and add funds for new calls if needed. Browser-testing credit cannot pay for phone calls. Reserved funds are temporarily unavailable; they can also belong to completed calls whose settlement is still pending. If funds appear stuck, reply to the notification for help rather than assuming the number needs to be activated again.
Skysay sends at most one of these emails per workspace in any 24 hours; further refused calls in that window do not send another. Before sending, Skysay checks funding again and does not send the alert if the original reserve can now be covered. While an automatic top-up is still being confirmed, the alert waits: it is sent only if the top-up does not cover the call. Alerts that are more than a day old are not sent late. Email delivery is asynchronous and is not guaranteed to arrive before another call.
The refused attempt remains in Calls. No call audio starts and no Skysay call-usage charge is posted for that rejected attempt. Number rental and existing charges are separate. A funding failure does not itself mean that the number or its agent assignment is still activating.
A call has ended but funds are still reserved
A completed or otherwise ended hosted call can briefly keep its reservation while Skysay receives the AI components' usage reports. The reservation is not a final charge. When the measured usage arrives, Skysay settles the call at its original prices and returns any unused funds.
A spoken workflow call settles when it ends, including the listener and voice seconds Skysay measures itself.
Skysay retries reports that could not be delivered. If a terminal call still has no trustworthy usage report after 24 hours, automatic recovery returns its reservation without charging for the unmetered call. Skysay absorbs that cost; it does not estimate missing usage from the transcript or call length. A later report does not add a charge after this release. One exception: when an answered workflow call's every source was measured at zero, nothing is unmetered, so recovery charges its platform and carrier lines, as the report would have. Returned promotional credit remains promotional credit, and purchased funds return as purchased funds.
A call that is still active keeps its reservation. If an ended call remains reserved beyond this recovery period, contact support with the call ID.
Funding a call while it is running
Component-metered hosted calls reserve credit before they start. As the funded time runs low, Skysay tries to reserve another five minutes using the call's original prices and exchange rate, with an estimation margin. This applies to inbound and outbound hosted calls across conversation engines and use cases. Browser tests retain their existing shorter time limit.
If available credit cannot cover an extension, configured automatic recharge may run. The call continues only when the additional reservation is confirmed before its current funded deadline. A payment still processing, an unavailable billing service, or a late top-up does not grant extra call time. The ordinary maximum-call duration still applies even when sufficient credit is available.
When funding ends a connected call, the call remains completed with
ended_reason: "funding_exhausted". Its reason_detail distinguishes:
insufficient_balance: the last renewal confirmed too little eligible credit.renewal_unavailable: further funded time could not be confirmed.
The Calls detail explains this ending. Integrations should treat it separately from the caller's business outcome, such as a promise, booking or callback. An earlier caller hangup, AI agent ending or operator hangup keeps its own reason.
The reservation is an estimate, not a guaranteed maximum charge. Final charges use actual component usage; variable model/tool use, delayed usage reports or a delayed carrier disconnect can exceed reserved credit. Unused reserved funds are released after settlement, and unpaid usage can still appear as payment due. Funding new call time does not itself collect historical unpaid charges. Promotional credit funds eligible browser calls only. All telephone calls, number setup/rental and SMS use purchased funds. They retain normal funded runtime renewal, transfer and settlement behavior; there is no setup-call waiver of overrun charges or purchased-funds debt.
Existing subscription records
Developer, Launch, and Growth monthly/yearly subscriptions are no longer sold. If your account already has a subscription record, Billing retains its status and cancellation controls. Switching the public offer to PAYG does not itself cancel a Stripe subscription or refund an earlier payment. Check Billing before assuming an existing recurring charge has stopped.
Call amounts on Overview
For component-metered calls, Recent calls uses the same wallet billing verdict as Calls. Once settlement is available, the amount is the settled charge, not the larger amount reserved at admission. Released holds show Released; reservations awaiting usage remain explicitly labelled as reserved. A payment due result separates the amount paid from the outstanding amount.
Overview spend totals combine settled charges with still-pending reservations and SMS charges. Released reservations and unpaid balances do not count as settled spend. Legacy calls without a component-billing verdict retain their existing cost calculation.
Transcript translation
Optional post-call and SMS translation uses the usual wallet balance and is listed separately from voice usage. The rate is $0.02 per 1,000 eligible original words per target language, with a $0.01 minimum per successfully translated communication and target. Cached reads and text already in the target language are free. See transcript translation for examples, funding behavior, and the difference between automatic processing and an explicit Translate request.