# API reference

## One page per resource

Generated from the backend's published OpenAPI document — regenerate with `npm run api:reference`, and `npm run test:contract` fails when it drifts. Each page lists every operation with its door, parameters, request and response fields, declared errors, and a runnable curl example.

| Resource | Operations | What it is for |
| --- | --- | --- |
| [Projects API](/docs/api/projects) | 3 | A project is the isolation boundary: credentials, keys, agents, numbers, sessions and webhooks all belong to exactly one. |
| [API keys](/docs/api/api-keys) | 3 | Project-scoped machine keys. |
| [Provider accounts](/docs/api/provider-accounts) | 13 | Your own AI credentials, encrypted per project. |
| [Agents API](/docs/api/agents) | 12 | An agent is the frozen configuration a call runs against: pipeline, prompt, language, limits and webhook. |
| [Voice sessions](/docs/api/voice-sessions) | 8 | One session is one call. |
| [Carriers and numbers](/docs/api/carriers) | 22 | Bring your own telephony account. |
| [Webhooks API](/docs/api/webhooks) | 10 | Signed, retried event delivery per project. |
| [Billing API](/docs/api/billing) | 7 | A prepaid USD wallet per account. |

## Every operation

### [Projects API](/docs/api/projects)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/v2/projects`](/docs/api/projects#get-v2-projects) | account session | — |
| `POST` | [`/v2/projects`](/docs/api/projects#post-v2-projects) | account session | — |
| `GET` | [`/v2/projects/{project_id}`](/docs/api/projects#get-v2-projects-project-id) | account session | — |

### [API keys](/docs/api/api-keys)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/v2/api-keys`](/docs/api/api-keys#get-v2-api-keys) | account session | — |
| `POST` | [`/v2/api-keys`](/docs/api/api-keys#post-v2-api-keys) | account session | — |
| `DELETE` | [`/v2/api-keys/{key_id}`](/docs/api/api-keys#delete-v2-api-keys-key-id) | account session | — |

### [Provider accounts](/docs/api/provider-accounts)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/v2/provider-accounts`](/docs/api/provider-accounts#get-v2-provider-accounts) | project key | `provider_account:read` |
| `POST` | [`/v2/provider-accounts`](/docs/api/provider-accounts#post-v2-provider-accounts) | project key | `provider_account:write` |
| `DELETE` | [`/v2/provider-accounts/{account_id}`](/docs/api/provider-accounts#delete-v2-provider-accounts-account-id) | project key | `provider_account:write` |
| `GET` | [`/v2/provider-accounts/{account_id}`](/docs/api/provider-accounts#get-v2-provider-accounts-account-id) | project key | `provider_account:read` |
| `POST` | [`/v2/provider-accounts/{account_id}/probe`](/docs/api/provider-accounts#post-v2-provider-accounts-account-id-probe) | project key | `provider_account:write` |
| `POST` | [`/v2/provider-accounts/{account_id}/rotate`](/docs/api/provider-accounts#post-v2-provider-accounts-account-id-rotate) | project key | `provider_account:write` |
| `GET` | [`/console/v2/projects/{project_id}/provider-accounts`](/docs/api/provider-accounts#get-console-v2-projects-project-id-provider-accounts) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/provider-accounts`](/docs/api/provider-accounts#post-console-v2-projects-project-id-provider-accounts) | account session | — |
| `DELETE` | [`/console/v2/projects/{project_id}/provider-accounts/{account_id}`](/docs/api/provider-accounts#delete-console-v2-projects-project-id-provider-accounts-account-id) | account session | — |
| `GET` | [`/console/v2/projects/{project_id}/provider-accounts/{account_id}`](/docs/api/provider-accounts#get-console-v2-projects-project-id-provider-accounts-account-id) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/provider-accounts/{account_id}/probe`](/docs/api/provider-accounts#post-console-v2-projects-project-id-provider-accounts-account-id-probe) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/provider-accounts/{account_id}/rotate`](/docs/api/provider-accounts#post-console-v2-projects-project-id-provider-accounts-account-id-rotate) | account session | — |
| `GET` | [`/v2/provider-catalog`](/docs/api/provider-accounts#get-v2-provider-catalog) | account session | — |

### [Agents API](/docs/api/agents)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/v2/agents`](/docs/api/agents#get-v2-agents) | project key | `voice:read` |
| `POST` | [`/v2/agents`](/docs/api/agents#post-v2-agents) | project key | `voice:write` |
| `DELETE` | [`/v2/agents/{agent_id}`](/docs/api/agents#delete-v2-agents-agent-id) | project key | `voice:write` |
| `GET` | [`/v2/agents/{agent_id}`](/docs/api/agents#get-v2-agents-agent-id) | project key | `voice:read` |
| `PATCH` | [`/v2/agents/{agent_id}`](/docs/api/agents#patch-v2-agents-agent-id) | project key | `voice:write` |
| `POST` | [`/v2/agents/{agent_id}/rotate-secret`](/docs/api/agents#post-v2-agents-agent-id-rotate-secret) | project key | `voice:write` |
| `GET` | [`/console/v2/projects/{project_id}/agents`](/docs/api/agents#get-console-v2-projects-project-id-agents) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/agents`](/docs/api/agents#post-console-v2-projects-project-id-agents) | account session | — |
| `DELETE` | [`/console/v2/projects/{project_id}/agents/{agent_id}`](/docs/api/agents#delete-console-v2-projects-project-id-agents-agent-id) | account session | — |
| `GET` | [`/console/v2/projects/{project_id}/agents/{agent_id}`](/docs/api/agents#get-console-v2-projects-project-id-agents-agent-id) | account session | — |
| `PATCH` | [`/console/v2/projects/{project_id}/agents/{agent_id}`](/docs/api/agents#patch-console-v2-projects-project-id-agents-agent-id) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/agents/{agent_id}/rotate-secret`](/docs/api/agents#post-console-v2-projects-project-id-agents-agent-id-rotate-secret) | account session | — |

### [Voice sessions](/docs/api/voice-sessions)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/v2/voice/sessions`](/docs/api/voice-sessions#get-v2-voice-sessions) | project key | `voice:read` |
| `POST` | [`/v2/voice/sessions`](/docs/api/voice-sessions#post-v2-voice-sessions) | project key | `voice:write` |
| `GET` | [`/v2/voice/sessions/{session_id}`](/docs/api/voice-sessions#get-v2-voice-sessions-session-id) | project key | `voice:read` |
| `POST` | [`/v2/voice/sessions/outbound`](/docs/api/voice-sessions#post-v2-voice-sessions-outbound) | project key | `voice:write` |
| `GET` | [`/console/v2/projects/{project_id}/voice/sessions`](/docs/api/voice-sessions#get-console-v2-projects-project-id-voice-sessions) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/voice/sessions`](/docs/api/voice-sessions#post-console-v2-projects-project-id-voice-sessions) | account session | — |
| `GET` | [`/console/v2/projects/{project_id}/voice/sessions/{session_id}`](/docs/api/voice-sessions#get-console-v2-projects-project-id-voice-sessions-session-id) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/voice/sessions/outbound`](/docs/api/voice-sessions#post-console-v2-projects-project-id-voice-sessions-outbound) | account session | — |

### [Carriers and numbers](/docs/api/carriers)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/v2/carriers`](/docs/api/carriers#get-v2-carriers) | project key | `carrier:read` |
| `POST` | [`/v2/carriers`](/docs/api/carriers#post-v2-carriers) | project key | `carrier:write` |
| `DELETE` | [`/v2/carriers/{connection_id}`](/docs/api/carriers#delete-v2-carriers-connection-id) | project key | `carrier:write` |
| `GET` | [`/v2/carriers/{connection_id}`](/docs/api/carriers#get-v2-carriers-connection-id) | project key | `carrier:read` |
| `POST` | [`/v2/carriers/{connection_id}/numbers`](/docs/api/carriers#post-v2-carriers-connection-id-numbers) | project key | `carrier:write` |
| `POST` | [`/v2/carriers/{connection_id}/numbers/import`](/docs/api/carriers#post-v2-carriers-connection-id-numbers-import) | project key | `carrier:write` |
| `POST` | [`/v2/carriers/{connection_id}/verify`](/docs/api/carriers#post-v2-carriers-connection-id-verify) | project key | `carrier:write` |
| `GET` | [`/v2/carriers/catalog`](/docs/api/carriers#get-v2-carriers-catalog) | project key | `carrier:read` |
| `GET` | [`/v2/carriers/numbers`](/docs/api/carriers#get-v2-carriers-numbers) | project key | `carrier:read` |
| `DELETE` | [`/v2/carriers/numbers/{number_id}`](/docs/api/carriers#delete-v2-carriers-numbers-number-id) | project key | `carrier:write` |
| `PATCH` | [`/v2/carriers/numbers/{number_id}`](/docs/api/carriers#patch-v2-carriers-numbers-number-id) | project key | `carrier:write` |
| `GET` | [`/console/v2/projects/{project_id}/carriers`](/docs/api/carriers#get-console-v2-projects-project-id-carriers) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/carriers`](/docs/api/carriers#post-console-v2-projects-project-id-carriers) | account session | — |
| `DELETE` | [`/console/v2/projects/{project_id}/carriers/{connection_id}`](/docs/api/carriers#delete-console-v2-projects-project-id-carriers-connection-id) | account session | — |
| `GET` | [`/console/v2/projects/{project_id}/carriers/{connection_id}`](/docs/api/carriers#get-console-v2-projects-project-id-carriers-connection-id) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/carriers/{connection_id}/numbers`](/docs/api/carriers#post-console-v2-projects-project-id-carriers-connection-id-numbers) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/carriers/{connection_id}/numbers/import`](/docs/api/carriers#post-console-v2-projects-project-id-carriers-connection-id-numbers-import) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/carriers/{connection_id}/verify`](/docs/api/carriers#post-console-v2-projects-project-id-carriers-connection-id-verify) | account session | — |
| `GET` | [`/console/v2/projects/{project_id}/carriers/catalog`](/docs/api/carriers#get-console-v2-projects-project-id-carriers-catalog) | account session | — |
| `GET` | [`/console/v2/projects/{project_id}/carriers/numbers`](/docs/api/carriers#get-console-v2-projects-project-id-carriers-numbers) | account session | — |
| `DELETE` | [`/console/v2/projects/{project_id}/carriers/numbers/{number_id}`](/docs/api/carriers#delete-console-v2-projects-project-id-carriers-numbers-number-id) | account session | — |
| `PATCH` | [`/console/v2/projects/{project_id}/carriers/numbers/{number_id}`](/docs/api/carriers#patch-console-v2-projects-project-id-carriers-numbers-number-id) | account session | — |

### [Webhooks API](/docs/api/webhooks)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/v2/projects/{project_id}/webhooks`](/docs/api/webhooks#get-v2-projects-project-id-webhooks) | project key | `webhook:read` |
| `POST` | [`/v2/projects/{project_id}/webhooks`](/docs/api/webhooks#post-v2-projects-project-id-webhooks) | project key | `webhook:write` |
| `DELETE` | [`/v2/projects/{project_id}/webhooks/{endpoint_id}`](/docs/api/webhooks#delete-v2-projects-project-id-webhooks-endpoint-id) | project key | `webhook:write` |
| `POST` | [`/v2/projects/{project_id}/webhooks/{endpoint_id}/test`](/docs/api/webhooks#post-v2-projects-project-id-webhooks-endpoint-id-test) | project key | `webhook:write` |
| `GET` | [`/v2/projects/{project_id}/webhooks/dead-letters`](/docs/api/webhooks#get-v2-projects-project-id-webhooks-dead-letters) | project key | `webhook:read` |
| `GET` | [`/console/v2/projects/{project_id}/webhooks`](/docs/api/webhooks#get-console-v2-projects-project-id-webhooks) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/webhooks`](/docs/api/webhooks#post-console-v2-projects-project-id-webhooks) | account session | — |
| `DELETE` | [`/console/v2/projects/{project_id}/webhooks/{endpoint_id}`](/docs/api/webhooks#delete-console-v2-projects-project-id-webhooks-endpoint-id) | account session | — |
| `POST` | [`/console/v2/projects/{project_id}/webhooks/{endpoint_id}/test`](/docs/api/webhooks#post-console-v2-projects-project-id-webhooks-endpoint-id-test) | account session | — |
| `GET` | [`/console/v2/projects/{project_id}/webhooks/dead-letters`](/docs/api/webhooks#get-console-v2-projects-project-id-webhooks-dead-letters) | account session | — |

### [Billing API](/docs/api/billing)

| Method | Path | Door | Scope |
| --- | --- | --- | --- |
| `GET` | [`/console/v2/billing/invoices`](/docs/api/billing#get-console-v2-billing-invoices) | account session | — |
| `GET` | [`/console/v2/billing/invoices/{invoice_id}.pdf`](/docs/api/billing#get-console-v2-billing-invoices-invoice-id-pdf) | account session | — |
| `GET` | [`/console/v2/billing/quote`](/docs/api/billing#get-console-v2-billing-quote) | account session | — |
| `GET` | [`/console/v2/billing/rate`](/docs/api/billing#get-console-v2-billing-rate) | account session | — |
| `GET` | [`/console/v2/billing/summary`](/docs/api/billing#get-console-v2-billing-summary) | account session | — |
| `POST` | [`/console/v2/billing/topup`](/docs/api/billing#post-console-v2-billing-topup) | account session | — |
| `GET` | [`/console/v2/billing/transactions`](/docs/api/billing#get-console-v2-billing-transactions) | account session | — |

## Conventions

- Origin: `https://api.developers.dvaarik.com`.
- Machine door: `X-Api-Key: $DVAARIK_API_KEY`, from a trusted server only.
- Account door: `Authorization: Bearer $DVAARIK_TOKEN`, the console session.
- Money is an integer nano-USD decimal string; parse it with `BigInt`, never `Number`.
- Every error body is `{ "detail": … }`; see the [errors page](/docs/errors).
- There is no SDK yet. The examples are curl, `fetch`, and `requests`.
- To try a call without writing code, use the [playground](/playground) rather than pasting a key into a browser.

---

Source: https://developers.dvaarik.com/docs/api-reference · every page as one file: https://developers.dvaarik.com/docs.md
