Aller au contenu principal

Passwordless email sign-in

Request and consume a one-time email sign-in code. Request responses do not reveal whether an account exists. Verify availability before integrating.

API conventions · All endpoints · Schemas

Request an application-user email login code.

Availability note: standalone access with the credential described below has a known authentication limitation. Check integration availability before relying on this operation. If it returns an unexpected 401, contact support with the endpoint and sanitized response.

POST​

Required email string; optional oauth_client tenant context and redirect_uri. Valid-shaped requests return a generic message to avoid revealing account existence. See the availability note before integrating.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodyoauth_clientnot supplied
bodyredirect_urinot supplied
bodyemailnot supplied

Example request body:


{
"email": "[email protected]",
"oauth_client": "PUBLIC_CLIENT_ID"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"message": "If that email exists, a login link has been sent."
}

400 — json


{
"error": "email is required"
}

Exchange an emailed code for application tokens or an MFA ticket.

Availability note: standalone access with the credential described below has a known authentication limitation. Check integration availability before relying on this operation. If it returns an unexpected 401, contact support with the endpoint and sanitized response.

POST​

Required JSON email and code; keep original oauth_client context. Code is single-use and expires. MFA-enabled users must finish the challenge before tokens are issued.

Request fields (combine with the requirements and schema above):

LocationFieldFallback when absent
bodyoauth_clientnot supplied
bodycodenot supplied
bodyemailnot supplied

Related schemas: User.

Example request body:


{
"email": "[email protected]",
"code": "MAGIC_LINK_CODE",
"oauth_client": "PUBLIC_CLIENT_ID"
}

Success and error response examples

Illustrative values; conditional branches are alternatives. Fields vary with the operation and account configuration.

200 — json


{
"user": {
"id": "11111111-1111-4111-8111-111111111111",
"email": "[email protected]",
"first_name": "Example",
"last_name": "Example",
"company": "EXAMPLE_COMPANY",
"website": "https://app.example.test/callback",
"country": "EXAMPLE_COUNTRY",
"job_title": "EXAMPLE_JOB_TITLE",
"phone_number": "EXAMPLE_PHONE_NUMBER",
"email_verified": true,
"created_at": "2026-10-26T12:00:00Z",
"updated_at": "2026-10-26T12:00:00Z",
"last_login": "2026-10-26T12:00:00Z",
"created_via_api_key": "EXAMPLE_CREATED_VIA_API_KEY",
"developer_id": "EXAMPLE_DEVELOPER_ID",
"workspace": "11111111-1111-4111-8111-111111111111",
"oauth_client": "11111111-1111-4111-8111-111111111111"
},
"token": "EXAMPLE_TOKEN",
"refresh_token": "EXAMPLE_REFRESH_TOKEN",
"message": "Login successful"
}

200 — json


{
"mfa_required": true,
"mfa_ticket": "EXAMPLE_MFA_TICKET",
"mfa_methods": []
}

400 — json


{
"error": "email and code are required"
}

400 — json


{
"error": "Invalid or expired code"
}