Skip to main content
Using the REST API? Its status codes and error shape are in the API reference. This section is about the MCP server.

How the connector answers

The MCP server (/api/mcp) uses HTTP status codes only for credentials. Everything else — a bad argument, an unknown call, a call Lawtte refuses — comes back as a normal 200 JSON-RPC result marked isError: true, with a plain-language reason your client can show the user. A refused call looks like this:
Two dashboard actions return 429: creating more than 20 connector keys in an hour, and saving or testing a webhook twice within 10 seconds.

Calling limits

Outbound calling is deliberately conservative — your firm’s number is the thing being protected.
The counter resets at UTC midnight. The 51st call is refused before dialing.
A repeat within the window is refused, so a retry loop cannot pester a client.
The recipient’s window is derived from their area code; the firm’s from its receptionist’s office time zone. If the recipient’s zone cannot be determined, the call is refused rather than guessed. A refusal gives the next allowed time.
Numbers on the firm’s DNC list are never dialed, and the check fails closed if the list cannot be read.
High call volume can get a number labeled as spam by carriers, which no calling limit can undo. Spread campaigns out.

Idempotency

place_call takes no idempotency key. A second call to the same number within two hours is refused, so a blind retry won’t dial twice — but it also won’t tell you the first call’s ID. Store the returned call_id, and if a request timed out, check list_calls before retrying.