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

# July 27, 2026

## Added

### Free-account limits on the account object

`GET /api/v1/account` now returns a `limits` object — `maxCallDurationSeconds` and `maxConcurrentCalls` — for accounts that have never added credit and never subscribed, and `null` for accounts that have paid. Read it instead of hardcoding the values.

```json
{
  "maxCallDurationSeconds": 300,
  "limits": { "maxCallDurationSeconds": 300, "maxConcurrentCalls": 2 }
}
```

The same response now also carries `maxCallDurationSeconds`, the account-wide cap. It was already part of the documented `Account` object but had been omitted from the response.

## Changed

### Asking for more than the free call cap now returns 400

**Breaking for free accounts.** A `maxCallDurationSeconds` sent **explicitly** above the free ceiling (300 seconds) is now rejected with `400` on `POST /api/v1/calls`, `PATCH /api/v1/numbers/{id}`, and `PATCH /api/v1/account`. Previously the value was accepted and silently reduced to 300, so a call requested at 30 minutes ended at 5 with nothing to explain why.

A cap **inherited** from the number or account chain is unaffected — it is still clamped to 300 and the call proceeds. Only a value you send in the request can be rejected.

If you place calls with an explicit duration from a free account, either lower it to 300 or below, or read `limits.maxCallDurationSeconds` from `GET /api/v1/account` and bound your request by it. See [Free accounts](/documentation/reference/errors#free-accounts).

### `PATCH /api/v1/account` returns the account object directly

It now answers with the bare `Account` object — the shape this endpoint has always been documented to return, and the same shape `GET /api/v1/account` returns — instead of wrapping it in an `{ "account": … }` envelope. If you read `response.account`, read the response body itself instead.