# Errors and limits

> HTTP responses, tool errors, rate limits and how to retry safely.

Kinro reports problems in two places: HTTP status codes from the endpoint, before any tool runs, and tool results with `isError: true`, after a tool has run. In both cases the text says what happened and what to do next.

## HTTP responses

| Status | Meaning                                                                           | What to do                                                               |
| ------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| `200`  | The JSON-RPC message was handled. Check the result for tool errors.               | —                                                                        |
| `400`  | The body is not valid JSON, or it is a JSON-RPC batch. Batches are not supported. | Send one JSON-RPC message per HTTP request.                              |
| `403`  | The request came from a web page in a browser. Browser origins are not supported. | Call the endpoint from your server or MCP client, not from page scripts. |
| `405`  | The method was not `POST`. The server offers no event stream to `GET`.            | Use `POST`.                                                              |
| `413`  | The request body is larger than 30 MB.                                            | Send fewer or smaller inline files per message.                          |
| `429`  | Kinro's MCP endpoint is at capacity.                                              | Wait for the number of seconds in the `Retry-After` header, then retry.  |
| `503`  | Kinro's MCP endpoint is temporarily unavailable. No tool ran.                     | Retry after a short wait.                                                |

A `429` or `503` means the request was not processed, so retrying it is safe. Capacity is shared by all callers and measured over rolling windows; access reopens on its own.

## Tool errors

| Situation          | What the result says                                                                             | What to do                                                                                         |
| ------------------ | ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| No conversation    | There is no conversation with Kinro yet.                                                         | Call `ask_kinro` with the user's message and no `conversation_id`, then reuse the ID it returns.   |
| Still answering    | Leo is still answering the previous message.                                                     | Call `ask_kinro` without a message to get the reply before sending another message.                |
| Completion unknown | Leo's response could not be retrieved, and Kinro cannot confirm whether the message was handled. | Do not resend automatically. Check with `ask_kinro` without a message, then ask the user.          |
| Document refused   | Why a file was refused: type, size, encoding, source, or a daily limit. Nothing was sent.        | Tell the user. Resend without the file if they want to continue. See [Documents](/docs/documents). |
| Paused             | Kinro's connection for this app is paused, and the message was not sent.                         | Tell the user to try again later or contact Kinro at kinro.com.                                    |
| Check failed       | New messages could not be retrieved.                                                             | Check again shortly.                                                                               |

## Retrying safely

- `ask_kinro` with a message sends it each time it is called. Never retry it automatically, except after an HTTP `429` or `503`, which means nothing was sent.
- `ask_kinro` without a message sends nothing, but it delivers new messages once. Keep checks sequential and save their results; a lost response may not be recovered by checking again. See [Conversations](/docs/conversations#messages).
- When Kinro says it is still working on your message, the message was received. Check with `ask_kinro` without a message; do not resend.

---

Source: https://kinro.com/docs/errors. All Kinro docs: https://kinro.com/docs/llms.txt
