TrieOH
IdentityX

Problems

Every RFC 9457 problem IdentityX can answer, by status.

Every IdentityX 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

Action Token Expired

action-token-expired — Token expired.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/action-token-expired",
  "status": 400,
  "title": "Action Token Expired",
  "detail": "…",
  "instance": "/…"
}

Action Token Invalid

action-token-invalid — Invalid or expired token.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/action-token-invalid",
  "status": 400,
  "title": "Action Token Invalid",
  "detail": "…",
  "instance": "/…"
}

Action Token Used

action-token-used — Token already used.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/action-token-used",
  "status": 400,
  "title": "Action Token Used",
  "detail": "…",
  "instance": "/…"
}

Add Owner To Org

add-owner-to-org — Owners can't be added to organizations they own.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/add-owner-to-org",
  "status": 400,
  "title": "Add Owner To Org",
  "detail": "…",
  "instance": "/…"
}

Add Owner To Project

add-owner-to-project — Owners can't be added to projects they own.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/add-owner-to-project",
  "status": 400,
  "title": "Add Owner To Project",
  "detail": "…",
  "instance": "/…"
}

Add Self To Org

add-self-to-org — Users can't add themselves to organizations.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/add-self-to-org",
  "status": 400,
  "title": "Add Self To Org",
  "detail": "…",
  "instance": "/…"
}

Add Self To Project

add-self-to-project — Users can't add themselves to projects.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/add-self-to-project",
  "status": 400,
  "title": "Add Self To Project",
  "detail": "…",
  "instance": "/…"
}

Already Org Member

already-org-member — User is already a member of the organization.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/already-org-member",
  "status": 400,
  "title": "Already Org Member",
  "detail": "…",
  "instance": "/…"
}

Already Project Member

already-project-member — User is already a member of the project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/already-project-member",
  "status": 400,
  "title": "Already Project Member",
  "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.identityx.trieoh.com/problems/batch-failed",
  "status": 400,
  "title": "Batch Failed",
  "detail": "…",
  "instance": "/…",
  "items": []
}

Invalid Capabilities

invalid-capabilities — Invalid capabilities.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/invalid-capabilities",
  "status": 400,
  "title": "Invalid Capabilities",
  "detail": "…",
  "instance": "/…"
}

Missing OAuth Code

missing-oauth-code — Missing code.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/missing-oauth-code",
  "status": 400,
  "title": "Missing OAuth Code",
  "detail": "…",
  "instance": "/…"
}

Missing OAuth State

missing-oauth-state — Missing state.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/missing-oauth-state",
  "status": 400,
  "title": "Missing OAuth State",
  "detail": "…",
  "instance": "/…"
}

Not Org Member

not-org-member — User is not a member of the organization.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/not-org-member",
  "status": 400,
  "title": "Not Org Member",
  "detail": "…",
  "instance": "/…"
}

Not Project Member

not-project-member — User is not a member of the project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/not-project-member",
  "status": 400,
  "title": "Not Project Member",
  "detail": "…",
  "instance": "/…"
}

OAuth State Expired

oauth-state-expired — OAuth state expired; start a new login.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-state-expired",
  "status": 400,
  "title": "OAuth State Expired",
  "detail": "…",
  "instance": "/…"
}

OAuth State Mismatch

oauth-state-mismatch — Invalid OAuth state.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-state-mismatch",
  "status": 400,
  "title": "OAuth State Mismatch",
  "detail": "…",
  "instance": "/…"
}

OAuth State Not Found

oauth-state-not-found — Invalid or expired OAuth state; start a new login.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-state-not-found",
  "status": 400,
  "title": "OAuth State Not Found",
  "detail": "…",
  "instance": "/…"
}

Org Member Already In Project

org-member-already-in-project — Organization member is already a member of the project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/org-member-already-in-project",
  "status": 400,
  "title": "Org Member Already In Project",
  "detail": "…",
  "instance": "/…"
}

Org Owner Already In Project

org-owner-already-in-project — Owner of the organization is already a member of the project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/org-owner-already-in-project",
  "status": 400,
  "title": "Org Owner Already In Project",
  "detail": "…",
  "instance": "/…"
}

Password Only For Humans

password-only-for-humans — Only human actors can authenticate via password.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/password-only-for-humans",
  "status": 400,
  "title": "Password Only For Humans",
  "detail": "…",
  "instance": "/…"
}

