gnomondevelopersv0.12.0
Index

Reference 02 / Errors

Exact failures.

Failures are JSON with a stable error string. There are no HTML error pages and no 429. Most failures are explicit; one important exception is a seam returned as a successful response.

Envelope

error response
{"error":"<reason>"}

Engine exceptions are converted to HTTP 400 and the error string is the exception type and message.

engine failure
{"error":"CapacityError: node cap reached"}

Status codes

StatusWhenBody
200Success, including an UNKNOWN_SEAM emission.Route-specific JSON
400Invalid JSON, field coercion failure, engine exception, capacity refusal.{"error":"..."}
401Missing, malformed, expired, revoked, or wrong-instance credential.{"error":"..."}
403Authenticated but wrong tier or excluded capability.{"error":"..."}
404Unknown path.{"error":"not found"}
409The optional accounts or security node is not enabled.{"error":"..."}

Authentication failures

A 401 is a credential failure; a 403 is a permission failure. The reason strings are stable: malformed, bad_signature, wrong_instance,unknown_account, account_inactive, stale_epoch,expired, tier_mismatch, and capability_denied.

See Authentication for the full model.

Seam is not an error

Asking for a relation that does not exist is a valid answer. /emit with an absent anchor returns HTTP 200 and a seam verdict:

unknown anchor
{"verdict":"UNKNOWN_SEAM (anchor not in store)","emitted_text":"UNKNOWN_SEAM"}

This is different from a 404. A 404 means the route does not exist; a seam means the route exists and the relation does not.

Retries

Operational bounds

The server validates JSON syntax and field coercion, not a full request schema. A missing or mistyped field can be coerced to an empty string or zero. Send every field explicitly and validate on the client.