proxlane

Outcomes

What every result means, what it returns, and whether to retry.

Every request produces exactly one outcome. There are 19 of them, grouped into 6 classes.

Branch on the class

X-Outcome is open and gains members as adapters land. X-Outcome-Class does not grow. Code written against the class keeps working when the vocabulary expands; code written against the outcome breaks on our schedule, not yours.

ok

Use it. Real content that passed validation.

OutcomeHTTPFailoverBilledMeaning
OKthe target'snoyesReal content, passed validation

blocked

Retry later. Every provider was blocked. Trying again immediately will be blocked again.

OutcomeHTTPFailoverBilledMeaning
SOFT_BLOCK502yesnoour detector fired on the body; a rule ID is attached
HARD_BLOCK502yesnoProvider says blocked or banned

target

Do not retry. The site itself answered. A 404 is still a 404 through another provider.

OutcomeHTTPFailoverBilledMeaning
TARGET_NOT_FOUND404noprovider-dependentGenuine 404, unless the provider has retry_404 semantics
TARGET_ERROR502oncenoTarget site 5xx or DNS dead
TARGET_RATE_LIMITED429yesnoTarget rate-limited us (429); backs off per domain rather than retrying

provider

Already retried. Proxlane failed over for you. Seeing this means the whole chain was exhausted.

OutcomeHTTPFailoverBilledMeaning
PROVIDER_TIMEOUT504yesnoAttempt exceeded its per-attempt budget
PROVIDER_ERROR502yesnoProvider 5xx or infrastructure failure
RATE_LIMITED429yesnoProvider 429 or concurrency cap
AUTH_FAILED502yesnoProvider 401/403 on the key
PROVIDER_DRIFT502yesnoResponse failed its Zod schema
PROVIDER_BODY_OFFLOADED502yesnothe provider stored the body out of band and returned a pointer we cannot follow

client

Fix the request. Retrying an invalid request cannot help.

OutcomeHTTPFailoverBilledMeaning
BAD_REQUEST400nonoThe client's request is malformed or impossible
TARGET_FORBIDDEN403nonoTarget rejected at our edge: private range, denylist, metadata address

gateway

Retry later. Our side. Honour Retry-After when it is present.

OutcomeHTTPFailoverBilledMeaning
INVALID_REQUEST500nonoOur translation produced a provider 400
NO_PROVIDER_AVAILABLE503nonoNo adapter matches the capability, or the chain is exhausted
RESPONSE_TOO_LARGE413nonoBody exceeded the cap; see operations.md section 1
BUDGET_EXCEEDED504nonoGlobal deadline or cost budget hit
GATEWAY_BUSY429nonoIn-flight ceiling reached; the gateway shed this request rather than queue it

Status codes

On success the target's own status passes through unchanged. That is the drop-in promise: code that already branches on a 404 keeps working. Everything else maps to a status of ours.

400BAD_REQUEST
403TARGET_FORBIDDEN
404TARGET_NOT_FOUND
413RESPONSE_TOO_LARGE
429TARGET_RATE_LIMITED, RATE_LIMITED, GATEWAY_BUSY
500INVALID_REQUEST
502SOFT_BLOCK, HARD_BLOCK, TARGET_ERROR, PROVIDER_ERROR, AUTH_FAILED, PROVIDER_DRIFT, PROVIDER_BODY_OFFLOADED
503NO_PROVIDER_AVAILABLE
504PROVIDER_TIMEOUT, BUDGET_EXCEEDED