Skip to content
ScoutingAPI
Docs

Errors & the failed-calls-free rule

A locked error-type catalog mapped 1:1 to HTTP status, a complete machine-stable sub-code list, and one guarantee: failed, empty, blocked and not-found calls are never billed.

Failed / bad-data calls are NEVER billed

The error object

Branch on type (the error class, mapped to HTTP status), then on code (a stable, finer-grained reason). Every response also carries a requestId, retryable flag, and a docUrl that links to the matching page below.

Error types

HTTPtypeWhen it firesRetryable
400invalid_requestMalformed, missing or contradictory input you control.No — fix the request
401authentication_errorMissing / malformed Authorization, unknown or revoked key.No — fix credentials
402insufficient_creditsThe plan / balance lacks the credits this call would cost.No — until topped up
403permission_deniedAuthenticated but not allowed: a missing scope, an unverified email, or a disabled account.No — change plan/scope
404not_foundThe addressed resource does not exist (job, listing, route).No
429rate_limitedThe per-plan token-bucket rate limit was exceeded.Yes — after Retry-After
500internal_errorAn unexpected ScoutingAPI-side fault.Maybe — retry with backoff
503upstream_unavailableEvery upstream actor for the request failed or was blocked.Yes — with backoff
504upstream_timeoutSynchronous upstream work exceeded the request deadline.Yes — with backoff

Sub-code catalog

The complete error.code set. New codes may be added over time (additive) — branch on them for precise handling but tolerate unknown ones. Each links to its own page (the value of error.docUrl).

codetypeTrigger
missing_parameterinvalid_requestA required parameter is absent (e.g. checkOut given checkIn).
invalid_parameterinvalid_requestA parameter is present but malformed (bad type, format or enum value).
invalid_date_rangeinvalid_requestcheckOut / endDate is not strictly after checkIn / startDate.
date_in_pastinvalid_requestA supplied date (checkIn / startDate) is in the past (evaluated in UTC).
child_ages_mismatchinvalid_requestchildAges[] length does not equal children.
stay_too_longinvalid_requestThe booking window exceeds the per-endpoint maximum stay.
window_too_longinvalid_requestThe query date window exceeds the per-endpoint cap (availability > 365 days).
invalid_listing_urlinvalid_requestThe supplied url is not a recognisable listing URL for the platform.
invalid_property_typeinvalid_requestA propertyType[] value is not in the enum.
invalid_amenityinvalid_requestAn amenities[] token is not in the canonical taxonomy.
invalid_price_rangeinvalid_requestpriceMin / priceMax is invalid (negative, or priceMax < priceMin).
invalid_languageinvalid_requestA language filter value is not a valid ISO-639-1 code.
invalid_sortinvalid_requestA sort value is not in the endpoint's allowed enum.
invalid_cursorinvalid_requestThe pagination cursor is malformed or not base64-decodable.
limit_out_of_rangeinvalid_requestlimit is < 1 or > 100.
mutually_exclusive_paramsinvalid_requestConflicting or ambiguous identifiers were supplied (e.g. both listingId and url, or none).
platform_not_enabledinvalid_requestA requested platform is not enabled for the request (fast-follow, or not on the plan).
no_enabled_platforminvalid_requestAfter resolving platforms[], no platform remains to query.
missing_api_keyauthentication_errorNo Authorization header.
invalid_api_keyauthentication_errorThe Authorization header is present but the key is unknown or malformed.
revoked_api_keyauthentication_errorThe key was revoked or soft-deleted.
scope_insufficientpermission_deniedThe key / token lacks a scope required for the operation.
email_unverifiedpermission_deniedThe API key is valid, but the account email has not been verified yet — so LIVE credit (calls made with a scout_live_ key) is locked until you confirm your email (§7.5.1). Your scout_test_ sandbox key is unaffected and keeps returning deterministic fixtures at zero cost.
listing_not_foundnot_foundThe addressed listing / property does not exist upstream.
job_not_foundnot_foundUnknown or expired jobId.
credit_balance_too_lowinsufficient_creditsThe balance is below the call's cost.
rate_limit_exceededrate_limitedThe token bucket is exhausted (per-key for REST, per-user for MCP).
all_actors_failedupstream_unavailableEvery primary + fallback actor for the request failed.
actor_blockedupstream_unavailableUpstream anti-bot / block detected with no usable rows.
actor_timeoutupstream_timeoutSynchronous upstream actor work timed out without producing data.
internal_errorinternal_errorAn unhandled ScoutingAPI-side fault.