Skip to main content
Noorle has three request surfaces, and they do not share an error format. The management API returns a JSON error body with an HTTP status. The MCP and A2A gateways speak JSON-RPC 2.0 and carry failures in the response envelope.

Management API errors

Errors from api.noorle.com serialize as a flat object — there is no nested error wrapper.
Validation errors carry details instead of message, keyed by field name.
404 responses have no body. When the category is NotFound, the API returns the bare status with no JSON payload. Do not parse the body of a 404.

Category to status code

Every management API status comes from one of these eleven categories. Successful responses return 200 OK. The only endpoint that returns 204 No Content is the internal billing cache-invalidation callback. Nothing on the public management surface returns 201 Created. 413 Payload Too Large is returned by the plugin upload endpoint when the request body exceeds its limit — see Upload Plugin.

What each category means for you

The management API returns 403 for credential problems as well as permission problems: a missing Authorization header, a malformed token, an expired token, a revoked API key, and an insufficiently privileged caller all produce category: "Authorization".A 403 therefore does not tell you whether to re-authenticate or to ask for access. Check the message field, which distinguishes them ("Authorization header is missing" vs. "Account access denied").Across the platform, an authority denial is 403 and a resource that exists outside your account’s tenancy floor is 404 — a denied caller cannot probe for the existence of another account’s resources.
Returned when the resource does not exist, or exists outside your account. The response body is empty; there is nothing to parse.
Field-level validation failed. message is absent; read details, which maps each rejected field to its validation messages.
A dependency is temporarily unavailable. This is deliberately distinct from 500 so clients can retry without treating it as an application bug.

JSON-RPC errors (MCP and A2A)

Both gateway surfaces return JSON-RPC 2.0 errors. The A2A gateway returns HTTP 200 with the error in the envelope — the HTTP status is not the signal.

Standard codes

Noorle server-defined codes

Both sit in the JSON-RPC server-error range (-32000 to -32099). A rate-limit error carries a structured data payload:
-32029 is deliberately not -32600 Invalid request: many clients treat Invalid request as non-retryable, and a rate limit is retryable by contract.

Limits and quotas

Noorle enforces two kinds of limit, and it helps to keep them apart:
  • Request-rate limits on a handful of specific endpoints, listed below.
  • Economic and object-count quotas per account — how many skills you can keep, how many times your triggers may fire in a day, how much attachment storage you consume in a month.
There is no account-wide request-rate quota. Noorle does not meter total requests per account across the platform. The rate limits that exist are per-endpoint and are named individually here; everything else is bounded by the account quotas instead.
No response carries X-RateLimit-Limit, X-RateLimit-Remaining, or X-RateLimit-Reset. Noorle does not emit those headers on any surface. Do not key backoff logic on them. The one rate-limit response header Noorle emits is Retry-After: 60, on the MCP gateway handshake 429.

Request-rate limits

Fixed-window counters — no burst allowance, no token bucket. Two properties worth designing around:
  • tools/call and tools/list share one budget. The 600/minute limit covers the authenticated request path, not each method separately. initialize and ping sit outside it — that is why the handshake has its own limiter.
  • The MCP limiters favor availability. If the counter’s backing store is unreachable, requests are allowed through rather than rejected.
The last two rows are worth reading carefully. The token-endpoint limits belong to each MCP gateway’s own OAuth server — they are keyed on the gateway host and apply at mcp-{handle}.noorle.com/oauth/token. The management API’s device flow at api.noorle.com/oauth/token is not rate limited. The agent (A2A) gateway has no rate limiting.

Account quotas

These are the ceilings that actually bound a busy account. A trigger firing consumes both budgets at once — the agent’s and the account’s — and is rejected if either is exhausted, so one busy agent cannot drain the account’s whole daily allowance on its own. Attachments beyond the per-message cap, or arriving after a monthly ceiling is reached, are not processed; the message itself still goes through. Beyond these, several surfaces enforce their own size and time caps — request body size, plugin archive size, tool execution timeouts. Those are documented with the endpoints that enforce them.

Handling failures

Retry on 429, 500, 502, 503, 504, and JSON-RPC -32029. Do not retry 400, 403, 404, or 422 — the request will fail identically.
For the MCP gateway, inspect the JSON-RPC error code rather than the HTTP status — a rate-limited tools/call arrives as HTTP 200 carrying -32029.

Next steps