TrieOH
Informd

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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

MemberTypeDescription
itemsobject[]
application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "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.

application/problem+json
{
  "type": "https://api.informd.trieoh.com/problems/identity-unavailable",
  "status": 503,
  "title": "Identity Unavailable",
  "detail": "…",
  "instance": "/…"
}