Problems
Every RFC 9457 problem Informd can answer, by status.
Every Informd error is an application/problem+json body: type, status, title, detail and instance are always present, plus errors: [{ field, message }] when request fields are at fault. A problem's type is {API_URL}/problems/{slug}, which the API itself serves as documentation. Branch on the slug at the end of type, not on title or detail. The members listed below a problem are its own, on top of the standard ones.
400
Add Owner To Namespace
add-owner-to-namespace — Owners can't be added to namespaces they own.
{
"type": "https://api.informd.trieoh.com/problems/add-owner-to-namespace",
"status": 400,
"title": "Add Owner To Namespace",
"detail": "…",
"instance": "/…"
}Add Self To Form
add-self-to-form — Users can't add themselves to forms.
{
"type": "https://api.informd.trieoh.com/problems/add-self-to-form",
"status": 400,
"title": "Add Self To Form",
"detail": "…",
"instance": "/…"
}Add Self To Namespace
add-self-to-namespace — Users can't add themselves to namespaces.
{
"type": "https://api.informd.trieoh.com/problems/add-self-to-namespace",
"status": 400,
"title": "Add Self To Namespace",
"detail": "…",
"instance": "/…"
}Already Form Member
already-form-member — User is already a member of the form.
{
"type": "https://api.informd.trieoh.com/problems/already-form-member",
"status": 400,
"title": "Already Form Member",
"detail": "…",
"instance": "/…"
}Already Namespace Member
already-namespace-member — User is already a member of the namespace.
{
"type": "https://api.informd.trieoh.com/problems/already-namespace-member",
"status": 400,
"title": "Already Namespace Member",
"detail": "…",
"instance": "/…"
}Archive Not Closed
archive-not-closed — Cannot archive a form not on closed.
{
"type": "https://api.informd.trieoh.com/problems/archive-not-closed",
"status": 400,
"title": "Archive Not Closed",
"detail": "…",
"instance": "/…"
}Batch Failed
batch-failed — Some items of a batch failed; each is answered as its own problem.
| Member | Type | Description |
|---|---|---|
items | object[] |
{
"type": "https://api.informd.trieoh.com/problems/batch-failed",
"status": 400,
"title": "Batch Failed",
"detail": "…",
"instance": "/…",
"items": []
}Close Not Open
close-not-open — Cannot close a form not on open.
{
"type": "https://api.informd.trieoh.com/problems/close-not-open",
"status": 400,
"title": "Close Not Open",
"detail": "…",
"instance": "/…"
}Fields Across Steps
fields-across-steps — All fields must belong to the same step.
{
"type": "https://api.informd.trieoh.com/problems/fields-across-steps",
"status": 400,
"title": "Fields Across Steps",
"detail": "…",
"instance": "/…"
}Form Not Open For Responses
form-not-open-for-responses — Form is not open for responses.
{
"type": "https://api.informd.trieoh.com/problems/form-not-open-for-responses",
"status": 400,
"title": "Form Not Open For Responses",
"detail": "…",
"instance": "/…"
}Form Owner Already Member
form-owner-already-member — Owner of the form is already a member of the form.
{
"type": "https://api.informd.trieoh.com/problems/form-owner-already-member",
"status": 400,
"title": "Form Owner Already Member",
"detail": "…",
"instance": "/…"
}Invalid Select Options
invalid-select-options — Invalid options.
{
"type": "https://api.informd.trieoh.com/problems/invalid-select-options",
"status": 400,
"title": "Invalid Select Options",
"detail": "…",
"instance": "/…"
}Namespace Member Already In Form
namespace-member-already-in-form — Namespace member is already a member of the form.
{
"type": "https://api.informd.trieoh.com/problems/namespace-member-already-in-form",
"status": 400,
"title": "Namespace Member Already In Form",
"detail": "…",
"instance": "/…"
}Namespace Owner Already In Form
namespace-owner-already-in-form — Owner of the namespace is already a member of the form.
{
"type": "https://api.informd.trieoh.com/problems/namespace-owner-already-in-form",
"status": 400,
"title": "Namespace Owner Already In Form",
"detail": "…",
"instance": "/…"
}Not Form Member
not-form-member — User is not a member of the form.
{
"type": "https://api.informd.trieoh.com/problems/not-form-member",
"status": 400,
"title": "Not Form Member",
"detail": "…",
"instance": "/…"
}Not Namespace Member
not-namespace-member — User is not a member of the namespace.
{
"type": "https://api.informd.trieoh.com/problems/not-namespace-member",
"status": 400,
"title": "Not Namespace Member",
"detail": "…",
"instance": "/…"
}Open Not Draft
open-not-draft — Cannot open a form not on draft.
{
"type": "https://api.informd.trieoh.com/problems/open-not-draft",
"status": 400,
"title": "Open Not Draft",
"detail": "…",
"instance": "/…"
}Redraft Not Open
redraft-not-open — Cannot redraft a form not on open.
{
"type": "https://api.informd.trieoh.com/problems/redraft-not-open",
"status": 400,
"title": "Redraft Not Open",
"detail": "…",
"instance": "/…"
}Redraft With Responses
redraft-with-responses — Cannot redraft a form with responses.
{
"type": "https://api.informd.trieoh.com/problems/redraft-with-responses",
"status": 400,
"title": "Redraft With Responses",
"detail": "…",
"instance": "/…"
}Remove Form Owner
remove-form-owner — Cannot remove owner of the form.
{
"type": "https://api.informd.trieoh.com/problems/remove-form-owner",
"status": 400,
"title": "Remove Form Owner",
"detail": "…",
"instance": "/…"
}Remove Namespace Member From Form
remove-namespace-member-from-form — Cannot remove namespace member from form.
{
"type": "https://api.informd.trieoh.com/problems/remove-namespace-member-from-form",
"status": 400,
"title": "Remove Namespace Member From Form",
"detail": "…",
"instance": "/…"
}Remove Namespace Owner From Form
remove-namespace-owner-from-form — Cannot remove owner of the namespace from form.
{
"type": "https://api.informd.trieoh.com/problems/remove-namespace-owner-from-form",
"status": 400,
"title": "Remove Namespace Owner From Form",
"detail": "…",
"instance": "/…"
}Remove Self From Form
remove-self-from-form — Users can't remove themselves from forms.
{
"type": "https://api.informd.trieoh.com/problems/remove-self-from-form",
"status": 400,
"title": "Remove Self From Form",
"detail": "…",
"instance": "/…"
}Steps Across Forms
steps-across-forms — All steps must belong to the same form.
{
"type": "https://api.informd.trieoh.com/problems/steps-across-forms",
"status": 400,
"title": "Steps Across Forms",
"detail": "…",
"instance": "/…"
}Validation Failed
validation — The request is malformed or breaks a rule; `errors` names the
offending fields.
{
"type": "https://api.informd.trieoh.com/problems/validation",
"status": 400,
"title": "Validation Failed",
"detail": "…",
"instance": "/…"
}401
API Keys Not Accepted
api-keys-not-accepted — This API takes bearer tokens only, not API keys.
{
"type": "https://api.informd.trieoh.com/problems/api-keys-not-accepted",
"status": 401,
"title": "API Keys Not Accepted",
"detail": "…",
"instance": "/…"
}Email Not Verified
email-not-verified — The caller must verify their email address first.
{
"type": "https://api.informd.trieoh.com/problems/email-not-verified",
"status": 401,
"title": "Email Not Verified",
"detail": "…",
"instance": "/…"
}Invalid API Key
invalid-api-key — The API key is unknown, malformed or revoked.
{
"type": "https://api.informd.trieoh.com/problems/invalid-api-key",
"status": 401,
"title": "Invalid API Key",
"detail": "…",
"instance": "/…"
}Invalid Token
invalid-token — The bearer token does not parse, its signature or issuer is
wrong, or it is not valid yet.
{
"type": "https://api.informd.trieoh.com/problems/invalid-token",
"status": 401,
"title": "Invalid Token",
"detail": "…",
"instance": "/…"
}Token Expired
token-expired — The bearer token has expired; refresh it and retry.
{
"type": "https://api.informd.trieoh.com/problems/token-expired",
"status": 401,
"title": "Token Expired",
"detail": "…",
"instance": "/…"
}Unauthenticated
unauthenticated — The request carries no credentials: no bearer token and no API
key where the operation needs one.
{
"type": "https://api.informd.trieoh.com/problems/unauthenticated",
"status": 401,
"title": "Unauthenticated",
"detail": "…",
"instance": "/…"
}403
Form Not Answerable
form-not-answerable — Form is not open for answers.
{
"type": "https://api.informd.trieoh.com/problems/form-not-answerable",
"status": 403,
"title": "Form Not Answerable",
"detail": "…",
"instance": "/…"
}Insufficient Role
insufficient-role — The caller's role does not allow the operation.
{
"type": "https://api.informd.trieoh.com/problems/insufficient-role",
"status": 403,
"title": "Insufficient Role",
"detail": "…",
"instance": "/…"
}404
Not Found
not-found — The requested resource does not exist.
{
"type": "https://api.informd.trieoh.com/problems/not-found",
"status": 404,
"title": "Not Found",
"detail": "…",
"instance": "/…"
}409
API Key Name Taken
api-key-name-taken — An API key with this name already exists.
{
"type": "https://api.informd.trieoh.com/problems/api-key-name-taken",
"status": 409,
"title": "API Key Name Taken",
"detail": "…",
"instance": "/…"
}Field Already Answered
field-already-answered — This field already has an answer in this response.
{
"type": "https://api.informd.trieoh.com/problems/field-already-answered",
"status": 409,
"title": "Field Already Answered",
"detail": "…",
"instance": "/…"
}Field Key Taken
field-key-taken — A field with this key already exists in this step.
{
"type": "https://api.informd.trieoh.com/problems/field-key-taken",
"status": 409,
"title": "Field Key Taken",
"detail": "…",
"instance": "/…"
}Form Name Taken
form-name-taken — A form with this name already exists in this namespace.
{
"type": "https://api.informd.trieoh.com/problems/form-name-taken",
"status": 409,
"title": "Form Name Taken",
"detail": "…",
"instance": "/…"
}Invite Token Taken
invite-token-taken — An invite with this token already exists.
{
"type": "https://api.informd.trieoh.com/problems/invite-token-taken",
"status": 409,
"title": "Invite Token Taken",
"detail": "…",
"instance": "/…"
}Namespace Name Taken
namespace-name-taken — A namespace with this name already exists.
{
"type": "https://api.informd.trieoh.com/problems/namespace-name-taken",
"status": 409,
"title": "Namespace Name Taken",
"detail": "…",
"instance": "/…"
}Responder Email Taken
responder-email-taken — A responder with this email already exists on this system.
{
"type": "https://api.informd.trieoh.com/problems/responder-email-taken",
"status": 409,
"title": "Responder Email Taken",
"detail": "…",
"instance": "/…"
}429
Too Many Requests
rate-limited — The caller exceeded the rate limit; retry later.
{
"type": "https://api.informd.trieoh.com/problems/rate-limited",
"status": 429,
"title": "Too Many Requests",
"detail": "…",
"instance": "/…"
}500
Internal Server Error
internal-server-error — The server failed unexpectedly. The cause is logged, never
returned.
{
"type": "https://api.informd.trieoh.com/problems/internal-server-error",
"status": 500,
"title": "Internal Server Error",
"detail": "Internal Server Error",
"instance": "/…"
}503
Identity Unavailable
identity-unavailable — IdentityX could not be reached to check the API key; retry
later.
{
"type": "https://api.informd.trieoh.com/problems/identity-unavailable",
"status": 503,
"title": "Identity Unavailable",
"detail": "…",
"instance": "/…"
}Submit a response POST
Submits a response to an open form: an optional email plus one answer per field (field answers upsert per response). Public — this is the submission endpoint embedded in the public form flow. Responders are identified by email when provided.
Backend
The Informd Go service — multi-tenant forms. Where it lives, structure, run it.