Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 6 additions & 5 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ description: >-
`POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` credentials the
body is a plain `AuthMethod` (wrapped as `AuthMethodResponse` to
disambiguate the oneOf). For `PASSKEY` credentials the body is a
`PasskeyAuthChallenge` — the base `AuthMethod` fields plus the
Grid-issued `challenge`, `requestId`, and `expiresAt` that drive the
subsequent assertion. OAuth credentials do not use the challenge endpoint.
`PasskeyAuthChallenge` — the passkey auth method fields plus the
WebAuthn `credentialId`, Grid-issued `challenge`, `requestId`, and
`expiresAt` that drive the subsequent assertion. OAuth credentials do not
use the challenge endpoint.
Registration responses from `POST /auth/credentials` use the simpler
`AuthMethodResponse` shape directly for all three credential types.
oneOf:
Expand Down
15 changes: 7 additions & 8 deletions openapi/components/schemas/auth/PasskeyAuthChallenge.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
title: Passkey Auth Challenge
description: >-
Extended `AuthMethod` shape returned for `PASSKEY` credentials from
`POST /auth/credentials` (first-authentication case) and
`POST /auth/credentials/{id}/challenge` (reauthentication case). Adds a
Grid-issued `challenge`, the corresponding `requestId`, and the
challenge's `expiresAt` to the base `AuthMethod` fields. The client signs
the challenge with the passkey to produce the assertion submitted to
`POST /auth/credentials/{id}/verify`.
Extended passkey auth method shape returned for `PASSKEY` credentials from
`POST /auth/credentials/{id}/challenge`. Includes the WebAuthn
`credentialId` needed to target the passkey, plus the Grid-issued
`challenge`, corresponding `requestId`, and challenge `expiresAt`. The
client signs the challenge with the passkey to produce the assertion
submitted to `POST /auth/credentials/{id}/verify`.
allOf:
- $ref: ./AuthMethod.yaml
- $ref: ./PasskeyAuthMethod.yaml
- type: object
required:
- challenge
Expand Down
19 changes: 11 additions & 8 deletions openapi/paths/auth/auth_credentials_{id}_challenge.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@ post:
client's ephemeral `clientPublicKey` so Grid can bake it into the
Turnkey session-creation payload the returned challenge is computed
from — this seals the resulting session signing key to the client.
The response is a `PasskeyAuthChallenge` — the base `AuthMethod`
fields plus the new `challenge`, `requestId`, and `expiresAt`. The
client passes the `challenge` into `navigator.credentials.get()` and
submits the resulting assertion to `POST /auth/credentials/{id}/verify`
with `Request-Id: <requestId>` to receive a session.
The response is a `PasskeyAuthChallenge` — the passkey auth method
fields plus the WebAuthn `credentialId`, new `challenge`, `requestId`,
and `expiresAt`. The client passes `credentialId` as
`allowCredentials[].id` and `challenge` as the WebAuthn challenge in
`navigator.credentials.get()`, then submits the resulting assertion to
`POST /auth/credentials/{id}/verify` with `Request-Id: <requestId>` to
receive a session.
operationId: challengeAuthCredential
tags:
- Embedded Wallet Auth
Expand Down Expand Up @@ -67,9 +69,9 @@ post:
Challenge re-issued for the authentication credential. For
`EMAIL_OTP` the body is a plain `AuthMethod` and a new OTP email
has been sent. For `PASSKEY` the body is a `PasskeyAuthChallenge`
carrying the freshly issued `challenge`, `requestId`, and
`expiresAt` required to complete reauthentication via
`POST /auth/credentials/{id}/verify`.
carrying the passkey `credentialId`, freshly issued `challenge`,
`requestId`, and `expiresAt` required to complete reauthentication
via `POST /auth/credentials/{id}/verify`.
content:
application/json:
schema:
Expand All @@ -90,6 +92,7 @@ post:
id: AuthMethod:019542f5-b3e7-1d02-0000-000000000001
accountId: InternalAccount:019542f5-b3e7-1d02-0000-000000000002
type: PASSKEY
credentialId: KEbWNCc7NgaYnUyrNeFGX9_3Y-8oJ3KwzjnaiD1d1LVTxR7v3CaKfCz2Vy_g_MHSh7yJ8yL0Pxg6jo_o0hYiew
nickname: iPhone Face-ID
createdAt: '2026-04-08T15:30:01Z'
updatedAt: '2026-04-08T15:35:00Z'
Expand Down
Loading