> ## Documentation Index
> Fetch the complete documentation index at: https://docs.leposta.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors

> Every error a LePosta tool can return, what it means, and what the agent should do instead.

Tool errors come back as a normal tool result with `isError: true` and a single text message. Messages are written for the model: each one says what to change. LePosta never returns stack traces or internal details.

```json theme={null}
{ "isError": true, "content": [{ "type": "text", "text": "Posta 01M5F4D1NEATEFTXG8ZVFN8KKY not found." }] }
```

## Input

| Message | Cause |
| - | - |
| `Invalid input. title must be at most 80 characters; shorten it.` | A field is over its [limit](/resources/limits.md). Each field has its own message. |
| `Invalid input. <field> has the wrong type (expected string).` | Wrong JSON type for a field. |
| `Input validation error: Invalid arguments for tool <name>: ...` | A required argument is missing or an enum value is unknown. This one comes from the MCP SDK, before LePosta's own checks. |
| `surface.at must be an ISO 8601 date with a UTC offset in the user's local time, for example 2026-10-21T09:00:00-03:00.` | A date without an offset or not in ISO 8601. `snooze_until` gives the same message. |
| `surface.at must be in the future.` / `must be at most 180 days from now.` | Scheduled or snooze date out of range. |
| `surface.at is required when surface.mode is "at".` | `mode: "at"` without a date. |
| `surface.at is only used when surface.mode is "at".` | A date with another mode. |
| `surface.mode "project_open" requires project.` | `project_open` without `project`. |
| `Provide status, snooze_until, or both.` | `update_status` with neither. |
| `<field> looks like it contains a GitHub token. Remove it and try again: postas must never include passwords, API keys, tokens or customer data.` | [Secret detection](/concepts/trust-and-safety.md#secrets-are-rejected). Nothing is saved. |

## Access and visibility

| Message | Cause |
| - | - |
| `Posta <id> not found.` | The posta doesn't exist **or** belongs to someone else. Both answer the same. |
| `You can only set the status of postas addressed to you.` | Changing the status of a handoff you sent, or `reply` with `status` on a posta not addressed to you. |
| `This GitHub account no longer has access to LePosta. Tell the user to ask whoever invited them.` | The account was removed from the allowlist. |

## Handoffs and replies

| Message | Cause |
| - | - |
| `You can't send a handoff to yourself: use create_note for notes to yourself.` | `to` is your own username. |
| `@x is not in your LePosta group. Use whoami to see who you can send handoffs to.` | The recipient isn't on the allowlist. |
| `@x has not signed in to LePosta yet; ask them to connect once.` | The recipient is invited but never signed in. |
| `You can't reply to your own note. Use update_status to change it, or create_note for a new note.` | `reply` on a note. |
| `This thread reached its limit of 3 replies. If you need to continue, send a new handoff with send_handoff.` | Thread depth limit. |

## Limits

| Message | Cause |
| - | - |
| `You have created 60 postas in the last hour, the hourly limit. Wait a while before creating more.` | Hourly creation limit. |
| `Your inbox has 100 pending postas, the limit. Mark some as done or dismissed with update_status before saving more.` | Your inbox is full (notes). |
| `@x's inbox is full (100 pending postas). Ask them to clear some first.` | The recipient's inbox is full (handoffs and replies). |

When a write is refused, nothing is saved: no posta, no reply, no status change.

## Server

| Message | Cause |
| - | - |
| `LePosta had an internal error. Try again in a moment; if it keeps failing, tell the user.` | An unexpected failure. Details are only in the server logs. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.