# Changelog

## 2026-10-29: Forwarding, recording and number billing

Tags: billing, voice

- **Forwarded calls** are billed per leg: the inbound leg at the number's inbound rate, the outbound leg at the
  destination's rate.
- **Forwards between Contactivity numbers** stay on our network, billed at the `programmable_voice_sip` rate. Each
  number in a chain pays its own legs. More than 3 forwards in a row is refused with `482 Loop Detected`, and nothing
  is charged.
- **BYOC numbers** go on to their route's fallback only when you turn it on: `fallback: true` on the number, or
  **Use fallback route** in the portal. It is off by default.
- **Recording** is charged per recorded minute when a recording completes. **Storage** is free for 90 days, then
  charged each month per stored minute.
- **E911** shows as its own line in a number's monthly price.
- **Ledger** amounts show 4 decimals, rounded up; your balance keeps 6.

See [Billing](/guides/billing.md) and [Bring your own carrier](/guides/byoc.md#numbers).

## 2026-10-28: Simpler account tiers

Tags: account

Tier 2 now needs only a card and a first payment. Identity verification moves to tier 3, and proof of address
is no longer a tier step: some countries still ask for it before you buy their numbers.

| Tier | Needs |
|---|---|
| 1 (sandbox) | Verified email. Calls go only to your verified numbers |
| 2 | A card and a first payment |
| 3 | Identity verification |
| 4 | Business verification |

Limits per tier are unchanged. International calling still needs tier 3 and an approved request. Accounts keep
their current tier. `403 kyc_required` on starting a caller ID verification now means a sandbox account
already has 4 verified numbers.

## 2026-10-25: Changelog, llms.txt and Markdown pages

Tags: docs

Every guide is available as Markdown: add `.md` to its URL. Coding agents can read `/llms.txt` for an index and
`/llms-full.txt` for every guide in one file. The changelog has an Atom feed at `/changelog.xml`.

## 2026-10-24: Voice products and per-leg pricing

Tags: billing, breaking

Each call leg is billed as one product: `sip_trunking`, `programmable_voice`, `programmable_voice_sip`,
`byoc_sip_trunking` or `byoc_programmable_voice`. Legs are billed per 60 seconds, rounded up, unless your
agreement says otherwise.

- Calls, carrier legs and CDRs have a `product` field. `GET /cdrs` filters by `product`.
- `GET /pricing` lists prices per product under `products`.
- `GET /pricing/check` takes `product` (default `sip_trunking`).
- Usage lines are `<product>_inbound` and `<product>_outbound`, replacing `voice_inbound` and `voice_outbound`.

See [Products](/guides/billing.md#products) and [Pricing](/guides/voice-apps.md#pricing).

## 2026-10-24: Caller IDs are now verified numbers

Tags: numbers, breaking

Verified caller IDs are renamed to verified numbers across the API:

| Before | Now |
|---|---|
| `/caller-ids` | `/verified-numbers` |
| `/caller-ids/{caller_id}` | `/verified-numbers/{verified_number}` |
| `/caller-ids/verifications` | `/verified-numbers/verifications` |
| `caller_ids:read`, `caller_ids:write` | `verified_numbers:read`, `verified_numbers:write` |
| `403 caller_id_blocked` | `403 verified_number_blocked` |
| `409 caller_id_exists` | `409 verified_number_exists` |

Existing keys keep their access under the new scope names. See [Verified numbers](/guides/numbers.md#verified-numbers).

## 2026-10-24: Ring strategies for registered devices

Tags: sip

`register` trunks take a `ring_strategy` (`ring_all`, `sequential`, `round_robin`, `longest_idle`, `random`) and
`ring_secs`. Set the ring order of credentials with `PUT /trunks/{trunk_id}/credentials/order` or each
credential's `position`. See [Ring strategy](/guides/trunks-routes.md#ring-strategy).

## 2026-10-24: Call quality per leg shows its source

Tags: voice

Each leg in a call's `quality` has a `source`: `engine` when the voice engine measured the leg, `relay` when the
call was relayed without the voice engine, such as most SIP trunk calls. MOS, jitter, packet loss and round-trip
time read the same either way. See [Calls](/guides/calls.md).

## 2026-10-24: Bring your own carrier

Tags: voice, byoc

Connect your own carrier to send and receive calls through Contactivity: `/byoc/carriers` with gateways, source
IPs, numbers and 911 routing. BYOC calls work from SIP trunks and voice apps and are billed a platform fee per
minute, with no phone network rate.

Creating or changing carriers and numbers needs account tier 2 (`403 tier_required`). New scopes: `byoc:read`,
`byoc:write`. See [Bring your own carrier](/guides/byoc.md).

## 2026-10-24: Account tiers and limits

Tags: account

Accounts move up four tiers as they complete verification steps:

| Tier | Needs |
|---|---|
| 1 (sandbox) | Verified email. Calls go only to your verified numbers |
| 2 | A card, a first payment and identity verification |
| 3 | Proof of address |
| 4 | Business verification |

Each tier raises calls per second, concurrent calls and spend limits. `GET /limits` returns the project's
current limits and today's spend. Calls per second and concurrent calls are account limits: setting `cps_limit`
or `session_limit` on a trunk is refused. See [Limits](/guides/trunks-routes.md#limits).

## 2026-10-22: Native Contactivity API

Tags: api

The native API is live under `https://api.contactivity.io/v1/projects/{project_id}/...`: calls and call actions,
recordings, conferences, queues, numbers, SIP trunks and routes, voice apps, flows, billing, events and webhooks.

- One API key per project, with scopes per resource. See the [Overview](/guides/overview.md#authentication).
- Prices are money objects: `{"amount": "0.0140", "currency": "USD"}`.
- Number search and ordering are part of the native API. See [Numbers](/guides/numbers.md).
- Events and signed webhooks, with a delivery log and error debugger. See [Events and webhooks](/guides/events.md).
- OpenAPI 3.1 spec and SDKs: `@contactivity/sdk` (Node) and `contactivity_sdk` (Python).

## 2026-10-22: Twilio and Telnyx compatible routes move under /compat

Tags: compatibility, breaking

The Twilio and Telnyx compatible URL layouts are served under `/compat/{vendor}`. Set your SDK base URL to:

- Twilio REST: `https://api.contactivity.io/compat/twilio`
- Telnyx Call Control v2 and TeXML: `https://api.contactivity.io/compat/telnyx/v2`

The unprefixed layouts (`/2010-04-01/...`, `/v2/...`) are no longer served. See
[Migrating from Twilio or Telnyx](/guides/compat-migration.md).