Profile Schema Violation

profile-schema-violation — The profile breaks its project's profile schema; `errors` names the offending fields.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/profile-schema-violation",
  "status": 400,
  "title": "Profile Schema Violation",
  "detail": "…",
  "instance": "/…"
}

Provider Not Configured

provider-not-configured — The OAuth provider has no credentials, for the project or the platform.

MemberTypeDescription
providerstringThe provider's name.
application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/provider-not-configured",
  "status": 400,
  "title": "Provider Not Configured",
  "detail": "…",
  "instance": "/…",
  "provider": "…"
}

Provider Removed

provider-removed — The OAuth provider was removed from the project while the login was under way.

MemberTypeDescription
providerstringThe provider's name.
application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/provider-removed",
  "status": 400,
  "title": "Provider Removed",
  "detail": "…",
  "instance": "/…",
  "provider": "…"
}

Remove Org Member From Project

remove-org-member-from-project — Cannot remove organization member from project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/remove-org-member-from-project",
  "status": 400,
  "title": "Remove Org Member From Project",
  "detail": "…",
  "instance": "/…"
}

Remove Org Owner

remove-org-owner — Cannot remove the owner of the organization.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/remove-org-owner",
  "status": 400,
  "title": "Remove Org Owner",
  "detail": "…",
  "instance": "/…"
}

Remove Org Owner From Project

remove-org-owner-from-project — Cannot remove the owner of the organization from the project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/remove-org-owner-from-project",
  "status": 400,
  "title": "Remove Org Owner From Project",
  "detail": "…",
  "instance": "/…"
}

Remove Project Owner

remove-project-owner — Cannot remove the owner of the project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/remove-project-owner",
  "status": 400,
  "title": "Remove Project Owner",
  "detail": "…",
  "instance": "/…"
}

Remove Self From Org

remove-self-from-org — Cannot remove yourself from the organization.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/remove-self-from-org",
  "status": 400,
  "title": "Remove Self From Org",
  "detail": "…",
  "instance": "/…"
}

Remove Self From Project

remove-self-from-project — Cannot remove yourself from the project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/remove-self-from-project",
  "status": 400,
  "title": "Remove Self From Project",
  "detail": "…",
  "instance": "/…"
}

Template Does Not Render

template-render — The email template does not render; `detail` says why.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/template-render",
  "status": 400,
  "title": "Template Does Not Render",
  "detail": "…",
  "instance": "/…"
}

Unsupported Provider

unsupported-provider — IdentityX has no OAuth provider by this name.

MemberTypeDescription
providerstringThe provider's name.
application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/unsupported-provider",
  "status": 400,
  "title": "Unsupported Provider",
  "detail": "…",
  "instance": "/…",
  "provider": "…"
}

Validation Failed

validation — The request is malformed or breaks a rule; `errors` names the offending fields.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/validation",
  "status": 400,
  "title": "Validation Failed",
  "detail": "…",
  "instance": "/…"
}

401

API Key Expired

api-key-expired — Api key expired.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/api-key-expired",
  "status": 401,
  "title": "API Key Expired",
  "detail": "…",
  "instance": "/…"
}

API Keys Not Accepted

api-keys-not-accepted — This API takes bearer tokens only, not API keys.

application/problem+json
{
  "type": "https://api.identityx.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.identityx.trieoh.com/problems/email-not-verified",
  "status": 401,
  "title": "Email Not Verified",
  "detail": "…",
  "instance": "/…"
}

Invalid Access Token

invalid-access-token — Invalid access token.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/invalid-access-token",
  "status": 401,
  "title": "Invalid Access Token",
  "detail": "…",
  "instance": "/…"
}

Invalid API Key

invalid-api-key — The API key is unknown, malformed or revoked.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/invalid-api-key",
  "status": 401,
  "title": "Invalid API Key",
  "detail": "…",
  "instance": "/…"
}

Invalid Credentials

invalid-credentials — Invalid email or password.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/invalid-credentials",
  "status": 401,
  "title": "Invalid Credentials",
  "detail": "…",
  "instance": "/…"
}

Invalid KID

invalid-kid — Invalid kid.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/invalid-kid",
  "status": 401,
  "title": "Invalid KID",
  "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.identityx.trieoh.com/problems/invalid-token",
  "status": 401,
  "title": "Invalid Token",
  "detail": "…",
  "instance": "/…"
}

