ProudAuthDocs

Authentication

HTTP API operations. 2 operations

Expand an endpoint for authentication, parameters, request fields and responses.

POST/api/v1/realms/{realm}/auth/transactions/{id}/guest+

Continue as a guest

Creates a low-privilege guest identity when registration.allow_guests is enabled (REG-010). Guests hold no organization membership or roles and are refused any context that requires MFA or an organization; assurance is urn:proudauth:acr:anonymous. Rate-limited like self-registration. Any request body is ignored.

AuthenticationtransactionToken or transactionCookie, csrfHeaderTrust classtransaction-boundPermissionsSee operation description

Parameters

NameLocationRequiredDetails
realmpathYesRealm name (path-based issuer). Unknown realms return 404.
{"type":"string"}
idpathYesResource identifier.
{"type":"string"}
X-Request-Idheader—Optional caller-supplied correlation ID (printable ASCII, at most 64 characters); otherwise generated. Echoed in X-Request-Id and problem request_id.
{"type":"string","maxLength":64,"pattern":"^[\\x21-\\x7e]+$"}

Responses

200 OK

application/json

FieldTypeRequiredDescription
clientobject,nullYes
completed_factorsarray,nullYes
csrf_tokenstring—Returned only to browser (cookie-bound) callers from an allowed origin; send it back in X-CSRF-Token.
errorstring—
expires_atstringYes
external_redirectstring—Upstream authorization URL the browser must visit (federated sign-in).
idstringYes
intentstringYes
localestring—
next_actionsarray,nullYes
noticestring—Non-terminal condition to show, e.g. upstream_unavailable.
one_timeone-time secretobject,null—Secrets displayed exactly once (for example newly generated recovery codes). Never shown again.
redirect_tostring—
statusstringYes
pending | completed | cancelled | expired | failed
userobject,null—
webauthnobject—WebAuthn ceremony options for the client (PublicKeyCredentialRequestOptions or CreationOptions JSON) when a passkey step is pending. Not secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
400 Malformed request, invalid JSON (duplicate members, unknown fields, wrong types), invalid cursor or invalid transaction (code invalid_request, transaction_invalid, invalid_proof, invitation_invalid).

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
401 Missing or invalid credentials (code unauthenticated or invalid_credentials). Includes WWW-Authenticate.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  },
  "WWW-Authenticate": {
    "$ref": "#/components/headers/WWW-Authenticate"
  }
}
403 Authenticated but not allowed (code forbidden, mfa_required, step_up_required, recent_authentication_required, grant_ceiling_exceeded, impersonation_restricted, account_unavailable, sso_required, recovery_restricted). Step-up problems carry obligations.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
404 Unknown realm or resource, or existence concealed from the caller (code not_found, feature_disabled).

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
409 Conflicts with current state, or an idempotent request with the same key is still in progress / carried a one-time secret (code conflict, unexpected_step, last_owner, last_sign_in_method).

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
422 Validation failed (code validation_failed, password_policy, idempotency_key_reused); errors maps fields to messages.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
500 Unexpected error (code internal_error); no stack traces or secrets.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}

Operation continueAsGuest · Schema definitions · OpenAPI contract

POST/api/v1/realms/{realm}/auth/transactions/{id}/registration+

Register a new account in this transaction

Browser form of POST /registrations (REG-001): the transaction cookie is scoped to this transaction's path, so login UIs register here with the same Origin and CSRF checks as every other step. The response is identical whether or not the address already belongs to an account.

AuthenticationtransactionToken or transactionCookie, csrfHeaderTrust classtransaction-boundPermissionsSee operation description

Parameters

NameLocationRequiredDetails
realmpathYesRealm name (path-based issuer). Unknown realms return 404.
{"type":"string"}
idpathYesResource identifier.
{"type":"string"}
X-Request-Idheader—Optional caller-supplied correlation ID (printable ASCII, at most 64 characters); otherwise generated. Echoed in X-Request-Id and problem request_id.
{"type":"string","maxLength":64,"pattern":"^[\\x21-\\x7e]+$"}

Request body

application/json · required

