> This page is for Audio Decisions.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://dev.hume.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://dev.hume.ai/_mcp/server.

# Billing

**The Audio Decisions API bills each request by its input tokens: the audio you send, plus the text of your questions and `context`.** Answers are not billed. Each decisions response gives the input tokens it is billed as `received.input_tokens`.

<table>
  <thead>
    <tr>
      <th>
        Request
      </th>

      <th width="30%">
        Billed for
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        [Create decision](/audio-decisions/reference/decisions/create)

         that succeeds
      </td>

      <td>
        Its input tokens
      </td>
    </tr>

    <tr>
      <td>
        Create decision rejected with a 

        [`4xx` status](/audio-decisions/docs/errors)

        , such as 

        `audio_too_short`
      </td>

      <td>
        Not billed
      </td>
    </tr>

    <tr>
      <td>
        [Estimate input tokens](/audio-decisions/reference/decisions/input-tokens)
      </td>

      <td>
        Not billed
      </td>
    </tr>

    <tr>
      <td>
        [List runs](/audio-decisions/reference/runs/list)

         and 

        [Get run](/audio-decisions/reference/runs/get)
      </td>

      <td>
        Not billed
      </td>
    </tr>
  </tbody>
</table>

## What adds input tokens

1. **The length of the audio**, which makes up most of a request's tokens. Every second is counted, including silence. The tokens come from the duration, so the sample rate, the number of channels and the file format do not change them.
2. **Each question**, with its instructions and `criteria`, such as the options of a `choice` question. A question adds far fewer tokens than the audio, so ten questions about a minute of audio cost little more than one.
3. **The `context`**, if you send one.

