Appearance
Errors and rate limits
Errors are JSON with a message written for a person. Show it, log it, or hand it to your agent.
json
{ "message": "This key can only send to example.com. Not allowed: ada@elsewhere.com" }Input that doesn't match the schema returns 400 with the problems listed:
json
{
"message": "Validation error",
"errors": [
{ "code": "invalid_string", "validation": "email", "path": ["recipients", 0, "email"], "message": "Invalid email" }
]
}Statuses
| Status | Meaning | What to do |
|---|---|---|
200 201 | Done. | |
202 | Accepted, but the send waits for a person's approval. | Follow the approval. |
400 | The input is invalid, or an unknown field was sent. | Fix the input; errors says where. |
401 | No key, or a key that's unknown, expired or revoked, or whose creator is no longer an owner or admin. The WWW-Authenticate header is Bearer realm="JustDocs", with error="invalid_token" when a key was sent. | Check the header, or make a new key. |
402 | The plan doesn't allow it: no completed requests left this month, more members than sender seats, more signers than the plan allows, a document that must be bought first, or as many saved templates as the plan keeps (This workspace's plan keeps up to 3 saved templates. Delete one you no longer use, or upgrade the plan.). | Read the message. An owner can change the plan, or a person can delete a template in the app. |
403 | The key lacks the permission, or it's an API key and the workspace isn't on Teams & Platform. | Use a key with the permission. |
404 | Not found in the key's workspace, or not visible to the key's creator. A key works only in the workspace it was made in, so a template or document from another workspace is not found: No template with this id in this key's workspace, "Northwind" (or its creator can't see it). A key works only in the workspace it was made in; get_workspace says which. | Check the id, and check the workspace with GET /workspace. See Which workspace a key works in. |
409 | The record's state doesn't allow this, such as sending a request that's already sent. Or an idempotency key conflict. | Fetch the record, or see Idempotency. |
413 | The body is larger than 2 MB, or a template or document is too long to save. | Send less: split a long template into smaller ones. |
422 | The request is valid but can't go ahead. For example, an address outside the key's recipient domains, an address that can't receive email, or a document role without a recipient. | Read the message. |
429 | Too many calls, or a limit on sending: the key's daily sends, the plan's or a recipient's daily requests, or too many approvals waiting. | Slow down, or wait. The message says until when. |
5xx | Something went wrong at JustDocs. | Retry with backoff, with the same idempotency key. |
Rate limits
Two limits apply to every call, each over a minute:
- Per key, shared between the REST API and the MCP server. See Plans and limits.
- Per network address, a ceiling across all keys and calls, far above what one key may make. An IPv6 address counts with the rest of its /56 block. It stops anyone from trying made-up keys without limit. Past it, every call from that address gets
429for the rest of the minute, valid keys included.
Responses carry the standard headers for the key's limit:
| Header | |
|---|---|
RateLimit-Limit | Calls allowed through the key in the window |
RateLimit-Remaining | Calls left |
RateLimit-Reset | Seconds until the window resets |
Past either limit, calls get 429 until the window resets. Back off for RateLimit-Reset seconds. The address ceiling's 429 carries Retry-After instead, in seconds.
The daily send limit is separate. It counts sends through the key over the last 24 hours and returns 429 This key has sent its 20 for the last 24 hours. It doesn't reset at a fixed time. Each send counts for 24 hours.
See Plans and limits for the numbers.