FieldTypeRequiredDescription
display_namestring—
emailstring—
family_namestring—
given_namestring—
invitationone-time secretstring—Invitation secret to accept during registration.
localestring—
organizationoneOf—
passwordstring—
profileobject,null—
terms_versionstring—
usernamestring—
Complete request schema
{
  "additionalProperties": false,
  "properties": {
    "display_name": {
      "type": "string"
    },
    "email": {
      "type": "string"
    },
    "family_name": {
      "type": "string"
    },
    "given_name": {
      "type": "string"
    },
    "invitation": {
      "type": "string",
      "x-secret": true,
      "description": "Invitation secret to accept during registration."
    },
    "locale": {
      "type": "string"
    },
    "organization": {
      "oneOf": [
        {
          "$ref": "#/components/schemas/OrganizationInput"
        },
        {
          "type": "null"
        }
      ]
    },
    "password": {
      "type": "string",
      "format": "password"
    },
    "profile": {
      "additionalProperties": {},
      "type": [
        "object",
        "null"
      ]
    },
    "terms_version": {
      "type": "string"
    },
    "username": {
      "type": "string"
    }
  },
  "type": "object"
}

Responses

200 OK

application/json

FieldTypeRequiredDescription
clientobject,nullYes
completed_factorsarray,nullYes
csrf_tokenstring—Returned only to browser (cookie-bound) callers from an allowed origin; send it back in X-CSRF-Token.
errorstring—
expires_atstringYes
external_redirectstring—Upstream authorization URL the browser must visit (federated sign-in).
idstringYes
intentstringYes
localestring—
next_actionsarray,nullYes
noticestring—Non-terminal condition to show, e.g. upstream_unavailable.
one_timeone-time secretobject,null—Secrets displayed exactly once (for example newly generated recovery codes). Never shown again.
redirect_tostring—
statusstringYes
pending | completed | cancelled | expired | failed
userobject,null—
webauthnobject—WebAuthn ceremony options for the client (PublicKeyCredentialRequestOptions or CreationOptions JSON) when a passkey step is pending. Not secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
400 Malformed request, invalid JSON (duplicate members, unknown fields, wrong types), invalid cursor or invalid transaction (code invalid_request, transaction_invalid, invalid_proof, invitation_invalid).

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
401 Missing or invalid credentials (code unauthenticated or invalid_credentials). Includes WWW-Authenticate.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  },
  "WWW-Authenticate": {
    "$ref": "#/components/headers/WWW-Authenticate"
  }
}
403 Authenticated but not allowed (code forbidden, mfa_required, step_up_required, recent_authentication_required, grant_ceiling_exceeded, impersonation_restricted, account_unavailable, sso_required, recovery_restricted). Step-up problems carry obligations.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
404 Unknown realm or resource, or existence concealed from the caller (code not_found, feature_disabled).

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
409 Conflicts with current state, or an idempotent request with the same key is still in progress / carried a one-time secret (code conflict, unexpected_step, last_owner, last_sign_in_method).

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
422 Validation failed (code validation_failed, password_policy, idempotency_key_reused); errors maps fields to messages.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}
500 Unexpected error (code internal_error); no stack traces or secrets.

application/problem+json

FieldTypeRequiredDescription
typestringYeshttps://auth.proudbase.com/problems/{code}
titlestringYes
statusintegerYes
codestringYesStable machine-readable error code.
invalid_request | validation_failed | unauthenticated | forbidden | not_found | conflict | precondition_failed | precondition_required | rate_limited | unavailable | internal_error | payload_too_large | unsupported_media_type | step_up_required | recent_authentication_required | mfa_required | recovery_restricted | transaction_invalid | transaction_expired | invalid_credentials | invalid_proof | unexpected_step | password_policy | last_owner | grant_ceiling_exceeded | impersonation_denied | impersonation_restricted | feature_disabled | invitation_invalid | last_sign_in_method | idempotency_key_reused | account_unavailable | sso_required | upstream_unavailable
detailstring—Client-safe detail; never contains secrets.
errorsobject—Field name -> validation message.
request_idstring—Correlation identifier, equal to the X-Request-Id response header.
obligationsarray—Present on step-up / recent-authentication / MFA problems.
original_statusinteger—Present when an idempotent replay is refused because the original response carried a one-time secret.

Response headers

{
  "X-Request-Id": {
    "$ref": "#/components/headers/X-Request-Id"
  }
}

Operation registerInTransaction · Schema definitions · OpenAPI contract

ProudAuth · Self-hosted identityBuilt 2026-10-13 · d9cc813ae809 · content snapshot
⌕

Search all guides and the API contract.

↑ ↓ to navigate Enter to open · Esc to close