Skip to content

The authenticated account.

GET
/v1/auth/me
curl --request GET \
--url https://api.opdns.io/v1/auth/me \
--cookie opdns_session=<opdns_session>

Token scope: account:read. auth.scopes lists every scope for a session.

Current principal.

Media typeapplication/json
object
account
required
object
id
required
string format: uuid
org_id
required
string format: uuid
role
required
string
Allowed values: owner admin member
email
required
string format: email
email_verified_at
string | null format: date-time
plan
required
string
mfa
required
boolean
created_at
required
string format: date-time
is_admin

Operator account; may hold the admin scope.

boolean
deletion_requested_at
string | null format: date-time
deletion_due_at

Set while a deletion is pending; the account is erased at this time unless cancelled.

string | null format: date-time
auth
required
object
method
required
string
Allowed values: session token
scopes
required
Array<string>
Allowed values: profiles:read profiles:write account:read logs:read analytics:read admin
session
required
One of:
object
auth_method
required
string
Allowed values: password password_totp password_recovery_code passkey
restricted
required

A restricted session may only enrol a second factor (TOTP setup/confirm, passkey registration, GET /v1/auth/me, logout); every other call is 403 mfa_enrolment_required. Set for password-only sign-in after the grace period, outside dev.

boolean
mfa_deadline
required

When password-only sign-in becomes restricted; null once a second factor exists, and in dev.

string | null format: date-time
credentials
required
object
password
required
boolean
totp
required
boolean
passkeys
required
integer
recovery_codes_remaining
required
integer
email_suppressed
required

Mail to the address bounced or was reported as spam; prompt the user to update it.

boolean
Example
{
"account": {
"role": "owner"
},
"auth": {
"method": "session",
"scopes": [
"profiles:read"
],
"session": {
"auth_method": "password"
}
}
}

Not authenticated.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
code
required

Stable machine code.

string
Allowed values: bad_request body_too_large bad_if_match unauthenticated invalid_credentials signup_closed invite_required waitlist_unavailable invalid_token token_expired token_used session_required insufficient_scope csrf_rejected not_found version_mismatch ip_conflict unknown_list too_many_rules validation_failed rate_limited internal node_revoked node_offline node_busy node_timeout node_error result_too_large shape_unsupported node_token_superseded relay_unavailable not_implemented query_timeout query_too_expensive range_too_large too_many_queries second_factor_required invalid_second_factor mfa_enrolment_required mfa_required reauth_required no_second_factor totp_already_enabled totp_not_enabled last_credential passkey_exists passkey_invalid passkeys_unavailable ceremony_invalid account_pending_deletion credential_required deletion_pending no_deletion_pending deletion_started organisation_has_members export_in_progress export_not_ready block_exists invalid_recovery_code profile_not_empty invalid_cursor bad_idempotency_key idempotency_key_reused idempotency_in_progress too_many_streams too_many_reports password_too_short password_too_long profile_suspended
detail
string
errors
Array<object>
object
field
required
string
message
required
string
request_id
string
retry_after

Seconds, repeating the Retry-After header (rate limits, offline nodes).

integer
Example
{
"type": "https://opdns.io/problems/unauthenticated",
"title": "Unauthorized",
"status": 401,
"code": "unauthenticated",
"detail": "authentication required",
"request_id": "5f2c9a0e7b1d4c38"
}

Authenticated but not allowed: insufficient_scope, session_required, csrf_rejected, mfa_enrolment_required (restricted session), mfa_required (an operator action, or an admin-scoped token, from a session signed in with the password alone; not in dev), reauth_required (sign in again within five minutes), account_pending_deletion (the account is in its deletion cooling-off).

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
code
required

Stable machine code.

string
Allowed values: bad_request body_too_large bad_if_match unauthenticated invalid_credentials signup_closed invite_required waitlist_unavailable invalid_token token_expired token_used session_required insufficient_scope csrf_rejected not_found version_mismatch ip_conflict unknown_list too_many_rules validation_failed rate_limited internal node_revoked node_offline node_busy node_timeout node_error result_too_large shape_unsupported node_token_superseded relay_unavailable not_implemented query_timeout query_too_expensive range_too_large too_many_queries second_factor_required invalid_second_factor mfa_enrolment_required mfa_required reauth_required no_second_factor totp_already_enabled totp_not_enabled last_credential passkey_exists passkey_invalid passkeys_unavailable ceremony_invalid account_pending_deletion credential_required deletion_pending no_deletion_pending deletion_started organisation_has_members export_in_progress export_not_ready block_exists invalid_recovery_code profile_not_empty invalid_cursor bad_idempotency_key idempotency_key_reused idempotency_in_progress too_many_streams too_many_reports password_too_short password_too_long profile_suspended
detail
string
errors
Array<object>
object
field
required
string
message
required
string
request_id
string
retry_after

Seconds, repeating the Retry-After header (rate limits, offline nodes).

integer
Example
{
"type": "https://opdns.io/problems/insufficient_scope",
"title": "Forbidden",
"status": 403,
"code": "insufficient_scope",
"detail": "the token lacks the profiles:write scope",
"request_id": "5f2c9a0e7b1d4c38"
}