> ## Documentation Index
> Fetch the complete documentation index at: https://assemblyai.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Billing and Pricing

AssemblyAI uses pay-as-you-go pricing with no contracts, minimums, or monthly subscriptions. You only pay for what you use, and failed transcripts aren't charged. For the latest per-hour rates across all models, see the [pricing page](https://www.assemblyai.com/pricing) or the [Models pricing section](/docs/getting-started/models#pricing).

## How billing works

* Add a credit card and deposit funds into your account. Funds are drawn down as you use the API.
* Rates are listed per hour for simplicity, but pre-recorded audio is pro-rated to the exact second of audio processed.
* Credits are deducted only after a successful transcription completes. If a request errors, you aren't charged for it.
* Monitor your balance on the **Billing** page (under **Workspace** > **Settings** > **Billing** in the [dashboard](https://www.assemblyai.com/dashboard/home)) and enable [auto-pay](#how-does-auto-pay-work) to avoid service interruptions. End-of-month invoicing is available for enterprise customers.
* Set up billing alerts under **Workspace** > **Settings** > **Alerts** in the dashboard to get notified before your balance runs low.

## Payment method and invoices

AssemblyAI accepts all major credit cards. ACH transfers are available in some cases — email [support@assemblyai.com](mailto:support@assemblyai.com) to learn more.

To update the credit card on your account, log in to the [dashboard](https://www.assemblyai.com/dashboard/home), go to **Workspace** > **Settings** > **Billing**, and update your payment details. You can also click **View billing details** in the bottom-left corner of the dashboard to jump straight to this page.

To change the company information shown on your invoices, email [support@assemblyai.com](mailto:support@assemblyai.com) with the details you'd like to appear.

## Pre-recorded Speech-to-Text billing

Pre-recorded transcription is billed on the duration of the submitted audio or video file in seconds, multiplied by the hourly rate for the selected speech model. Add-on features (for example, Entity Detection or Medical Mode) are billed separately at their own hourly rates, also pro-rated to the exact second.

## Streaming Speech-to-Text billing

<Warning>
  **Streaming is billed per session, not per second of audio**

  Streaming Speech-to-Text is billed on the total duration that your WebSocket connection stays open, not on the amount of audio you send. You're charged for the entire session — including any time the connection is idle with no audio flowing — so it's important to close streaming sessions as soon as you're done with them.
</Warning>

Billing for streaming sessions starts when the WebSocket connection opens and stops when the session ends. This model gives you full control over cost: you can keep a stream open continuously for instant response, or open streams on demand to minimize spend.

Each open session is billed independently on its own WebSocket-open duration, so concurrent sessions accumulate billed time in parallel. For example, two streaming sessions running simultaneously for 5 minutes each — including a single call that is dual-streamed under two separate session IDs — bill as 10 minutes of total session time at the streaming rate listed in the [Models pricing section](/docs/getting-started/models#pricing).

Follow these best practices to avoid unexpected charges:

* Always send a session termination message when your application is finished with a stream. This is what stops billing for the session.
* If a session is not closed, it will automatically close after 3 hours — and you'll be billed for the full 3 hours of session time, regardless of how much audio was actually streamed.
* Improperly closed streaming sessions are the most common cause of unexpected charges that lead to negative account balances.

For details on how to terminate a session, see the [Session termination](/docs/streaming/getting-started/transcribe-streaming-audio) message sequence reference.

## Voice Agent API billing

<Warning>
  **Voice Agent sessions are billed on WebSocket-open duration**

  Voice Agent sessions are billed on the total time the WebSocket connection stays open, not on how much audio the user or agent speaks. Always send [`session.end`](/docs/voice-agents/voice-agent-api/events-reference#sessionend) before closing the socket on an intentional disconnect.
</Warning>

Billing for a Voice Agent session starts when the WebSocket connection opens and stops when the session ends. Sessions bill at the Voice Agent rate listed on the [pricing page](https://www.assemblyai.com/pricing), pro-rated to the second, and each concurrent session accumulates billed time independently.

A few Voice Agent-specific behaviors to be aware of:

* **30-second resume grace window.** If the client closes the WebSocket without sending `session.end`, the server keeps the session open for 30 seconds so the client can reconnect with [`session.resume`](/docs/voice-agents/voice-agent-api/events-reference#sessionresume). That grace window is billable. Send `session.end` on any intentional disconnect (user hung up, "End call" button, page unload) to avoid it. See [Unexpected billing after the call ended](/docs/voice-agents/voice-agent-api/troubleshooting#unexpected-billing-after-the-call-ended).
* **Idle time is billable.** Just like Streaming STT, silence and idle periods on an open Voice Agent connection are billed. Close sessions as soon as you're done with them.
* **Any LLM Gateway calls made by the agent are billed separately** at the LLM Gateway token rates for the model in use — see [LLM Gateway billing](#llm-gateway-billing) below.

For the full session lifecycle and best practices, see the [Voice Agent API overview](/docs/voice-agents/voice-agent-api) and [Ending the session cleanly](/docs/voice-agents/voice-agent-api/browser-integration#6-ending-the-session-cleanly).

## LLM Gateway billing

LLM Gateway is billed on **input and output tokens**, not on audio duration or session time. Each request is charged at the per-1M-token input and output rates for the specific model you call. Rates vary by model — Claude, GPT, Gemini, and the other supported providers each have their own input and output prices, listed in the Rates table on the [Billing page](https://www.assemblyai.com/dashboard/home) of the dashboard and on the [pricing page](https://www.assemblyai.com/pricing).

A few things to keep in mind:

* **Output tokens usually cost more than input tokens.** Output pricing reflects the compute needed to generate the response. See [Understanding input and output tokens for LLM Gateway](/docs/faq/understanding-input-and-output-tokens-for-llm-gateway).
* **LLM Gateway is not covered by the \$50 free tier.** The free credits granted to new accounts apply to Pre-recorded STT, Real-time STT, Voice Agent API, Speech Understanding, and Guardrails. LLM Gateway usage is billed from your account balance from the first request.
* **In-region endpoints have a 10% surcharge as of July 1, 2026.** Requests to the US (`llm-gateway.assemblyai.com`) or EU (`llm-gateway.eu.assemblyai.com`) in-region endpoints are 10% higher than global routing as a direct pass-through of provider price increases, with no AssemblyAI upcharge. To keep the standard rate, opt into [global routing](/docs/llm-gateway/cloud-endpoints-and-data-residency#global-routing).
* **Streaming and Voice Agent calls that invoke LLM Gateway are billed additively.** The Streaming or Voice Agent session is billed on its WebSocket-open duration, and any LLM Gateway request made during that session is billed separately on its input and output tokens.

To estimate input token cost ahead of time, see [Estimate input token costs for LLM Gateway](/docs/guides/counting-tokens).

## Multichannel billing

When [multichannel transcription](/docs/pre-recorded-audio/transcribe-multiple-audio-channels) is enabled, each channel is transcribed and billed separately. The total cost is the audio duration multiplied by the model's hourly rate, multiplied by the number of channels.

For example, a 5-minute recording with three channels is billed as 15 minutes of audio (5 minutes × 3 channels) at the selected model's rate.

## Free tier and credits

New accounts receive \$50 in free credits for Pre-recorded STT, Real-time STT, Voice Agent API, Speech Understanding, and Guardrails. Credits do not expire, and any unused credits are retained on your account when you upgrade by adding a credit card. LLM Gateway is not included in the free tier.

Once your free credits are used up, add a credit card to keep using the API. If your balance reaches \$0 without [auto-pay](#how-does-auto-pay-work) enabled, API access is paused until you top up.

## Volume discounts

If you plan to send large volumes of audio or video through the API, [contact sales](https://www.assemblyai.com/contact) to see if you qualify for a volume discount.

## Startup and Y Combinator pricing

Early-stage startups can apply for the [AssemblyAI Startup Program](https://www.assemblyai.com/startup-program), designed to help startups build with the speech-to-text API without financial constraints.

Y Combinator companies qualify for special pricing — [contact sales](https://www.assemblyai.com/contact) to discuss the discount and see if you qualify.

## AWS Marketplace

AssemblyAI is available on the [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-n24l7xlhzr4o6). Purchasing there lets you consolidate billing with your existing AWS account and apply your spend toward AWS committed-use agreements.

Marketplace changes billing only. Your usage still runs on the AssemblyAI cloud API. Endpoints, API keys, and code are unchanged, and there is nothing to migrate in your integration.

### Subscribing

1. Subscribe through the [listing](https://aws.amazon.com/marketplace/pp/prodview-n24l7xlhzr4o6). New subscriptions include a 90-day trial with \$50 in usage credits, then enroll automatically in pay-as-you-go.
2. Complete the fulfillment step, which links your AWS entitlement to a single AssemblyAI workspace.

<Warning>
  **The entitlement attaches to one workspace**

  If your organization has more than one AssemblyAI account, the entitlement links to whichever workspace completes the fulfillment step. Accounts are never merged, so billing will not follow usage on a different account.

  Before subscribing, decide which workspace should be the billed one and make sure the person subscribing on the AWS side signs in to that workspace during fulfillment. See [Migrating existing accounts to multi-user](/docs/account-management#migrating-existing-accounts-to-multi-user).
</Warning>

### If your plan still shows Free after subscribing

1. Check the subscription start date in your AWS console. A future-dated subscription means the entitlement is not effective yet, and re-running the fulfillment link will not change your plan.
2. Confirm which workspace the entitlement resolved to. Your AWS account team can confirm whether the entitlement was issued and where it was mapped.
3. To avoid being blocked in the meantime, add a card under **Workspace** > **Settings** > **Billing**. This converts the workspace to pay-as-you-go immediately, your existing credits are retained and drawn down first, and billing consolidates back to AWS once the entitlement lands.

### Discounted rates

The listing self-serves at list pricing. For volume-based rates, [contact sales](https://www.assemblyai.com/contact/sales) to request a private offer, which you accept through AWS.

<Note>
  Marketplace billing is tied to an offer with a term. When the offer expires, a new one must be accepted to keep billing running through AWS.
</Note>

## Billing and customer usage tracking

The **Cost** and **Usage** pages under **Workspace** > **Manage** in your dashboard provide a breakdown of spend and usage. If you need to track usage programmatically on a per-customer basis, you can use webhooks with custom query parameters for async transcription, or capture the `session_duration_seconds` from the WebSocket Termination event for streaming.

For async transcription, append a `customer_id` query parameter to your webhook URL when submitting a transcription:

```
https://your-domain.com/webhook?customer_id=customer_123
```

When the transcription completes, extract the `customer_id` from the webhook URL and retrieve the `audio_duration` from the transcript response to record usage.

For streaming transcription, manage customer IDs in your application state and capture the `session_duration_seconds` from the Termination event. AssemblyAI bills streaming based on session duration.

<Note>
  Creating separate API keys for each customer is not recommended. Use webhooks
  with metadata instead.
</Note>

## How does Auto-pay work?

Auto-pay automatically recharges your account when your balance falls below a specified threshold. When triggered, it charges your card to bring your balance back to a predetermined amount. Auto-pay is recommended for production environments to prevent service interruptions.

### Example

If you set:

* **Whenever my balance falls below:** \$25
* **Bring my balance back to:** \$50

When your balance of \$26 drops to \$21 after a \$5 charge, auto-pay will add \$29 to reach your \$50 target balance.

<Warning>
  When your balance hits \$0 or goes negative without auto-pay, your API access is restricted until you add funds. You'll receive this error message: `{"error": "Your current account balance is negative. Please top up to continue using the API."}`
</Warning>

Enable auto-pay and maintain a healthy balance to ensure uninterrupted API access. Set your threshold based on your typical monthly usage to avoid frequent small charges.

You can also disable auto-pay at any time from **Workspace** > **Settings** > **Billing** in the [dashboard](https://www.assemblyai.com/dashboard/home), unless your account has an active [single sign-on connection](#auto-pay-and-sso-connections).

### Auto-pay and SSO connections

[Single sign-on](/docs/sso) is a paid add-on, billed monthly for each connection at \$199 per connection. On pay-as-you-go accounts that subscription is charged against your prepaid balance, which means two things.

**Your balance has to cover a connection before you can add one** — at least \$199, one connection's price. If you're short, the dashboard offers to charge your card for the difference and adds the connection once that payment clears. Without a payment method on file, add one first.

**Auto-pay is what keeps it covered after that**, so your settings have to be at least:

* **Whenever my balance falls below:** \$199 for each active connection.
* **Bring my balance back to:** \$10 above your threshold.

Creating or activating a connection raises your auto-pay settings to that minimum if they're below it. It never lowers settings you've already chosen, and raising them isn't itself a charge — auto-pay charges your card on its own schedule.

While a connection is active, auto-pay can't be switched off and your threshold can't drop below the price of your active connections. If the invoice covering a connection isn't paid, the connection is removed. Deleting the connection releases the requirement, so you're free to lower auto-pay again afterwards.

<Note>
  End-of-month invoiced accounts are billed in arrears and don't use auto-pay, so these requirements don't apply.
</Note>
