▲HIGHLAND DOCS

Errors

Every error is JSON with a stable error code and sometimes a hint or extra fields:

json
{ "error": "insufficient_credits", "priceCents": 2 }

Match on error, not on the HTTP status text. Calls that fail are never charged.

Auth and accounts

StatuserrorWhat to do
401api_key_requiredSend Authorization: Bearer <key>, or pay with x402
401invalid_api_keyThe key is wrong or revoked. Create a new one
401invalid_credentialsWrong email or password
401session_expiredLog in again
403bad_originBrowser request from a site that is not allowed
409email_takenThat email already has an account; log in instead
409too_many_keys20 active keys max; revoke one first
400invalid_email / invalid_passwordPassword needs 12+ characters

Calling APIs

StatuserrorWhat to do
400invalid_inputThe body does not match the API's schema. The response lists each issue
400invalid_jsonThe body is not a JSON object
400invalid_idempotency_key8 to 64 characters: letters, digits, _, -
402insufficient_creditsAdd credits. priceCents says what the call costs
402payment_requiredx402: pay the accepts requirements and retry with X-PAYMENT
402payment_invalidx402: see reason (for example wrong_network, invalid_exact_evm_signature)
402settlement_failedx402: the payment did not settle; retryable: true. No result was returned
404unknown_apiCheck the id in the catalog
413body_too_largeMax 64 KB
429rate_limitedSlow down; retry after a short wait
502upstream_error and similarThe data source failed. Not charged; retry later
503not_configuredThat API's provider is not set up right now. Not charged
503facilitator_unavailablex402 payment service down; retry. Not charged

Top-ups and plans

StatuserrorWhat to do
400invalid_usd1 to 1000, at most 2 decimals
400invalid_planUse solo or builder (see GET /v1/plans)
400invalid_tx_hash0x + 64 hex characters
404tx_not_foundNot mined yet, or sent on the wrong network. Retry in a minute
404intent_not_foundCreate an intent first and send its exact amount
409pending_confirmationsSeen on-chain; waiting for 3 confirmations. Retry shortly
409intent_already_claimed / tx_already_usedThat payment was already credited
422no_matching_transferThe transaction does not send USDC to payTo
422outside_intent_windowPaid before the quote or after it expired (24 h). Contact us
422tx_failedThe transaction reverted on-chain
429too_many_open_intents10 open quotes max; pay or let some expire
503topup_disabledTop-ups are paused

Coupons

StatuserrorMeaning
400invalid_codeCodes are 4 to 32 letters, digits or dashes
404coupon_not_foundNo such code
409already_redeemedEach account can use a code once
410coupon_expired / coupon_used_up / coupon_disabledThe code no longer works
403new_accounts_onlyThis code is for accounts created after it