Investorlift DS
  • Getting started
  • The contract
  • Errors
  • API reference
Error reference
Errors

Error reference

Every failure this API can return is listed below. Each error is an RFC 9457 Problem Detail sent as application/problem+json, and the type member of every error body is a stable URI that resolves to its page in this reference — the link in the body you are holding is the documentation for it. A type never changes without a documented deprecation.

The three 503s are different claims — do not treat them alike

Three errors share status 503 and they must not be read as one:

  • ledger-unreachable — the call was never started and no Credits were consumed. This is only ever sent when the failure was provably reached before any Spend could leave.
  • spend-indeterminate — no claim is made about what was consumed, because the outcome is not known. Any Credit recorded for the call is returned to the Account as a Refund.
  • call-not-started — the call was never started and no Credits were consumed — the same claim ledger-unreachable makes, sent when the failure happened before the Ledger was called at all. There is no Spend to return, because none was ever recorded.

A monitor that counts every 503 as "no charge" will misread the one that makes no claim about what was consumed; a monitor that counts every 503 as "charged" will misread the two that state plainly that nothing was. Branch on the type, not the status.

The five 422s are five different things to do

Five errors share status 422, and each asks for a different next action:

  • ambiguous-address — the address matched more than one property. Choose one of the returned candidates, or add a city or ZIP.
  • address-out-of-coverage — the state is not inside current data coverage yet. Coverage is temporary, not a product boundary.
  • unscorable-address — the property cannot be scored. Retrying the same address returns the same answer.
  • idempotency-key-conflict — the Idempotency-Key was already used for a different request. Nothing was charged; send the request again with a new key.
  • property-not-found — no property record could be found for the identifier on the request. The Credit is Refunded. Check the identifier and send the request again.

All five are refusals about the request, never about our availability — and a client branching on status alone cannot tell them apart. Branch on the type.

The two 429s limit different things

Two errors share status 429, and they are not the same limit:

  • rate-limited — a limit on how fast requests arrive. It carries a Retry-After header, because the interval after which the request will be accepted is known.
  • spend-cap-exceeded — a ceiling on how much an Account may consume in a period. It carries no Retry-After, deliberately: a call costing more than the whole Spend Cap never fits, however long you wait, so no single honest interval exists. The body gives you the Spend Cap, the Credits already consumed, the Credits this call requires, and the length of the period in seconds — enough to compute your own backoff.

Slowing down fixes the first and does nothing for the second. A client branching on status alone cannot tell them apart. Branch on the type.

Every error

StatusTypeTitleRetryableCredits
401invalid-keyInvalid API KeyNoNone consumed
402insufficient-creditsInsufficient CreditsNoNone consumed
429rate-limitedRate limit exceededYesNone consumed
400invalid-requestMalformed requestNoNone consumed
413payload-too-largeBatch too largeNoNone consumed
503ledger-unreachableLedger unreachableYesNone consumed
503spend-indeterminateSpend outcome indeterminateYesReturned as a Refund if recorded
504upstream-timeoutUpstream service timed outYesRefunded
502upstream-unavailableUpstream service unavailableYesRefunded
422ambiguous-addressAddress is ambiguousNoRefunded
422address-out-of-coverageAddress outside current data coverageNoRefunded
422unscorable-addressAddress cannot be scoredNoRefunded
422idempotency-key-conflictIdempotency-Key conflictNoNone consumed
409duplicate-request-in-flightDuplicate request in flightYesNone consumed
404unknown-endpointNo such endpointNoNone consumed
503call-not-startedCall never startedYesNone consumed
403terms-not-acceptedTerms of Service not acceptedNoNone consumed
429spend-cap-exceededSpend Cap reachedYesNone consumed
422property-not-foundProperty not foundNoRefunded

The Credits column is a summary; each page states the full outcome. "Refunded" means the response itself says whether the Refund is applied or pending, and a Refund is visible in the Portal's Ledger history like any other entry.

Contact support at [email protected] and quote the Trace ID.

Last modified on September 1, 2026
On this page
  • The three 503s are different claims — do not treat them alike
  • The five 422s are five different things to do
  • The two 429s limit different things
  • Every error