API Reference
OIDC
Platform

Client Me

AdminUpdated Sep 11, 2026

Client Me

Frontend API — publishable key (x-publishable-key) plus the user session.

54 routes. Each row is one endpoint with its explanation and whether it honours the Idempotency-Key header.

Method & path

Idem

Explanation

POST /v1/client/me/avatar

Upload the signed-in user's avatar. The RAW image bytes are the body (Content-Type image/png|jpeg|gif|webp), validated by magic number; sets the user's image_url. Returns 503 when image storage is not configured.

GET /v1/client/me/passkeys

List the signed-in user passkeys. Never returns credential material.

POST /v1/client/me/passkeys/begin

Options for navigator.credentials.create, with a single-use challenge.

POST /v1/client/me/passkeys/finish

Verify and store a new passkey. Requires a session.

PATCH /v1/client/me/passkeys/:id

Rename a passkey so the user can tell their devices apart.

DELETE /v1/client/me/passkeys/:id

Remove a passkey. Another user passkey id is 404, never 403.

GET /v1/client/me/trusted_devices

List browsers trusted to skip 2FA . Never returns the token hash.

DELETE /v1/client/me/trusted_devices/:id

Revoke one trusted device; its next sign-in must pass 2FA again.

DELETE /v1/client/me/trusted_devices

Revoke every trusted device for the signed-in user.

GET /v1/client/me/oauth_grants

List the third-party apps this user authorized (Sign in with <Tenant>).

DELETE /v1/client/me/oauth_grants/:id

Disconnect an authorized app: forget consent and revoke its live tokens.

GET /v1/client/me

The signed-in user with emails, linked accounts and passkeys.

POST /v1/client/me/api_tokens

Mint a scoped personal access token (uat_) so an agent or script can drive your own account over the me-surface with a bearer header. Session-only; the one-time secret is shown exactly once.

GET /v1/client/me/api_tokens

List your own personal access tokens with their scopes, expiry and last-used time. Never returns a secret or its hash.

DELETE /v1/client/me/api_tokens/:id

Revoke one of your own personal access tokens. Revocation is immediate and a revoked token fails closed on every later use.

GET /v1/client/me/mcp

Discover the user-scoped MCP tools your personal access token can use, plus the recommended scope set for an account-management agent.

POST /v1/client/me/mcp

JSON-RPC MCP endpoint: manage your own account as MCP tools (read/update profile, list sessions, revoke-all, list factors and more), authenticated by a personal access token.

POST /v1/client/me/data_export

Request an export of your own data (Article 15/20). Creates an async job; poll for the produced package. Rate-limited: one in flight, and a cooldown between requests.

GET /v1/client/me/data_export

List your own data-export requests and their status.

GET /v1/client/me/data_export/:id

A data-export request with, once ready, the produced package — your profile, emails, linked accounts, memberships and more, with no password hash, token or secret.

POST /v1/client/me/deletion_request

Request erasure of your own account (Article 17). Scheduled after a grace/cancellation window, then fulfilled through the same soft-delete + PII-purge path a backend user-delete uses.

GET /v1/client/me/deletion_request

List your own erasure requests and their status.

POST /v1/client/me/deletion_request/:id/cancel

Cancel a pending erasure within the grace window. A fulfilled one is a 409.

DELETE /v1/client/me/deletion_request/:id

Cancel a pending erasure within the grace window (alias of /cancel).

PATCH /v1/client/me

Update profile and unsafe_metadata. public_metadata is refused.

POST /v1/client/me/change_password

Change your password. Verifies the current one, applies the sign-up policy, and revokes other sessions.

POST /v1/client/me/set_password

Set a first password on an account that has none (anonymous guest or OAuth-only). Applies the sign-up policy; may graduate a guest to a permanent account.

POST /v1/client/me/email_addresses

Add an address. Starts unverified and sends a code.

POST /v1/client/me/email_addresses/:id/attempt_verification

Verify an added address with its emailed code.

POST /v1/client/me/email_addresses/:id/primary

Make a verified address primary. Unverified addresses are refused.

DELETE /v1/client/me/email_addresses/:id

Remove an address. Removing the last verified one is refused.

DELETE /v1/client/me/external_accounts/:id

Unlink a provider. Removing the only sign-in method is refused.

GET /v1/client/me/external_accounts/:provider/token

The signed-in user's own provider access token, refreshed single-flight if stale. Never returns the refresh token.

POST /v1/client/me/external_accounts/connect

Start an OAuth flow to link a NEW provider to the signed-in user (for a custom "Connect GitHub" button); returns the authorize URL. Binds to the current user, so no new session and no email resolution.

POST /v1/client/me/external_accounts/:id/reauthorize

Re-initiate the provider OAuth flow to request additional scopes for a linked account; returns the authorize URL. On callback the account scopes/token update.

POST /v1/client/me/external_accounts/:id/revoke

Revoke the stored provider token (best-effort at the provider) and clear it locally WITHOUT unlinking the account.

GET /v1/client/me/organizations

Organization memberships for the signed-in user.

POST /v1/client/me/organization_membership_requests

Request to join an organization whose verified domain matches your verified email.

GET /v1/client/me/organization_suggestions

Organizations you could join, discovered via your verified email domain.

POST /v1/client/me/organization_suggestions/:organizationId/accept

Accept a suggestion, creating a pending join request an admin then decides.

GET /v1/client/me/mfa

List the signed-in user second factors. Never returns secrets or codes.

POST /v1/client/me/reauthenticate

Step-up re-authentication: re-prove a credential (strategy "password" or "id_token") to refresh the session step-up window in place — no sign-out — so the next 2FA change is permitted. An id_token must already be linked to this user; it never attaches a new identity.

POST /v1/client/me/mfa/totp

Begin authenticator enrollment. Returns the secret exactly once.

POST /v1/client/me/mfa/totp/:id/verify

Confirm enrollment with a code, and receive recovery codes once.

POST /v1/client/me/mfa/sms

Enroll a phone as an SMS second factor. Texts a code; returns the number masked.

POST /v1/client/me/mfa/sms/:id/verify

Confirm SMS enrollment with the texted code, and receive recovery codes once.

POST /v1/client/me/mfa/push

Register a device for in-house push MFA. Pushes a number-matching challenge; never returns the device token.

GET /v1/client/me/mfa/push

List registered push devices. Never returns the raw device token.

POST /v1/client/me/mfa/push/challenges/:id/respond

Device approve/deny + selected number for a push challenge (enrollment or sign-in).

DELETE /v1/client/me/mfa/push/:deviceId

Remove a push device. Removing the last verified one removes the push factor.

POST /v1/client/me/mfa/backup_codes

Issue a fresh set of recovery codes, invalidating the previous set.

DELETE /v1/client/me/mfa/:id

Remove a factor. Removing the last one also drops recovery codes.

GET /v1/client/me/backchannel_requests

List the current user’s pending CIBA backchannel approval requests.

POST /v1/client/me/backchannel_requests/:id

Approve or deny a pending CIBA backchannel request (session-only; a PAT cannot approve).

Was this page helpful?
Client Me