data.requestId. It is an opaque
correlation ID that links the response to server logs; include it when contacting
support, but do not use it for application branching. Other safe fields in data,
such as retryAfter, are error-specific and optional. Branch on error.code; do
not parse the human-readable message.
Common errors
Rate-limit responses
HTTP429 covers more than one limit. Use error.code and, when present,
data.reason to choose the correct recovery behavior.
Per-minute administrator-issued key limit
retryAfter seconds or until resetAt before retrying.
Monthly administrator-issued key quota
resetAt, or contact
support to review the quota.
Browser or upstream throttling
Public browser traffic can be limited per IP address, and an upstream provider can also throttle a request. ThoseRATE_LIMITED responses may contain only
data.retryAfter and data.requestId, or only data.requestId. The API-key-only
fields reason, limit, remaining, and resetAt are therefore optional.
First-party client transport failures
The Pirehub web client can also classify failures that happen before an HTTP response exists. These codes are local transport outcomes, not server responses:
The client does not queue authenticated or browser-verification mutations while
offline. Tokens and business state may expire, and an automatic replay could
duplicate a side effect.
Retry strategy
For429, 503, and 504 responses, honor Retry-After when present. Otherwise,
use exponential backoff with jitter and a finite retry limit. A monthly quota failure
is not a transient retry candidate before its reset. Do not automatically retry 400,
401, or 403 responses until you have corrected the request or credentials.
The first-party transport does not display notifications itself. Components decide
whether an error is user-facing, which keeps background polling and prefetch failures
from producing unrelated popups.
Self-service API plans
Subscription-backed API keys also returnAPI_PLAN_REQUIRED or
API_CAPABILITY_DENIED (403), API_CREDITS_EXCEEDED or
USAGE_CONCURRENCY_EXCEEDED (429), and USAGE_RESERVATION_CONFLICT or
USAGE_RESERVATION_EXPIRED (409). Rate limits and concurrency failures do not
consume credits. Every error retains the same envelope and data.requestId.
When admission returns USAGE_CONCURRENCY_EXCEEDED, it retains no new credit
reservation; wait for capacity and retry with the same identifier and payload.
See API plans, credits and idempotency
for the full retry contract and header meanings.