Skip to content

Error codes

Every error code the serving plane and the MCP server return, its HTTP status, and what to do about it.

reference~4 minVerified v0.127.10

HTTP answers { "error": { "code", "message" } }; MCP answers { "ok": false, "code", "message" }. Branch on code, show message. MCP in the status column means the code arrives in a tool result rather than an HTTP status. Every message says what went wrong and what to change.

CodeStatusWhat to do
ambiguous_dataset400Several artifacts carry that dataset; name one from the message.
artifact_changed409The owner changed the artifact mid-edit. Nothing was saved; read it and retry.
artifact_closed410The artifact was deleted and can no longer hold storage.
body_too_large413Operator endpoint; send no body.
browser_request_refused403The API is for agents and scripts; call it without Origin headers.
bundle_too_large413The bundle is over 10 MiB. Remove or shrink files.
capability_expired401The page was open too long or its access changed. Reload it.
claim_expired410The guest page expired and was deleted.
claim_taken409The guest page was already claimed.
claim_unknown404The claim link was not issued by this plane.
companion_slug_taken409A template part's slug is already one of your other artifacts. Pick another slug.
dataset_key_changed409The artifact has responses under its dataset key. Keep the key; start a new log as a new artifact with continues.
duplicate_slug400Two instances share a slug. Give each its own.
editors_unavailable403Naming an Editor needs a paid plan (Solo or above). Name them a Commenter or Viewer, or change plan.
erasure_failed502, 503Nothing was deleted. Retry.
external_sharing_blocked403The workspace's sharing policy forbids sharing outside it.
field_not_groupable400Group by a closed-choice field with pii: none.
field_not_queryable400Sensitive fields cannot be filtered; filter a coarse companion field.
file_too_large413One file is over 5 MiB.
forbidden403Signed in, but this is not yours to do. Do not retry.
gone—Declared, not returned by any route today.
guest_attempts429Too many anonymous publish attempts from this address today. Wait, or connect an account.
guest_capacity429Anonymous publishing hit its daily ceiling. Wait, or connect an account.
guest_policy_refused422The guest page's policy was refused; the message says why.
guest_quota429This address published its anonymous pages for today. Wait, or connect an account.
guest_unavailable503Anonymous publishing is down. Retry shortly.
handle_taken409Operator rename onto a handle in use.
hash_mismatch400A file's bytes do not match its sha256. Re-encode and resend.
index_unavailable503Operator endpoint; the plane is missing its ingest secret.
internal500, 502Something failed on our side. Retry; if it persists, report it.
invalid_arguments400, MCPThe tool's arguments are wrong; follow fix and accepts. super_data_schema {compare} takes 2 to 10 artifacts you can read.
invalid_acting_for400actingFor needs creatorId, email and handle.
invalid_analytics400analytics is true or false.
invalid_act_as400actAs is for the platform's own credential; remove it.
invalid_base64400A file's content is not valid base64.
invalid_collection400collection is a string, or null to clear it.
invalid_comment400Send a JSON object such as {"body":"Fixed in v4."}.
invalid_creator400creatorId must be an account id.
invalid_cursor400Use the cursor the last page returned, with the same sort.
invalid_declaration409The new policy is not additive. Put back what the message lists.
invalid_description400description is a string, or null to clear it.
invalid_downloadable400downloadable is true or false.
invalid_email400Send an array of email addresses.
invalid_filter400Fix the filter clause: field, operator, value.
invalid_handle400A handle is required and must be valid.
invalid_header400header is true or false.
invalid_instances400Send instances, or a top-level slug and values, not both.
invalid_json400Send a JSON object.
invalid_key400A workspace key needs keyId and label.
invalid_key_hash400keyHash is the lowercase hex SHA-256 of the key.
invalid_kind400kind must be one of the seven artifact kinds.
invalid_live400live is true or false.
invalid_make_own400makeOwn is true or false.
invalid_members_can_edit400membersCanEdit is true or false.
invalid_move400Operator move with a malformed body.
invalid_path400Paths are relative, /-separated, under 256 characters, and never start with _.
invalid_policy400, 413The data policy failed a rule or a cap; the message names it.
invalid_query400The query was refused; edit it as the message suggests.
invalid_reasonMCPA report's reason is too long. Say it in a sentence.
invalid_reassign400from and to must be two different accounts.
invalid_role400, MCPThat role is not offered here. Use viewer, commenter or editor; collaborator and member still work as aliases. Admin was folded into Owner.
invalid_shot400Send the PNG bytes as the body.
invalid_showcase400showcase is true or false.
invalid_slug400Slugs are lowercase kebab, 3–63 characters.
invalid_social400social is {title, description, image}, or null.
invalid_specMCPSend the template's whole spec when revising it.
invalid_template400The template slug names nothing. Look it up with super_templates.
invalid_title400title is a string, or null to clear it.
invalid_upload400Stage the file with super_upload and send its uploadId.
invalid_values422The values do not fit the template's slots; fix each listed problem.
invalid_version400version is a positive integer that exists. A template version you may not build from is refused at publish too.
invalid_visibility400visibility is private, organization or public.
invalid_window400since/until is an instant, a relative window or a version.
key_revoked401, 409The key was revoked. Reconnect.
length_required411Send a Content-Length.
live_invalid_messageWebSocketSend JSON frames.
live_unknown_messageWebSocketSend ping, subscribe or, as the owner, phase.
manage_on_platform403Share or rename on the dashboard page the message names.
mcp_not_configured500This plane has no MCP backend. Use another plane, or HTTP.
mcp_timeout504, MCPNo answer in 55 s; the call may still finish. Check before retrying a change.
mcp_unavailable502The MCP endpoint could not reach the worker. Retry shortly.
method_not_allowed405Use the method the message names.
missing_index400Add a non-empty index.html at the bundle root.
missing_prompt400Send metadata.prompt: one sentence on why this was built.
name_exhausted409Every -copy name is taken. Rename the duplicate.
no_files400Send a files array.
no_longer_builds403You no longer build in the artifact's workspace, so this key cannot change it. Ask an owner.
no_runtime400The template has no code to clone; write the page and super_publish it.
not_a_member403You are no longer a member of the artifact's workspace, so this key cannot read it. Ask an owner.
not_found404No such artifact, version, upload or route, or not yours to see.
not_series_bound400The page reads no series. Declare source: {series} in its policy.
order_mismatchMCPorder must list every artifact in the project once.
organization_unavailable403Workspace-wide sharing needs a team workspace on Team.
page_refused422A guest page must be UTF-8 HTML.
partial_publishMCPSome pages of a batch published; the message lists which.
permission_required409A public or unlisted template from outside this workspace is not installed here. Ask the person, then install it with confirmedByPerson: true, then build.
plan_limit400, 402Over a plan limit. Free space or change plan.
plan_required402Workspace keys need Team. Use a personal key meanwhile.
plan_unconfirmed503The workspace's plan could not be checked. Retry in a minute.
policy_field_conflict409A field changed type. Rename it and set replaces.
policy_with_template400Do not send policy, html or files with a template.
rate_limited429Too many calls; the message says when to come back. See Limits.
record_conflict409A concurrent write won. Retry.
reserved_slugMCPThat slug is taken. Choose another.
role_unavailable503Your workspace role could not be confirmed. Retry.
rollback_crosses_data_model409That version collected a different data model. Roll back to one with the same model, or revise forward.
scope_immutable409A key cannot change between personal and workspace scope.
series_changed409The artifact has responses in its series. Keep the series; start a new one with new artifacts.
series_check_unavailable503The series could not be checked, so nothing was published. Retry shortly.
series_measure_conflict409A field's measure differs from the series. Use the series' measure, rename the field, or choose another series.
series_rows_owner_only403Rows across a series reach only the dashboard's owner. Read aggregates instead.
series_too_large409The series has more than 20 artifacts. Read it with your agent, or start a new series.
series_type_conflict409A field's type differs from the series. Use the series' type, rename the field, or choose another series.
series_unit_conflict409A field's unit differs in kind from the series, or one side has none. Use a unit of the same kind, rename the field, or choose another series.
shot_too_large413Crop the comment screenshot tighter, or post without one.
showcase_requires_public400Make the artifact public and published first.
slug_reserved400The platform reserves that slug. Pick another.
source_forbidden403A bound dashboard may only read an artifact you own.
source_not_found400The dashboard's source artifact does not exist.
source_shape_mismatch400Match the source stream's declared shape.
source_stream_unknown400The source declares no stream by that name.
source_visibility_forbidden400A public dashboard may not read rows; use aggregate or count.
stream_read_only403Nothing writes to this stream or page. Write from the artifact that collects.
template_existsMCPYou already own that template; revise it instead.
templates_unavailable503The template registry is unreachable. Retry shortly.
too_manyMCPToo many entries or addresses in one call. Split the batch.
too_many_files400More than 200 files.
too_many_instances400Too many instances in one template publish. Split the batch.
too_many_slugs400Too many slugs in one listing. Split the request.
unauthorized401No key, a wrong key, or a key from another plane (production or staging). Ask your agent which account it uses.
unknown_dataset400No dataset has that key.
unknown_toolMCPNo tool by that name; accepts lists the current ones.
upload_incomplete400PUT every declared file, then publish again.
version_published409Publish another version before deleting this one.
workspace_deleted401The workspace was deleted. Its owner can restore it within 30 days.
workspace_suspended402The company workspace is frozen or paused after its free period. Ask an owner to subscribe on Settings → Billing to restore writing. Existing content remains available to read or export.

