Limits
| Limit | Value | What happens |
|---|---|---|
| Public requests | 60 per minute per client address | 429 with a Retry-After header, and a tool message that names the wait |
| Changes through an account | 30 in any 10 minutes | The tool returns an error asking you to wait a few minutes |
| Request body | 256 KB | 413 |
| Page size | 25 items at most per list call | Use the cursor for more |
| Calls to the Eventa API | 8 seconds each | The tool reports that Eventa took too long |
Reads are retried once by the server on a gateway error. Changes are never retried automatically, because a failed response may still have taken effect.
Pagination
List tools return an opaque next_cursor when more results exist. Pass it back unchanged as cursor. Do not build or edit cursors: their content may change.
{ "name": "list_events", "arguments": { "limit": 10, "cursor": "eyJwIjoyfQ" } }
HTTP responses from the endpoint
| Status | When |
|---|---|
200 | The request was handled. A tool failure is still 200, with isError set in the result |
400 | The body is not valid JSON |
401 | A personal tool was called without a token (with sign-in details), or the token is invalid or expired (error="invalid_token") |
403 | The token lacks a permission (error="insufficient_scope", with the scope to request) |
405 | GET or DELETE on the endpoint. The server is stateless and accepts POST only |
413 | The body is over 256 KB |
429 | Too many requests |
503 | Sign-in is briefly unavailable. Retry in a few seconds |
A bad or expired token gets 401 even on a public tool, so a client refreshes instead of failing silently.
Tool errors
When a tool cannot complete, the result has isError: true and one plain sentence for the model. Internal details and stack traces are never included.
| Message begins | Meaning | What to do |
|---|---|---|
| Not found on Eventa | The id, slug or link is wrong, or the item is private | Check it, or use search |
| Eventa is rate-limiting requests | Too many requests | Retry after the time given |
| Eventa is temporarily unavailable | The Eventa API returned a server error | Retry shortly |
| Eventa took too long | The API did not answer within 8 seconds | Retry shortly |
| The Eventa connection has expired or was removed | The user disconnected, or the connection ended | Ask the user to connect again |
| Eventa needs the ... permission | The tool needs a permission the user did not approve | Ask the user to reconnect and allow it |
| This action is not available to connected assistants | The action is deliberately closed | Give the user the link to do it on eventa.live |
| Too many changes from this account | The change limit was reached | Wait a few minutes |
| That confirmation is expired, or the arguments changed | A two-step action was repeated with a different request or too late | Run the preview again and show it to the user |
| Eventa rejected the request: ... | The API refused it with an explanation written for people, such as an event being full | Show the reason to the user |
Retrying safely
- Reads are safe to retry.
- Creating a promo code with a name that already exists on the event is rejected, so a retry cannot create a duplicate.
invite_guestsskips addresses that already have an open invitation.decide_rsvpsaccepts only RSVPs that are still waiting on that event, so repeating a decision that already took effect is refused rather than applied twice.- For other changes, check the current state with the matching read tool (for example
get_my_rsvp) before repeating a request whose outcome you did not see.
Dates, times and money
Every event has its own time zone. Tool results give an ISO 8601 time with offset and a ready-made local description such as "Mon, Oct 26, 2026, 6:00 PM – 9:30 PM (Asia/Dhaka)". Prices include their currency. Do your own conversion only when you need to.
Versioning
The server reports its version in serverInfo.version when you initialize. Tools are added without notice, and existing arguments keep working. Anything that would break a client is announced in the changelog first.