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.50 calls per firm per day
50 calls per firm per day
The counter resets at UTC midnight. The 51st call is refused before dialing.
One call per number every two hours
One call per number every two hours
A repeat within the window is refused, so a retry loop cannot pester a client.
8:00 a.m. to 9:00 p.m. in the recipient's and the firm's time zones
8:00 a.m. to 9:00 p.m. in the recipient's and the firm's time zones
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.
Do Not Call is absolute
Do Not Call is absolute
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.