How you cut the audio matters mostly through overlap. Windows that overlap send the same audio more than once, so windows that overlap by half about double the tokens. Windows that do not overlap cost only a little more than one request for the whole file, since each request repeats its questions and `context`. See [Examples](#examples).

## Estimate before you send

[Estimate input tokens](/audio-decisions/reference/decisions/input-tokens) returns the input tokens a request would be billed, without sending any audio. It takes the same `context` and `questions` as the `request` part of a decisions request, plus `audio_duration_ms`, the duration of the audio in milliseconds.

#### cURL

```bash maxLines={0}
curl https://api.cloud.hume.ai/v0/decisions/file/input_tokens \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "audio_duration_ms": 300000,
    "context": "A support call to an internet provider. The agent answers the call, and the caller reports an outage.",
    "questions": {
      "caller_frustration": {
        "type": "score",
        "instructions": "How frustrated does the caller sound?",
        "criteria": ["Not at all", "2", "3", "4", "Extremely"]
      }
    }
  }'
```

#### Python

```python maxLines={0}
from hume_audio_decisions import DecisionsClient, Question_Score

client = DecisionsClient()

estimate = client.decisions.input_tokens(
    audio_duration_ms=300000,
    context=(
        "A support call to an internet provider. The agent "
        "answers the call, and the caller reports an outage."
    ),
    questions={
        "caller_frustration": Question_Score(
            instructions="How frustrated does the caller sound?",
            criteria=["Not at all", "2", "3", "4", "Extremely"],
        ),
    },
)

print(estimate.estimated_input_tokens)
```

#### TypeScript

```typescript maxLines={0}
import { DecisionsClient } from "@humeai/audio-decisions";

const client = new DecisionsClient();

const estimate = await client.decisions.inputTokens({
  audioDurationMs: 300000,
  context:
    "A support call to an internet provider. The agent " +
    "answers the call, and the caller reports an outage.",
  questions: {
    caller_frustration: {
      type: "score",
      instructions: "How frustrated does the caller sound?",
      criteria: ["Not at all", "2", "3", "4", "Extremely"],
    },
  },
});

console.log(estimate.estimatedInputTokens);
```

#### 200 OK

```json
{
  "estimated_input_tokens": 25336
}
```

1. **`audio_duration_ms` accepts 5,000 to 300,000**, the same 5 seconds to 5 minutes a decisions request accepts. A duration outside that range is rejected with `audio_too_short` or `audio_too_long`.
2. **Estimate a job before you run it.** For many files with the same questions, estimate once for each typical duration and multiply by the number of files, or estimate each file from its duration.
3. **Compare plans for cutting the audio**, such as one request for a whole call against overlapping windows, before you choose one. See [Preparing your audio](/audio-decisions/docs/preparing-your-audio#choose-how-much-time).
4. **The estimate can differ slightly from the billed count**, since it counts the audio from its duration rather than the file.
5. **An estimate counts toward the [rate limit](/audio-decisions/docs/limits#rate-limits)** like any other request.

## Examples

The input tokens below are rounded estimates. They use short questions like those in [Writing questions](/audio-decisions/docs/writing-questions) and a one-sentence `context`. Estimate your own requests for exact numbers.

<table>
  <thead>
    <tr>
      <th width="36%">
        Use
      </th>

      <th>
        Audio sent
      </th>

      <th width="18%">
        Each request
      </th>

      <th width="20%">
        Total
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        **Rate a text-to-speech clip**

         on naturalness, glitches and mispronunciation
      </td>

      <td>
        One 10 s clip
      </td>

      <td>
        1,000
      </td>

      <td>
        1,000
      </td>
    </tr>

    <tr>
      <td>
        **Review a support call**

         with 6 questions, such as the caller's frustration and the agent's tone
      </td>

      <td>
        One 5 min call
      </td>

      <td>
        26,400
      </td>

      <td>
        26,400
      </td>
    </tr>

    <tr>
      <td>
        **Follow a support call over time**

         with the same 6 questions on each window
      </td>

      <td>
        10 windows of 30 s
      </td>

      <td>
        2,800
      </td>

      <td>
        28,000
      </td>
    </tr>

    <tr>
      <td>
        **Find each laugh in a recording**

         with one 

        `noul`

         question on each window
      </td>

      <td>
        20 overlapping 6 s windows per minute
      </td>

      <td>
        530
      </td>

      <td>
        10,600 per minute
      </td>
    </tr>

    <tr>
      <td>
        **Watch a live call**

         for frustration and two people talking at once
      </td>

      <td>
        12 clips of 5 s per minute
      </td>

      <td>
        530
      </td>

      <td>
        6,400 per minute
      </td>
    </tr>
  </tbody>
</table>

## Checking usage

1. **For one request**, read `received.input_tokens` in its response.
2. **For past requests**, [List runs](/audio-decisions/reference/runs/list) and [Get run](/audio-decisions/reference/runs/get) return each run's billed input tokens as `received.input_tokens`. See [Runs](/audio-decisions/docs/runs).
3. **For your organization**, the [Billing](https://cloud.hume.ai/billing) page of the Hume Platform shows usage and spend. Viewing it needs billing access to the organization.

<table>
  <thead>
    <tr>
      <th width="25%">
        Hume Platform page
      </th>

      <th>
        What it shows
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        [Usage](https://cloud.hume.ai/billing/usage)
      </td>

      <td>
        Usage for each product by day
      </td>
    </tr>

    <tr>
      <td>
        [Invoices](https://cloud.hume.ai/billing/invoices)
      </td>

      <td>
        Past invoices and the credits applied to them
      </td>
    </tr>

    <tr>
      <td>
        [Plan](https://cloud.hume.ai/billing/plan)
      </td>

      <td>
        Your plan and the plans available
      </td>
    </tr>

    <tr>
      <td>
        [Payment](https://cloud.hume.ai/billing/payment)
      </td>

      <td>
        The payment method
      </td>
    </tr>
  </tbody>
</table>

> **Warning**
>
> **A decisions request from an organization that has no payment method on file, or has an unpaid invoice, is rejected with `402 payment_required`.** An admin can update the payment method on the [Payment](https://cloud.hume.ai/billing/payment) page.

## Pricing

For plans and prices, see the [Plan](https://cloud.hume.ai/billing/plan) page of the Hume Platform. To discuss volume or a custom plan, [contact sales](https://www.hume.ai/contact-form).

## Next steps

#### [Limits](/audio-decisions/docs/limits)

Check the limits on audio, questions and request rate.