Webpath Error Types

Every Webpath error is RFC 7807 application/problem+json. Its type is a stable URI under https://muse.as/a/webpath/errors/ that resolves to a page like the ones linked below — title, the HTTP status, what it means, and how to recover. The response's own detail field is always a full sentence you can relay to a user as-is.

{
  "type": "https://muse.as/a/webpath/errors/etag-mismatch",
  "title": "Precondition failed",
  "status": 412,
  "detail": "The file changed since you last read it. Re-read it and retry your write."
}

73 error types, grouped by area.

Identity

TypeStatusMeaning
access-required403This host gates entry behind Cloudflare Access and you have not passed it.
auth-required401The operation needs a signed-in account or a key, and none was presented.
idp-only403This host only accepts sign-in through its configured identity provider.
otp-expired401The one-time code has expired, or no code is currently active.
otp-invalid401The one-time code did not match.
otp-rate-limited429Too many sign-in codes have been requested for this email or IP.
passkey-challenge400The passkey registration or sign-in challenge timed out.
passkey-invalid400 / 401The passkey assertion could not be verified, or no matching account was found.
passkey-not-found404No passkey with that id exists on this account.
passkey-unknown401The presented passkey is not registered to any account.
untrusted-target400This host cannot carry your sign-in to the space you asked for.

Keys

TypeStatusMeaning
format-not-allowed403The key's formats allowlist excludes this file type.
out-of-scope403The key is being used outside the space, path, or operations it is scoped to.
scope-invalid422The requested key scope is missing a namespace or is otherwise invalid.
token-conflict400A header key and a query key were both sent and disagree.
token-expired401The key has passed its expiry time.
token-invalid401The key is not in a recognizable form.
token-missing401This operation needs a key and none was sent.
token-not-found404No key with that id exists on your account.
token-revoked401The key was revoked — individually, or by a space-wide key reset.

Spaces

TypeStatusMeaning
bad-host400The Host header was missing or is not a Webpath host.
bad-name422The supplied name is invalid.
host-not-open403This host does not let the public join new spaces.
no-space401The space this key was minted for has been deleted.
space-free404No one has joined this name yet.
space-is-platform-host409This hostname is a platform host, not a joinable space.
space-name-invalid422The name breaks the naming rules.
space-name-reserved422The name is a reserved label this host keeps for itself.
space-name-taken409That space name has already been joined.
space-not-found404No space exists at this host.

Files

TypeStatusMeaning
already-exists412If-None-Match: * was set, but a file already exists at this path.
append-conflict409Concurrent appends kept colliding under the retry limit.
bad-patch422The ?replace patch batch is malformed.
bad-path400The path is malformed or attempts directory traversal.
etag-mismatch412An If-Match precondition failed: the file changed (or does not exist).
file-type-not-allowed415The host or space upload policy forbids this file extension.
internal500The server hit an unexpected error completing the request.
invalid-append-body400The body is not valid for a line-oriented file (bad JSON line, unterminated field, or non-UTF-8).
method-not-allowed405This path does not support that HTTP method.
not-appendable409This type's syntax spans the whole file (JSON, HTML, XML, YAML…) or it is binary, so concatenation would corrupt it.
not-found404Nothing readable lives at this path — it may not exist, or it may be private.
not-html415?replace edits only HTML files, and this is not one.
patch-conflict409Some ?replace fragments no longer match the stored page.
precondition-required428This write must carry an If-Match precondition and none was sent.
range-not-satisfiable416The requested byte range lies outside the file.
too-large413The body, or the combined result, exceeds the size cap.

Metadata

TypeStatusMeaning
bad-description422The description is invalid or over the 500-character limit.
bad-layer422The layer value contains unrecognized tokens.
bad-sharing422The sharing map is malformed.
bad-tags422The tags value is malformed.
bad-visibility422The visibility value is not one of the allowed levels.
field-not-writable422A field in the PATCH is server-owned, or not allowed on this target.

Reserved

TypeStatusMeaning
audit-read-only405The audit log is read-only.
bad-browse422The browse settings are invalid.
bad-uploads422The uploads policy value is invalid.
config-read-only405_config.json is a projection — PUT is not allowed.
links-read-only405_links.json is derived and cannot be written.
llms-generated405llms.txt is synthesized fresh on every read and cannot be written.
search-all-platform-only403Reindexing every space may only run on a platform host, by its owner.
search-read-only405_search is a control surface, not a writable file.
stats-generated405Visitor stats are synthesized and read-only.

Query

TypeStatusMeaning
bad-og400The ?og form is not recognized.
bad-qr400The ?qr form is not recognized.
bad-request400 / 422The request was malformed for this endpoint — bad JSON, a missing field, conflicting flags, or nothing to change.
bad-search400The search query was empty.
confirm-required400Deleting a whole space or prefix needs an explicit confirmation.

Sharing

TypeStatusMeaning
admin-not-delegable403An admin grant cannot itself re-grant admin.
bad-access-rule422A drop-box _access.json rule is malformed.
drop-exists409A drop box is create-only and that name already exists.
drop-is-private403A drop-box write tried to set a non-private visibility.
grant-does-not-cover403Your grant does not extend to this path or operation.
grant-is-content-only403Your grant lets you edit content, not visibility.
sharing-owner-only403Only the owner, or a whole-space write key, may change sharing.

Spec · API Reference · Conformance · Webpath home