From a page's own data calls

What an artifact's page meets when it saves or reads answers. The codes above that also apply here, such as rate_limited and not_found, are not repeated.

CodeStatusWhat to do
already_submitted409This visitor already answered: once per person, or once per value of uniqueBy. Offer to change the answer only if the policy uses upsert.
append_only403Answers here are final. To let people edit, publish with writes: "upsert".
artifact_closed410The artifact was deleted. Stop.
invalid_response422A field failed its rule, or a required one was sent empty; the message names it.
record_cap429The artifact holds every answer its policy allows. Waiting does not help; tell the visitor.
stream_closed409The stream takes answers only in another phase. Wait for the host to open it.
stream_required400The artifact declares streams; name one with ?stream=.
unknown_stream400No stream has that name; the message lists the ones declared.
visitor_cap429This visitor reached their own limit of records. Others can still answer.
write_conflict409Two saves of the same answers crossed. Nothing was stored; send it again.

When a live page is closed

A live page's connection ends with one of these codes, after a message that carries the reason. Reloading never loses a saved answer.

CodeReasonWhat the page does
4401live_unauthorizedFetch a new token, once.
4403live_read_adminNothing here is for visitors to hear. Stop.
4408live_idleNothing was sent for 90 seconds. Reconnect, and ping every 30.
4409live_token_expiredReconnect at once with a new token.
4413live_payload_too_largeA message over 32 KiB. Send less.
4429realtime_capacityThe room holds 500 pages. Keep the token, wait and retry.
4430live_floodingOver 10 messages a second. Slow down.
4453live_room_closedThe owner turned live off. Stop; reload later.
4454live_account_room_busyAnother of the owner's artifacts holds the workspace's live room. Keep the token, say that live is paused and answers still save, and retry after retryAfterMs (20 seconds). See Live rooms.
4499live_room_expiredThe room has been open 8 hours. Reconnect.