TerraFlow Hosted preview

Synthetic data only · no uptime commitment · 10:00–22:00 IST (04:30–16:30 UTC)

Reason codes

A reason code says why a governed request ended as it did. It is in the x-terraflow-reason header of every non-streamed response to /v1/chat/completions, /v1/messages and /v1/invocations that TerraFlow governed, answered or refused, and in the body's terraflow.reason_code field. A streamed answer that passes straight through sends its headers before the outcome exists, so it carries no reason header: read the outcome in the console or the request's evidence. Errors raised before a request is governed carry their code in the error body only, with no reason header: a missing or wrong key (APP_UNAUTHENTICATED), a shed while the key is checked (QUEUE_SHED), and the model API errors below. This reference is generated from the code that decides them (terraflow/core/reasons.py); a build fails if any code is undocumented.

The status is the HTTP status of a response that ends with that code, unless a note says otherwise. Codes listed with status 200 describe how an answer was produced. Several policy codes are reasons a single route was excluded: they are recorded in the decision for each route, and become the response only when you pinned that route.

CodeStatusMeaningWhat to do
ACTION_ALLOWED200An agent action was allowed. Reserved for the action broker (Phase 4B); not raised in the preview.Nothing.
ACTION_CLASS_BLOCKED403The action's class is above what the contract allows. Reserved for the action broker (Phase 4B); not raised in the preview.Do not retry the action.
ACTION_DEFERRED202An agent action was deferred. Reserved for the action broker (Phase 4B); not raised in the preview.Check the action's status later.
ACTION_DENIED403An agent action was denied. Reserved for the action broker (Phase 4B); not raised in the preview.Do not retry the action.
ACTION_MODIFIED200An agent action was allowed with changes. Reserved for the action broker (Phase 4B); not raised in the preview.Use the modified action.
ACTION_PENDING_APPROVAL202An agent action waits for a human approval. Reserved for the action broker (Phase 4B); not raised in the preview.Check the action's status once an approver has decided.
APP_NOT_ENTITLED_TO_WORKLOAD403Your application is not entitled to call this workload.Use one of the starter workloads, or ask a workspace admin to entitle the application.
APP_UNAUTHENTICATED401The API key is missing, wrong or revoked.Send your workspace key as Authorization: Bearer tf_… or x-api-key. If it was rotated, use the new key.
BUDGET_EXHAUSTED429A TerraFlow budget (workload, business unit or tenant; hourly or monthly) has no room for this request. In the preview your tenant's monthly budget is set equal to your $5 allowance, so as the allowance runs out this code may come before SPEND_CEILING_REACHED.Do not retry now. Wait for the budget period to roll over, or have a FinOps user raise the budget. Raising the tenant budget does not raise the allowance: ask your Altius contact for a top-up.
BUDGET_REQUEST_LIMIT429This request's worst-case cost is above the workload's per-request limit.Ask for fewer output tokens or send a shorter request.
BUDGET_THROTTLED403Never a response status.The request was held back at the lowest priority by a budget throttle instead of being denied. A recorded reason, never a response; if its deadline passes first the response is BUDGET_EXHAUSTED.Nothing. Expect a longer wait.
BUNDLE_EXPIRED503The active configuration bundle has passed its expiry. TerraFlow fails closed.A workspace admin re-activates a bundle; in the preview, tell your Altius contact.
BUNDLE_INVALID503There is no valid signed configuration bundle active, so nothing can be governed. TerraFlow fails closed.Do not retry in a loop. A workspace admin activates a valid bundle; in the preview, tell your Altius contact.
BURST_ONLY_ON_CAPACITY403When you pinned that model; otherwise a per-route reason in the decision.The contract lets the request use an external model only when private capacity is exhausted, and it is not.Let TerraFlow choose; the private route will answer.
CACHE_HIT200The request was answered by reusing a validated answer from the workspace's response cache. No model was called.Nothing. The cost is zero; x-terraflow-savings-usd is the estimated list-price cost of the same request on the workload's baseline model, not a measured bill.
CANCELLED409The request was cancelled with DELETE /v1/requests/{id} before it finished.Nothing.
CAPABILITY_NOT_IN_CONTRACT403When you pinned that model; otherwise a per-route reason in the decision.The model is not on the workload contract's list of allowed models.Pin a model the contract allows, or let TerraFlow choose.
CONSEQUENCE_TIER_NOT_APPROVED403When you pinned that model; otherwise a per-route reason in the decision.The model is not approved for the workload's consequence tier.Pin a model approved for the tier, or let TerraFlow choose.
CONTENT_FILTERED400The provider's own content filter refused the request or the answer.Do not retry the same content. Rephrase it.
CONTENT_RULE_VIOLATION422A blocking content rule of the contract matched the answer, so it was not released.Do not retry the same request as it is.
CONTEXT_WINDOW_EXCEEDED403When you pinned that model; otherwise a per-route reason in the decision.The request does not fit in the model's context window. On a hosted preview the check is deliberately conservative: a real provider model is refused when the request's size in bytes (UTF-8, as sent), plus the longest answer it may write, exceeds the window, even if its token count fits.Send a shorter request, or pin a model with a larger window. On a preview, English text fits roughly a quarter of the window in tokens.
CONTRACT_NOT_EXECUTABLE403The workload's contract is not approved, not yet effective, expired, or not in the active bundle.Have a colleague approve the contract and activate a bundle that contains it, then retry.
DATA_CLASS_EXCEEDS_CAPABILITY403When you pinned that model; otherwise a per-route reason in the decision.The request's data class is above what the model may receive. In the preview every external model accepts internal data at most.Do not send this data to that model. Let TerraFlow choose a model that may receive it.
DATA_CLASS_NOT_PERMITTED403The request's data class, or a sensitive type in it, is not accepted by the workload. The class is the more sensitive of what you declared and what the scan detected; images, audio and files count as restricted.Do not retry the same content. Remove the sensitive content or use a workload that accepts it. In the preview, send synthetic data only.
DATA_CLASS_UNDECLARED403The workload requires a declared data class and the request did not send one.Send X-TerraFlow-Data-Class (public, internal, confidential or restricted), or data_class on /v1/invocations.
DATA_TERMS_RETENTION403When you pinned that model; otherwise a per-route reason in the decision.The provider keeps data longer than the contract allows.Pin another model, or let TerraFlow choose.
DATA_TERMS_TRAINING403When you pinned that model; otherwise a per-route reason in the decision.The provider's terms allow it to train on the data, and the contract forbids that.Pin another model, or let TerraFlow choose.
DEADLINE_EXPIRED504The request could not finish within its deadline (X-TerraFlow-Deadline-Ms, or the workload's default).Retry with a longer deadline, or a shorter request.
EVIDENCE_UNAVAILABLE503The evidence ledger could not record the request, so TerraFlow did not run it. It fails closed.Retry after a short wait. If it persists, tell your Altius contact.
EXTERNAL_EGRESS_NOT_ALLOWED403When you pinned that model; otherwise a per-route reason in the decision.The model is outside the boundary and the contract does not allow this request to leave it.Do not retry with that model. Let TerraFlow choose, which keeps the request on a permitted private route.
GRANT_INVALID401An action grant is missing, expired or invalid. Reserved for the action broker (Phase 4B); not raised in the preview.Obtain a new grant.
IDEMPOTENCY_CONFLICT409The same Idempotency-Key was reused with a different request body.Use a new key for a different request.
IDEMPOTENCY_KEY_REQUIRED400The workload requires an Idempotency-Key and the request had none.Send a unique Idempotency-Key with each request.
IDEMPOTENCY_REPLAY409A replay carries the original response's status.A repeated Idempotency-Key with the same body replayed the original outcome, without running or charging again. The response carries x-terraflow-idempotent-replay: true.Nothing. You received the original answer.
IDEMPOTENCY_REPLAY_NO_CONTENT409The key's original request was answered, but its answer is no longer stored, so it cannot be replayed faithfully. The response names the original request id. In the preview, answers are kept in memory only and are lost when the server stops each night, so a replay on a later day gets this code.Send the request again with a new key if you need a new answer.
INPUT_TOO_LARGE413The request is above the classifier's scan bound, so it was never scanned and never forwarded.Send a smaller request.
INTERNAL_ERROR500An unexpected fault inside TerraFlow. Any reserved budget is released, and the failure is in the evidence.Retry once. If it persists, quote the request id to your Altius contact.
JURISDICTION_NOT_ALLOWED403When you pinned that model; otherwise a per-route reason in the decision.The model processes data in a jurisdiction the contract does not allow.Pin a model in an allowed jurisdiction, or let TerraFlow choose.
LIFECYCLE_NOT_APPROVED403When you pinned that model; otherwise a per-route reason in the decision.The model is not in an approved lifecycle state.Pin an approved model, or let TerraFlow choose.
MODEL_FAMILY_NOT_ALLOWED403When you pinned that model; otherwise a per-route reason in the decision.The model's family is not on the contract's list of allowed families.Pin a model of an allowed family, or let TerraFlow choose.
NO_POLICY_PERMITTED_ROUTE403Policy left no model that may receive this request. The decision lists each model and why it was excluded.Do not retry the same request. Read the reasons in Routing Explorer or the request's evidence, and change the data or the workload.
NO_ROUTE_WITHIN_REQUEST_LIMIT429Every permitted model's worst-case cost is above the workload's per-request limit.Ask for fewer output tokens or send a shorter request; or raise the workload's per-request limit.
OUTPUT_REDACTED200Sensitive data was found in the answer and redacted before it was released.Nothing. The released answer is the redacted one.
PERMITTED200The request was allowed and answered by a model.Nothing. Read x-terraflow-capability and x-terraflow-cost-usd for the model and the cost.
PER_TYPE_UNCALIBRATED200The workload routes by question type, but no permitted model has a measured score for this request's type, so the workload's default tier was used instead. Informational: the request is served.None. Run a benchmark for the workload to calibrate per-type scores.
POLICY_EVALUATION_ERROR403The policy engine could not evaluate the request. TerraFlow fails closed.Retry once; if it persists, quote the request id to your Altius contact.
PREFIX_CACHE_SHARED403When you pinned that model; otherwise a per-route reason in the decision.The request is confidential or above, and the model's prompt cache is shared across tenants. Never waived.Let TerraFlow choose a model with a dedicated cache, or a private one.
PRIVATE_ENDPOINT_OUTSIDE_BOUNDARY403A model registered as private has an endpoint outside the configured private network. Refused when the bundle is activated.Do not retry. An operator corrects the model's endpoint.
PROVIDER_DISABLED403When you pinned that model; otherwise a per-route reason in the decision.The model has been switched off by an operator.Let TerraFlow choose another model, or pin a different one.
PROVIDER_ERROR_RECOVERED200A provider call failed and TerraFlow recovered, by retrying or by falling back to another permitted model. The request was answered.Nothing. The evidence shows what failed and which model answered.
PROVIDER_ERROR_UNRECOVERED503Every attempt within the contract's fallback graph failed.Retry later. If it persists, quote the request id to your Altius contact.
PROVIDER_REJECTED_REQUEST400The provider rejected your own content as invalid (its HTTP 400, 413 or 422 naming your messages or tool schemas, or naming nothing). TerraFlow does not retry it or fall back, since no route would take it, and does not count it against the provider's health. A refusal that names a field TerraFlow itself wrote from the model's settings (such as response_format, temperature or max_tokens) is not this code: it is a model mismatch, and TerraFlow falls back to another permitted model (PROVIDER_ERROR_RECOVERED when one answers, PROVIDER_ERROR_UNRECOVERED when none does). Also raised before any call, with detail REASONING_BUDGET_EXCEEDS_OUTPUT, when the contract's reasoning budget cannot fit in this request's output limit.Fix the request. The provider's own error text is never passed on; the request's evidence shows which model refused it.
PROVIDER_UNHEALTHY403When you pinned that model; otherwise a per-route reason in the decision.The model's health checks or recent calls show it is failing.Let TerraFlow choose another model, or retry later.
QUEUE_SHED429TerraFlow is over capacity and shed the request before running it.Wait for the Retry-After interval, then retry.
RATE_LIMITED429Too many requests in a minute, for the workload (30 a minute on starter workloads) or, in the preview, for your workspace's calls to paid providers (detail provider_rpm).Wait for the Retry-After interval, then retry. Spread bursts out.
REVIEW_EXPIRED410No reviewer decided within the hold period, and the held answer is gone.Send the request again if you still need an answer.
REVIEW_PENDING202202 on /v1/invocations only. On /v1/chat/completions and /v1/messages it is a 200 whose answer is a placeholder naming the review id, so SDKs do not break.The answer is held for human review. The response carries x-terraflow-review-id. No starter workload uses review.Fetch the answer with GET /v1/reviews/{id} once a reviewer has approved it.
REVIEW_REJECTED422A reviewer rejected the held answer. It is never released.Do not retry the same request as it is.
RUN_BUDGET_EXHAUSTED429A multi-step run has used its own budget.Do not retry the run as it is. Start a new run with a larger budget, or fewer steps.
SAFE_PATH_USED200The planned routes could not serve the request, and the contract's designated safe-path model answered instead. It is policy-checked like any other route.Nothing. The evidence shows why the safe path was used; no starter workload has one.
SENSITIVE_TYPE_NOT_ALLOWED_ON_CAPABILITY403When you pinned that model; otherwise a per-route reason in the decision.The request contains a sensitive type (personal, card or health data, or a credential) that the model may not receive.Remove the sensitive content, or let TerraFlow choose a model that may receive it.
SPEND_CEILING_REACHED429The preview's spend guard refused a paid call. Either your workspace's lifetime allowance is used (detail workspace_allowance), or the preview's monthly ceiling across all workspaces is reached (detail plane_ceiling). No paid call was made.For the allowance: ask your Altius contact for a top-up; there is no Retry-After. For the monthly ceiling: retry after the Retry-After interval, at the start of the next month (UTC).
SPEND_GUARD_UNAVAILABLE503The preview's spend guard did not answer within 250 milliseconds, or refused. TerraFlow fails closed and makes no paid call; simulated and private models still answer.Retry after a short wait. If it persists, tell your Altius contact.
SPEND_VELOCITY_TRIPPED429Spend in the last minute went above the workload's velocity limit; a breaker holds further spend briefly.Wait for the Retry-After interval, then retry at a slower rate.
TENANT_MISMATCH403The workload's contract belongs to another tenant than the calling application.Do not retry. Call a workload of your own tenant.
TENANT_QUEUE_LIMIT429Your tenant already has as many requests queued as it may.Wait for the Retry-After interval, then retry; send fewer requests at once.
TIER_NOT_AVAILABLE503No model of the tier the plan needs is available. Not raised by the current release.Retry later.
TOOLS_UNSUPPORTED403When you pinned that model; otherwise a per-route reason in the decision.The request offers tools and the model cannot use them.Pin a model that supports tools, or let TerraFlow choose.
TOOL_NOT_PERMITTED403The request offers a tool that is not on the contract's tool list. Refused before classification; the starter workloads allow no tools.Remove the tool from the request, or use a workload whose contract lists it.
UNKNOWN_WORKLOAD403404 on POST /v1/batches, where it is a model API error with no reason header.The workload named in X-TerraFlow-Workload (or the workload field of /v1/invocations) does not exist in this workspace. A model that names no workload is not this error: the request uses your default workload.Use a workload id from the console's Workloads screen, such as starter-assistant.
VALIDATION_BLOCKED422The answer failed validation and could not be repaired, so it was not released.Do not retry the same request as it is. Simplify the request, or relax the workload's output rules.
VALIDATION_ESCALATED200The answer failed a check and the request was re-run on a higher model tier (the contract's cascade), whose answer passed.Nothing. The answer you received passed validation.
VALIDATION_REPAIRED200The answer failed a check, such as the output schema, and a repair attempt produced one that passed.Nothing. The answer you received passed validation.

Model API errors

Errors of the model API (/v1) that are not governed outcomes: the request was malformed, or names something that does not exist for your key. They carry the code in the error body and, once a request id exists, x-terraflow-request-id; never x-terraflow-reason.

CodeStatusMeaningWhat to do
BATCH_NOT_FOUND404No batch job with this id for your application: unknown, expired, or another application's.Check the job id returned by POST /v1/batches.
BATCH_REQUIRES_P3422Batch jobs are accepted only for workloads at priority P3. No starter workload is P3.Send the requests one by one, or use a P3 workload.
DUPLICATE_CUSTOM_ID422Two requests in one batch share a custom_id.Give each request in the batch a unique custom_id.
EVIDENCE_NOT_FOUND404No evidence for this request id for your application: unknown, or another application's request.Check the request id (x-terraflow-request-id).
INVALID_DATA_CLASS400X-TerraFlow-Data-Class is not one of public, internal, confidential, restricted.Fix the header value. Nothing was governed or charged.
INVALID_DEADLINE400X-TerraFlow-Deadline-Ms is not a positive whole number.Send a positive number of milliseconds, or leave the header out.
INVALID_REQUEST400The request body does not match the endpoint's schema (for example, messages is missing or empty). The error lists up to three problems, without echoing your input. The same handler answers a malformed /api body.Fix the body.
INVALID_SENSITIVE_TYPE400X-TerraFlow-Sensitive-Types names a type other than pii, pci, phi, credentials.Fix the header value.
METRICS_TOKEN_REQUIRED403The plane's /metrics endpoint has no bearer token configured. The preview's edge never forwards /metrics.None for a caller: the endpoint is not reachable through the preview.
METRICS_UNAUTHORIZED401A /metrics scrape without the right bearer token. The preview's edge never forwards /metrics.None for a caller: the endpoint is not reachable through the preview.
NOT_FOUND404Metrics are switched off on this plane. The preview's edge never forwards /metrics.None for a caller: the endpoint is not reachable through the preview.
REQUEST_NOT_FOUND404No request with this id for your application (on cancel and feedback): unknown, or another application's request.Check the request id (x-terraflow-request-id).
REVIEW_NOT_FOUND404No review item with this id for your application.Use the id from x-terraflow-review-id.

Console API errors

Errors of the console API (/api), which the console uses. Its body is {"error": {"code", "message", "details"}}.

CodeStatusMeaningWhat to do
ACTIVATION_REJECTED409The bundle that would apply an emergency capability disable was rejected.Read the reason in the message; nothing changed.
BUDGET_INVALID422A budget edit is not valid (for example, a negative or malformed amount).Fix the values.
BUNDLE_REJECTED409The configuration bundle built from your change was rejected at activation; the previous bundle stays active.Read the reason in details, fix the contract, and try again.
CALIBRATION_REFUSED409A tier calibration was refused (for example, the evidence does not meet its gates).Read the reason in details.
CHARTER_REQUIRED409A calibration needs a complete, signed benchmark charter first.Complete and sign the charter.
CONFLICT409The contract changed since you loaded it, or the change conflicts with its current state.Reload and try again.
CONTRACT_INVALID422The contract does not pass validation.Fix the fields listed in details.
CSRF_HEADER_REQUIRED403A console request that changes something did not send X-TerraFlow-Console: 1.Send the header (the console does).
EDIT_NOT_APPLICABLE422A reviewer's edit was sent for an item that has no held answer, or without the edited text.Approve or reject without an edit, or send the edited text.
EDIT_TOO_LARGE422The reviewer's edited answer is above the size limit.Shorten the edit.
EVENT_NOT_FOUND404No evidence event with this sequence number.Check the number.
INVALID_CREDENTIALS401The username or password is wrong.Try again; repeated failures are throttled.
INVALID_CURSOR422The review queue's before cursor is not the next_before of an earlier page.Page with the next_before value the previous page returned, or omit it for the newest page.
INVALID_DIMENSION422A FinOps grouping that does not exist.Use one of the dimensions listed in the message.
INVALID_ERROR_CLASS400A fault injection names an unknown error class.Use one of the error classes the console offers.
INVALID_PERIOD422A FinOps export period ends before it starts, or spans more than 366 days.Fix the dates.
INVALID_REQUEST400A console API request body is malformed: any /api body that does not match its schema (answered by the plane's shared validation handler, in the model API's error shape, listing up to three problems), or an invite redemption whose fields are wrong (the fields at fault are listed). Your input is never echoed.Fix the body or the listed fields.
INVALID_REVIEW_STATE422A review-queue filter names an unknown state.Use one of the states listed in details.
INVALID_ROLE400A charter signature names a role the charter does not have.Use one of the roles listed in the message.
INVALID_TRANSITION409A charter or calibration step that is not allowed from its current state.Reload and follow the steps in order.
INVITE_INVALID410The invite is unknown, already used, revoked or expired. One answer for every case, on purpose.Ask your Altius contact (or your workspace admin, for a colleague invite) for a new invite.
LOGIN_BUSY429Too many sign-ins are in progress at once.Try again in a moment.
LOGIN_THROTTLED429Too many failed sign-in or redemption attempts within the throttle window (15 minutes): 10 per username on sign-in (10 per client address on redemption), and 50 per client address on either.Wait and try again.
NOTE_TOO_LONG422A reviewer's note is above the length limit.Shorten the note.
NOT_FOUND404The contract, charter, scenario or other item named in the path does not exist.Check the id.
PASSWORD_TOO_LONG400The password is longer than 1024 characters.Choose a shorter password.
PASSWORD_TOO_SHORT400The password is shorter than 12 characters.Choose a password of at least 12 characters.
PERMISSION_DENIED403Your roles do not allow this action.Ask a workspace admin, or a colleague who holds the role.
PROOF_QUESTIONS_MALFORMED422The installed rehearsed-questions file does not match its schema (or carries a type that may not be shown).Rewrite it with terraflow bench public proof-questions; nothing was called.
PROOF_QUESTIONS_UNAVAILABLE404No rehearsed Proof questions are installed on this plane (the questions file is unset or missing).Install the file written by terraflow bench public proof-questions and set TERRAFLOW_PROOF_ITEMS_PATH, or ask in free text.
PROOF_QUESTION_NOT_FOUND404No rehearsed Proof question has this id (GPQA questions are never listed or asked by id).Pick a question from the list the Proof page shows, or ask in free text.
PROOF_REPLAY_MALFORMED422The installed benchmark replay file does not match its schema.Reinstall the replay file produced by the benchmark run; nothing was changed.
PROOF_REPLAY_UNAVAILABLE404No benchmark replay is installed on this plane (the replay directory is unset or the file is missing).Install the replay file and set TERRAFLOW_PROOF_REPLAY_DIR.
PUBLIC_BASE_URL_UNSET503The plane has no public address configured, so it cannot build Connect snippets or invite links.Tell your Altius contact.
RELEASE_NOT_DECIDABLE409The vendor release cannot be approved or rejected now: it is already decided, older than the approved release, or can no longer be read; or you imported it, and another approver must approve it (separation of duties).Reload the Deployment screen; for a release you imported, ask another approver.
RELEASE_REJECTED409The vendor release file was refused (it does not verify, replays an earlier version, or this is a preview plane, which takes no releases); nothing was staged or activated.Read the reason in details.
RELEASE_TOO_LARGE413The release file is larger than a release may be (4 MiB); the upload is refused before it is read in full.Check that the file is a vendor release.
REQUEST_NOT_FOUND404No request with this id.Check the request id.
REVIEWER_NOT_ASSIGNED403You are not in a reviewer group of this item's workload.Ask a reviewer of that workload.
REVIEW_CONTENT_UNAVAILABLE404The review item holds no text, or its held text is gone.Nothing to review; the item can only be rejected or left to expire.
REVIEW_EXPIRED410The review item's window has ended; its held answer is gone.Nothing; the caller can send the request again.
REVIEW_NOT_FOUND404No review item with this id.Check the id.
REVIEW_NOT_PENDING409The review item has already been decided.Reload the queue.
ROLE_PRESET_INVALID400A colleague invite names a role preset other than approver, auditor, finops or builder.Choose one of those presets.
SCENARIO_IN_PROGRESS409Another tour or showcase scenario is running.Try again when it finishes.
SEPARATION_OF_DUTIES409You cannot approve your own work.Ask a colleague with the approver role.
SESSION_EXPIRED401Your console session has expired.Sign in again.
SESSION_INVALID401Your console session token is not valid.Sign in again.
SESSION_REQUIRED401The console API needs a signed-in session.Sign in.
SESSION_REVOKED401This session was signed out.Sign in again.
STREAM_LIMIT429Too many live console streams are open.Close other console tabs, or try again shortly.
TERMS_NOT_ACKNOWLEDGED400An invite was redeemed without ticking the synthetic-data acknowledgement.Tick it: the preview is for synthetic or public data only.
USERNAME_INVALID400The username is not 3 to 40 lowercase letters, digits, dots, dashes or underscores starting with a letter or digit (an e-mail address is not a username).Choose another username; never an e-mail address.
USERNAME_TAKEN409The username is already used in this workspace, or reserved (admin, administrator, root, operator, system and terraflow belong to the workspace's admin account).Choose another username.
WORKSPACE_FULL409The workspace already has its five users.Ask your Altius contact.