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

# Rate Card

> GET /v1/pricing: every price Lokutor charges, as JSON. Public, no key.

## `GET /v1/pricing` — Rate Card

Returns the rate card: the price of every line on a Lokutor bill, and the rules of the prepaid balance. It is the one copy of the prices: the dashboard, [lokutor.com/pricing](https://lokutor.com/pricing) and [Pricing and billing](/pricing) all read from it. Public, no API key, CORS open, so a browser page can read it directly.

All prices are in US dollars, before tax. How each one is applied (per second, per token, per started minute) is explained in [Pricing and billing](/pricing).

### Response

`Content-Type: application/json`, `Cache-Control: public, max-age=300`.

```json theme={null}
{
  "version": "2026-10-09.1",
  "currency": "USD",
  "notes": "Prices before tax. …",
  "agent": {
    "platform_per_minute": 0.042,
    "billing": "per_second"
  },
  "llm": {
    "input_per_million_tokens": 0.44,
    "output_per_million_tokens": 0.94,
    "speculative_replies_default": true
  },
  "phone": {
    "billing": "per_started_minute",
    "inbound": { "ES": 0.035, "PT": 0.025, "FR": 0.028, "IT": 0.035, "DE": 0.028, "AT": 0.028, "CH": 0.028,
                 "BE": 0.035, "NL": 0.035, "LU": 0.025, "GB": 0.025, "IE": 0.025, "US": 0.019, "CA": 0.021 },
    "outbound_fixed": { "ES": 0.049, "PT": 0.066, "FR": 0.025, "IT": 0.047, "DE": 0.028, "AT": 0.027, "CH": 0.098,
                        "BE": 0.084, "NL": 0.042, "LU": 0.084, "GB": 0.022, "IE": 0.041, "US": 0.025, "CA": 0.025 },
    "outbound_mobile": { "ES": 0.105, "FR": 0.084, "DE": 0.093, "AT": 0.087, "GB": 0.077, "IE": 0.077 },
    "number_per_month": 5.0
  },
  "crm_logged_call": 0.04,
  "web_search": 0.15,
  "tts_per_million_chars": 4.1,
  "stt_per_minute": 0.0014,
  "denoise_per_minute": 0.0014,
  "wallet": {
    "min_topup": 10,
    "max_topup": 2000,
    "signup_bonus": 5,
    "signup_bonus_days": 90,
    "overdraft": 2,
    "min_session_start": 0.25,
    "concurrency_default": 10,
    "concurrency_before_topup": 3,
    "auto_recharge": { "threshold": 5, "amount": 20, "monthly_cap": 500 }
  }
}
```

### Fields

| Field | Type | Description |
| :- | :- | :- |
| `version` | `string` | The card's version. A session is charged entirely at the version in force when it started, and your usage records which version it was charged at. |
| `currency` | `string` | Always `"USD"`. |
| `agent.platform_per_minute` | `number` | A voice-agent session, per minute, billed per second (`agent.billing`). |
| `llm.input_per_million_tokens` | `number` | Language-model input tokens, per million. |
| `llm.output_per_million_tokens` | `number` | Language-model output tokens, per million. |
| `llm.speculative_replies_default` | `boolean` | Whether an agent starts replies during the caller's pause unless its config says otherwise (`speculative_llm`). See [Speculative replies](/pricing#speculative-replies). |
| `phone.billing` | `string` | `"per_started_minute"`: a phone line is billed by the started minute, on top of the agent. |
| `phone.inbound` | `object` | Per minute of a call your agent receives, by the ISO country code of your number. |
| `phone.outbound_fixed` | `object` | Per minute of a call your agent makes to a landline, by destination country. |
| `phone.outbound_mobile` | `object` | Per minute of a call your agent makes to a mobile, by destination country. A country missing here cannot have its mobiles called, except the US and Canada, whose mobiles are charged the landline rate. |
| `phone.number_per_month` | `number` | A phone number, per month, from the balance. |
| `crm_logged_call` | `number` | Per call that reaches your CRM (the caller looked up or identified, or the call logged). |
| `web_search` | `number` | Per web search that returns an answer. |
| `tts_per_million_chars` | `number` | Text-to-speech API, per million characters synthesized. |
| `stt_per_minute` | `number` | Speech-to-text API, per minute of audio, billed per second. |
| `denoise_per_minute` | `number` | Noise removal (`/denoise`), per minute of audio, billed per second. |
| `wallet.min_topup`, `wallet.max_topup` | `number` | The smallest and largest top-up in one payment. |
| `wallet.signup_bonus`, `wallet.signup_bonus_days` | `number` | The welcome credit and how many days it lasts. |
| `wallet.overdraft` | `number` | How far below zero calls in progress may take the balance before the agent says goodbye. |
| `wallet.min_session_start` | `number` | The balance needed to start a session or request. |
| `wallet.concurrency_default` | `number` | Sessions an account may hold at once after its first top-up. |
| `wallet.concurrency_before_topup` | `number` | Sessions an account may hold at once before its first top-up. |
| `wallet.auto_recharge` | `object` | Default auto-recharge settings: recharge `amount` when the balance falls below `threshold`, up to `monthly_cap` a month. |

New fields may be added; ignore the ones you don't use.

### Example: price a call

```typescript theme={null}
const card = await (await fetch('https://api.lokutor.com/v1/pricing')).json();

// A 3-minute call received on a Spanish number, with 62,100 input and 3,900 output tokens.
const seconds = 180;
const platform = (seconds / 60) * card.agent.platform_per_minute;
const tokens = (62_100 * card.llm.input_per_million_tokens + 3_900 * card.llm.output_per_million_tokens) / 1e6;
const line = Math.ceil(seconds / 60) * card.phone.inbound.ES; // per started minute
console.log((platform + tokens + line).toFixed(3)); // "0.262"
```

### cURL

```bash theme={null}
curl -s https://api.lokutor.com/v1/pricing | jq .
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.