{"schema_version":"1.0","description":"Machine-readable error catalog for the Brale Network API. All error responses use the ApiError schema with a structured code and human-readable message.","error_format":{"content_type":"application/json","schema":{"type":"object","required":["error","status"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"status":{"type":"integer"}}},"example":{"error":{"code":"NOT_FOUND","message":"Value type 'xyz' not found"},"status":404}},"error_codes":[{"code":"NOT_FOUND","http_status":404,"description":"The requested resource does not exist.","recoverable":true,"recovery_hint":"Verify the resource ID or slug. Use the list endpoint to discover valid identifiers.","example":{"error":{"code":"NOT_FOUND","message":"Value type 'xyz' not found"},"status":404}},{"code":"VALIDATION_ERROR","http_status":400,"description":"The request parameters failed validation.","recoverable":true,"recovery_hint":"Check required parameters and their types against the OpenAPI spec at /api/openapi.json.","example":{"error":{"code":"VALIDATION_ERROR","message":"Parameter 'id' is required"},"status":400}},{"code":"RATE_LIMITED","http_status":429,"description":"Too many requests. The API allows 120 requests per 60-second window per IP.","recoverable":true,"recovery_hint":"Wait for the number of seconds indicated in the Retry-After header before retrying. Check X-RateLimit-Remaining to monitor quota.","headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset","Retry-After"],"example":{"error":{"code":"RATE_LIMITED","message":"Rate limit exceeded. Try again shortly."},"status":429}},{"code":"INDEXING","http_status":202,"description":"The requested transaction or wallet is not yet indexed. On-demand indexing has been triggered from the chain RPC.","recoverable":true,"recovery_hint":"Poll the same URL after retry_after seconds (typically 30). The response includes a retry_after field.","example":{"status":"indexing","message":"Transaction not yet indexed. Fetching from chain RPC — check back shortly.","retry_after":30,"hash":"0xabc...","transfer_type":"base"}},{"code":"PAYMENT_REQUIRED","http_status":402,"description":"Free quota exhausted (5 req/min per IP). Payment via x402 on Radius is required to continue. Price depends on endpoint: transaction lookup $0.0001, wallet history $0.0003, MCP $0.0005.","recoverable":true,"recovery_hint":"Send an x402 payment proof in the PAYMENT-SIGNATURE header. The PAYMENT-REQUIRED response header contains the machine-readable offer with network (eip155:723487), asset (SBC), amount, and payTo address. Use @radiustech/sdk or any x402-compatible agent wallet. Alternatively, wait for the free quota to reset (1 minute).","headers":["PAYMENT-REQUIRED","X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset"],"example":{"x402":1,"accepts":[{"scheme":"exact","network":"eip155:723487","maxAmountRequired":"100","resource":"/api/tx/base/sbc/0xabc...","payTo":"0x26ECe47A7a7DF6692dD11F42C1B465116a7B068d"}],"price":"$0.0001","description":"Transaction lookup — $0.0001/call after 5 free/min"}},{"code":"INTERNAL_ERROR","http_status":500,"description":"An unexpected server error occurred.","recoverable":true,"recovery_hint":"Retry the request after a brief delay. If the error persists, report it to support@brale.xyz.","example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred"},"status":500}}],"rate_limit_policy":{"description":"Free endpoints have no rate limit. Paid endpoints have a free quota of 5 req/min per IP; beyond that, x402 payment is required (not 429). Global rate limiting may still apply at higher volumes.","free_endpoints":{"limit":"none","scope":"unlimited"},"paid_endpoints":{"free_quota":{"requests":5,"window_seconds":60,"scope":"per-ip"},"beyond_quota":"x402 payment required (402 response)","pricing":{"/tx/*":"$0.0001/call","/wallet/*":"$0.0003/call","/mcp":"$0.0005/call"}},"headers":{"X-RateLimit-Limit":"Free quota for this endpoint (5 on paid endpoints)","X-RateLimit-Remaining":"Free requests remaining in the current window","X-RateLimit-Reset":"Unix epoch seconds when the free quota resets","Retry-After":"Seconds to wait for free quota reset (only on 429)","PAYMENT-REQUIRED":"x402 payment offer (only on 402)"},"retry_strategy":"For 402: send x402 payment proof and retry immediately. For 429: exponential backoff, respect Retry-After. For free quota reset: wait up to 60 seconds."},"mcp_error_codes":[{"code":-32601,"meaning":"Method not found","description":"The JSON-RPC method is not recognized."},{"code":-32602,"meaning":"Invalid params","description":"Missing or invalid tool name or required parameters."},{"code":-32603,"meaning":"Internal error","description":"Tool execution failed unexpectedly. Safe to retry."}],"discovery":{"openapi_spec":"https://brale.network/api/openapi.json","mcp_server":"https://brale.network/api/mcp","capabilities":"https://brale.network/api/capabilities","api_docs":"https://brale.network/api"}}