Missing KID

missing-kid — Missing kid.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/missing-kid",
  "status": 401,
  "title": "Missing KID",
  "detail": "…",
  "instance": "/…"
}

OAuth Code Exchange

oauth-code-exchange — Failed to exchange code.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-code-exchange",
  "status": 401,
  "title": "OAuth Code Exchange",
  "detail": "…",
  "instance": "/…"
}

OAuth Empty Token

oauth-empty-token — Empty token from provider.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-empty-token",
  "status": 401,
  "title": "OAuth Empty Token",
  "detail": "…",
  "instance": "/…"
}

OAuth GitHub Email

oauth-github-email — Could not fetch github email.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-github-email",
  "status": 401,
  "title": "OAuth GitHub Email",
  "detail": "…",
  "instance": "/…"
}

OAuth Incomplete Userinfo

oauth-incomplete-userinfo — Incomplete userinfo from provider.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-incomplete-userinfo",
  "status": 401,
  "title": "OAuth Incomplete Userinfo",
  "detail": "…",
  "instance": "/…"
}

OAuth Userinfo

oauth-userinfo — Userinfo request failed.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-userinfo",
  "status": 401,
  "title": "OAuth Userinfo",
  "detail": "…",
  "instance": "/…"
}

Outdated Token

outdated-token — Outdated token.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/outdated-token",
  "status": 401,
  "title": "Outdated Token",
  "detail": "…",
  "instance": "/…"
}

Platform Only

platform-only — Platform-level authentication required.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/platform-only",
  "status": 401,
  "title": "Platform Only",
  "detail": "…",
  "instance": "/…"
}

Signing Key Retired

signing-key-retired — Token signing key retired.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/signing-key-retired",
  "status": 401,
  "title": "Signing Key Retired",
  "detail": "…",
  "instance": "/…"
}

Signing Key Revoked

signing-key-revoked — Token signing key revoked.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/signing-key-revoked",
  "status": 401,
  "title": "Signing Key Revoked",
  "detail": "…",
  "instance": "/…"
}

Token Expired

token-expired — The bearer token has expired; refresh it and retry.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/token-expired",
  "status": 401,
  "title": "Token Expired",
  "detail": "…",
  "instance": "/…"
}

Token Revoked

token-revoked — Token has been revoked.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/token-revoked",
  "status": 401,
  "title": "Token Revoked",
  "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.identityx.trieoh.com/problems/unauthenticated",
  "status": 401,
  "title": "Unauthenticated",
  "detail": "…",
  "instance": "/…"
}

403

Actor Not In Project

actor-not-in-project — Actor does not belong to this project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/actor-not-in-project",
  "status": 403,
  "title": "Actor Not In Project",
  "detail": "…",
  "instance": "/…"
}

Actor Outside Project

actor-outside-project — Insufficient permissions.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/actor-outside-project",
  "status": 403,
  "title": "Actor Outside Project",
  "detail": "…",
  "instance": "/…"
}

Insufficient Role

insufficient-role — The caller's role does not allow the operation.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/insufficient-role",
  "status": 403,
  "title": "Insufficient Role",
  "detail": "…",
  "instance": "/…"
}

Not Profile Owner

not-profile-owner — Insufficient permissions.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/not-profile-owner",
  "status": 403,
  "title": "Not Profile Owner",
  "detail": "…",
  "instance": "/…"
}

Provider Disabled

provider-disabled — The project has disabled login with this OAuth provider.

MemberTypeDescription
providerstringThe provider's name.
application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/provider-disabled",
  "status": 403,
  "title": "Provider Disabled",
  "detail": "…",
  "instance": "/…",
  "provider": "…"
}

404

Not Found

not-found — The requested resource does not exist.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/not-found",
  "status": 404,
  "title": "Not Found",
  "detail": "…",
  "instance": "/…"
}

409

Already Blacklisted

already-blacklisted — This target is already blacklisted for this scope.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/already-blacklisted",
  "status": 409,
  "title": "Already Blacklisted",
  "detail": "…",
  "instance": "/…"
}

API Key Prefix Taken

api-key-prefix-taken — An API key with this display prefix already exists.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/api-key-prefix-taken",
  "status": 409,
  "title": "API Key Prefix Taken",
  "detail": "…",
  "instance": "/…"
}

Capability Exists

