Management API errors
Errors fromapi.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
403 Forbidden — credentials and permissions
403 Forbidden — credentials and permissions
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.404 Not Found — no body
404 Not Found — no body
Returned when the resource does not exist, or exists outside your account.
The response body is empty; there is nothing to parse.
422 Unprocessable Entity — validation
422 Unprocessable Entity — validation
Field-level validation failed.
message is absent; read details, which
maps each rejected field to its validation messages.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.
Request-rate limits
Fixed-window counters — no burst allowance, no token bucket.
Two properties worth designing around:
tools/callandtools/listshare one budget. The 600/minute limit covers the authenticated request path, not each method separately.initializeandpingsit 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.
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 on429, 500, 502, 503, 504, and JSON-RPC -32029. Do not retry
400, 403, 404, or 422 — the request will fail identically.
tools/call arrives as HTTP 200 carrying -32029.