Every response has a success boolean. On failure the HTTP status is 4xx/5xx and the body also carries a short machine code and a human message.

Error shape

{
  "success": false,
  "error": "NoInput",
  "message": "Provide at least one token in \"tokens\"."
}

Common codes

HTTPerrorWhen
400UnknownToolThe tool isn't recognised. See GET /api/v1/tools.
400NoInputNo tokens / input were provided.
400BadPaymentMethodpayment_method isn't one of auto/wallet/license/request.
400BadAmount / BadMethodPayment amount out of range, or unknown rail.
401UnauthorizedMissing or invalid API key.
402NotFreepayment_method: "request" but the tool isn't free right now.
402InsufficientFundsWallet balance too low for the run.
403LicenseRequiredpayment_method: "license" without an active license.
403AccountSuspended / AccountLimitedYour account can't run tasks.
404NotFoundUnknown job / payment id.
429RateLimitedToo many requests - slow down.
503MaintenanceThat tool is temporarily under maintenance.
Always check success

Don't rely on the HTTP status alone - branch on success, and surface message to users and error to your logs.