capability-exists — A capability with this resource and action already exists for this scope.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/capability-exists",
  "status": 409,
  "title": "Capability Exists",
  "detail": "…",
  "instance": "/…"
}

Domain Taken

domain-taken — This domain is already verified by another project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/domain-taken",
  "status": 409,
  "title": "Domain Taken",
  "detail": "…",
  "instance": "/…"
}

Duplicate OAuth State

duplicate-oauth-state — Duplicate OAuth login state.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/duplicate-oauth-state",
  "status": 409,
  "title": "Duplicate OAuth State",
  "detail": "…",
  "instance": "/…"
}

Email Taken For Scope

email-taken-for-scope — An account with this email already exists for this scope and auth method.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/email-taken-for-scope",
  "status": 409,
  "title": "Email Taken For Scope",
  "detail": "…",
  "instance": "/…"
}

Email Template Exists

email-template-exists — This project already has an email template of this kind.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/email-template-exists",
  "status": 409,
  "title": "Email Template Exists",
  "detail": "…",
  "instance": "/…"
}

External Identity Taken

external-identity-taken — This external identity is already linked to this account.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/external-identity-taken",
  "status": 409,
  "title": "External Identity Taken",
  "detail": "…",
  "instance": "/…"
}

Handle Taken

handle-taken — This handle is already in use by another profile.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/handle-taken",
  "status": 409,
  "title": "Handle Taken",
  "detail": "…",
  "instance": "/…"
}

OAuth Provider Configured

oauth-provider-configured — This OAuth provider is already configured for this project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/oauth-provider-configured",
  "status": 409,
  "title": "OAuth Provider Configured",
  "detail": "…",
  "instance": "/…"
}

Org Slug Taken

org-slug-taken — An organization with this slug already exists.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/org-slug-taken",
  "status": 409,
  "title": "Org Slug Taken",
  "detail": "…",
  "instance": "/…"
}

Platform Schema Version Exists

platform-schema-version-exists — A platform profile schema version already exists.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/platform-schema-version-exists",
  "status": 409,
  "title": "Platform Schema Version Exists",
  "detail": "…",
  "instance": "/…"
}

Profile Schema Version Exists

profile-schema-version-exists — This profile schema version already exists for the scope.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/profile-schema-version-exists",
  "status": 409,
  "title": "Profile Schema Version Exists",
  "detail": "…",
  "instance": "/…"
}

Project Profile Schema Exists

project-profile-schema-exists — A profile schema already exists for this project.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/project-profile-schema-exists",
  "status": 409,
  "title": "Project Profile Schema Exists",
  "detail": "…",
  "instance": "/…"
}

Project Slug Taken

project-slug-taken — A project with this slug already exists.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/project-slug-taken",
  "status": 409,
  "title": "Project Slug Taken",
  "detail": "…",
  "instance": "/…"
}

Setup Complete

setup-complete — Setup already complete.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/setup-complete",
  "status": 409,
  "title": "Setup Complete",
  "detail": "…",
  "instance": "/…"
}

ToS Already Accepted

tos-already-accepted — This actor has already accepted this terms version.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/tos-already-accepted",
  "status": 409,
  "title": "ToS Already Accepted",
  "detail": "…",
  "instance": "/…"
}

ToS Already Exists

tos-already-exists — This project already has terms of service.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/tos-already-exists",
  "status": 409,
  "title": "ToS Already Exists",
  "detail": "…",
  "instance": "/…"
}

ToS Exists

tos-exists — Project already has terms of service; update them instead.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/tos-exists",
  "status": 409,
  "title": "ToS Exists",
  "detail": "…",
  "instance": "/…"
}

429

Too Many Requests

rate-limited — The caller exceeded the rate limit; retry later.

application/problem+json
{
  "type": "https://api.identityx.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.identityx.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.identityx.trieoh.com/problems/identity-unavailable",
  "status": 503,
  "title": "Identity Unavailable",
  "detail": "…",
  "instance": "/…"
}

Setup Check Failed

setup-check-failed — Could not check setup state.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/setup-check-failed",
  "status": 503,
  "title": "Setup Check Failed",
  "detail": "…",
  "instance": "/…"
}

Setup Required

setup-required — Please setup IDX first on /auth/setup.

application/problem+json
{
  "type": "https://api.identityx.trieoh.com/problems/setup-required",
  "status": 503,
  "title": "Setup Required",
  "detail": "…",
  "instance": "/…"
}