docs: allow multiple passkey credentials#479
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Preview deployment for your docs. Learn more about Mintlify Previews.
|
This stack of pull requests is managed by Graphite. Learn more about stacking. |
✱ Stainless preview builds for gridThis PR will update the cli csharp go kotlin openapi php python ruby typescript ✅ grid-ruby studio · code
|
Greptile SummaryThis PR updates the authentication credential documentation to reflect that multiple distinct
Confidence Score: 5/5Documentation-only change with no application logic; all updated descriptions are consistent across source and bundled files. All five changed files are documentation or generated spec bundles. The credential-limit semantics are updated consistently in the source YAML, the bundled root spec, the Mintlify bundle, and the MDX snippet. No logic, migrations, or API behaviour is altered. No files require special attention.
|
| Filename | Overview |
|---|---|
| openapi/paths/auth/auth_credentials.yaml | Endpoint description updated to allow multiple distinct PASSKEY credentials; 400 response description updated to clarify per-credentialId uniqueness constraint. |
| openapi/components/schemas/errors/Error400.yaml | Updated PASSKEY_CREDENTIAL_ALREADY_EXISTS description to reflect WebAuthn credentialId-scoped uniqueness; EMAIL_OTP entry unchanged. |
| mintlify/snippets/global-accounts/authentication.mdx | Updated credential multiplicity docs: one EMAIL_OTP, multiple distinct PASSKEYs, OAUTH per provider; backup credential guidance now recommends adding a second passkey. |
| openapi.yaml | Bundled root spec regenerated from source; changes are identical to source files. |
| mintlify/openapi.yaml | Bundled Mintlify spec regenerated from source; changes are identical to source files. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[POST /auth/credentials] --> B{Credential type?}
B --> |EMAIL_OTP| C{EMAIL_OTP already exists?}
B --> |PASSKEY| D{Same WebAuthn credentialId already registered?}
B --> |OAUTH| E[Add credential for provider identity]
C --> |Yes| F[400 EMAIL_OTP_CREDENTIAL_ALREADY_EXISTS]
C --> |No| G[202 → signed retry → 201 Created]
D --> |Yes| H[400 PASSKEY_CREDENTIAL_ALREADY_EXISTS]
D --> |No| I[202 → signed retry → 201 Created - Multiple distinct PASSKEYs allowed]
E --> J[202 → signed retry → 201 Created]
Reviews (4): Last reviewed commit: "docs: allow multiple passkey credentials" | Re-trigger Greptile
| | **`EMAIL_OTP`** | Lowest-friction option. Works on any device with email access — no biometric hardware, identity provider, or client SDK required beyond the code entry field. | | ||
|
|
||
| A single internal account can hold one credential of each type concurrently. Only one `PASSKEY` and one `EMAIL_OTP` per account in v1. | ||
| A single internal account can hold one `EMAIL_OTP` credential and multiple distinct `PASSKEY` credentials concurrently. `OAUTH` credentials can be added for each supported provider identity. |
There was a problem hiding this comment.
Unverified OAUTH multiplicity claim
The new sentence — "OAUTH credentials can be added for each supported provider identity" — is a behavioral assertion that isn't corroborated by any change in the API error codes or the OpenAPI spec. The old text implied one credential of each type; this PR only updates the PASSKEY constraint with a matching PASSKEY_CREDENTIAL_ALREADY_EXISTS clarification. If the OAUTH limit is also provider-scoped (i.e., one per provider rather than one total), there should be a corresponding error-code description (or at least a note in the API spec) backing this claim. Without it, a developer who tries to register a second OAUTH credential and hits an undocumented error will be confused by the mismatch between docs and API behavior.
Prompt To Fix With AI
This is a comment left during a code review.
Path: mintlify/snippets/global-accounts/authentication.mdx
Line: 9
Comment:
**Unverified OAUTH multiplicity claim**
The new sentence — "OAUTH credentials can be added for each supported provider identity" — is a behavioral assertion that isn't corroborated by any change in the API error codes or the OpenAPI spec. The old text implied one credential of each type; this PR only updates the PASSKEY constraint with a matching `PASSKEY_CREDENTIAL_ALREADY_EXISTS` clarification. If the OAUTH limit is also provider-scoped (i.e., one per provider rather than one total), there should be a corresponding error-code description (or at least a note in the API spec) backing this claim. Without it, a developer who tries to register a second OAUTH credential and hits an undocumented error will be confused by the mismatch between docs and API behavior.
How can I resolve this? If you propose a fix, please make it concise.There was a problem hiding this comment.
The new sentence is true
399d0f1 to
e08f4d3
Compare
9f62ede to
bd0067a
Compare
e08f4d3 to
bd061b8
Compare
bd061b8 to
573b869
Compare
bd0067a to
36bc92e
Compare
b8de8b4 to
1f8fc66
Compare
573b869 to
50b7be6
Compare
1f8fc66 to
5a69756
Compare
50b7be6 to
10f3b16
Compare
The base branch was changed.
Summary: - Update auth credential OpenAPI source to describe one EMAIL_OTP credential and multiple distinct PASSKEY credentials. - Update PASSKEY_CREDENTIAL_ALREADY_EXISTS docs to mean duplicate WebAuthn credentialId rather than one-passkey-per-account. - Update Global Accounts authentication docs to recommend backup credentials including additional passkeys. - Rebuild bundled openapi.yaml and mintlify/openapi.yaml. Test Plan: - make build - make lint - git diff --check
10f3b16 to
e21d72e
Compare
## Summary - Update Global Accounts sandbox docs to explain that OAuth no longer uses the fixed `sandbox-valid-oidc-token` value. - Document the sandbox OIDC token requirements: JWT-shaped token, supported issuer, `aud`/`sub`, fresh `iat`/`exp`, stored `iss`/`aud`/`sub` identity matching, and `nonce = sha256(clientPublicKey)` on verify. - Clarify that sandbox can use supported-provider ID tokens, while unsigned JWT-shaped tokens are only a sandbox test-token option. - Update the auth OpenAPI descriptions and rebuild the bundled `openapi.yaml` and `mintlify/openapi.yaml`. ## Stack - Base docs stack: #476 -> #477 -> #479 -> #481. - This PR is the first sandbox-auth docs PR on top of that auth cleanup stack. - Follow-up: #489 adds the sandbox email OTP inbox endpoint docs. ## Context This matches the Grid behavior from the OIDC auth-method identity stack: - `dp/grid-oidc-auth-method-identity` - `dp/grid-realistic-oidc-sandbox` - `dp/grid-verify-oauth-oidc-identity` The important customer-facing change is that sandbox no longer accepts a fixed OAuth magic token. It validates the same identity/freshness shape integrators need in production, while still skipping real IdP signature verification in the mock Turnkey path. ## Test Plan - `npm run lint`

Summary
EMAIL_OTPcredential and multiple distinctPASSKEYcredentials.credentialId.Test Plan
make buildnpm run lintgit diff --check