Error codes

Every refusal the API makes is an RFC 9457 problem, sent as application/problem+json. Branch on its code, which never changes; the error sentence is for people and can. Its type is the URL of the code's page below, and its request_id is the one to quote when you contact us.

Some answers come from the platform or our edge itself, before the API sees the request, as plain JSON with an error member and no code, type or X-Request-Id: 503 platform_standby to a write during a failover; at launch, once the origin lock enforces, 403 edge_auth_required to a request that didn't pass through our edge; and 503 service_unavailable, below, to any request during an outage. When there is no code, branch on error.

Our edge's outage answer

During an outage, our edge answers every request itself, whatever its method, before the API sees it. Nothing was processed: send the same request again after the seconds in Retry-After, with the same Idempotency-Key where the operation takes one.

Our edge's outage answer: status and headers
HTTP 503
content-type: application/json
retry-after: 60
cache-control: public, max-age=10
x-robots-tag: noindex, nofollow, noarchive
Our edge's outage answer: body
{
  "error": "service_unavailable",
  "retryAfter": 60,
  "message": "Our upstream provider is experiencing an outage. The site will be back online as soon as service is restored. If urgent, please visit https://secondappraisal.com/ to reveal contact details."
}

If our edge can't reach the API, it answers 502, or 504 when the API hasn't answered in five minutes, with a plain-text body. Retry those with the same Idempotency-Key too.

CodeHTTP statusMeaning
invalid_json400Invalid JSON
unsupported_media_type415Unsupported media type
payload_too_large413Payload too large
too_many_rows413Too many rows
prohibited_field400Prohibited field
validation_failed400Validation failed
operation_not_open404Operation not open yet
idempotency_key_too_long400Idempotency-Key too long
internal_error500Internal error
missing_api_key401Missing API key
invalid_api_key401Invalid API key
api_key_expired401API key expired
key_not_scoped403Key not scoped for this surface
test_key_referrals_unavailable403Test keys can't reach referrals yet
provider_terminated403Account terminated
provider_suspended403Account suspended
provider_not_active403Account not active
rate_limited429Rate limit exceeded
auth_unavailable500Key check unavailable
permission_denied403Permission denied
credentials_unavailable503Credentials unavailable
signed_requests_required401Signed requests required
ip_not_allowed403Address not allowed
auth_failures_throttled429Too many failed authentications
signature_profile_invalid401Signature doesn't follow the profile
signature_expired401Signature outside its window
target_uri_not_allowed401Host not accepted for signed requests
signature_invalid401Signature invalid
environment_mismatch401Wrong environment
credential_not_activated401Credential not activated
signature_replay409Signature replayed
public_key_in_use409Public key in use
edge_auth_required403Edge authentication required
platform_standby503Platform on standby
membership_program_closed404Membership closed to institutions
membership_not_enabled403Membership not enabled
membership_rider_unsigned403Membership rider unsigned
membership_billing_mode_required403Membership billing mode required
membership_billing_method_required403Billing method required
msa_required403Agreement not executed
billing_required403Billing method required
email_required_sms_disabled422Borrower email required
script_version_stale409Disclosure script out of date
duplicate_reference409Duplicate referral
invalid_cursor400Invalid cursor
not_found404Not found
referral_locked409Referral locked
cancel_not_allowed409Cancel not allowed
economics_locked409Program terms locked
nothing_to_update400Nothing to update
idempotency_key_mode_conflict409Idempotency-Key used in the other mode
state_not_served422State not served
duplicate_referral409Loss already referred
simulate_requires_test_key403Test key required
invalid_transition409Invalid transition
reporting_withdrawn409Reporting withdrawn
vin_already_live409VIN already enrolled
vin_already_consulted422VIN already consulted
state_required422Garaged state required
state_blocked422State not served
vin_invalid422Invalid VIN
invalid_customer_price422Invalid member price
idempotency_key_reused422Idempotency-Key reused
plan_not_enabled403Membership not enabled
not_live409Enrollment not live
not_a_member_vehicle404Not a member vehicle
request_refused400Request refused