docs(cards): document the optional 3DS password on card create - #786
docs(cards): document the optional 3DS password on card create#786kphurley7 wants to merge 1 commit into
Conversation
Grid already accepts threeDSecurePassword on POST /cards and forwards it to the issuer, but the field was absent from the spec, so it reached no SDK and no docs - discoverable only by being told about it. The name trips field-names-camelCase because of the consecutive capitals in "3DS", which is the industry spelling and matches the issuer's own request field. Renaming would break a contract Grid already honors, so this exempts the single property rather than the schema, alongside the existing TestWebhookResponse carve-out. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JsJUrc9YRcfxEFqgXQEYvD
|
The latest updates on your projects. Learn more about Vercel for GitHub. 2 Skipped Deployments
|
✱ Stainless preview builds for gridThis PR will update the cli go kotlin openapi php python ruby typescript Edit this comment to update them. They will appear in their respective SDK's changelogs. ✅ grid-typescript studio · code · diff
✅ grid-openapi studio · code · diff
✅ grid-ruby studio · code · diff
✅ grid-go studio · code · diff
✅ grid-kotlin studio · code · diff
|
Greptile SummaryDocuments the existing optional 3-D Secure password accepted by card creation.
Confidence Score: 5/5The PR appears safe to merge, with the source schema, generated bundles, and narrowly scoped lint exemption aligned. The change documents an existing optional request field consistently across the canonical schema and generated outputs, and no concrete contract, build, or security failure was identified.
|
| Filename | Overview |
|---|---|
| .spectral.yaml | Adds a property-specific exemption for the intentionally nonstandard threeDSecurePassword wire name without weakening naming checks elsewhere. |
| openapi/components/schemas/cards/CardCreateRequest.yaml | Documents the optional request-only password, its issuer restrictions, generated default, and non-retention semantics. |
| openapi.yaml | Keeps the generated root bundle synchronized with the canonical card request schema. |
| mintlify/openapi.yaml | Keeps the generated Mintlify OpenAPI bundle synchronized with the canonical schema and root bundle. |
Reviews (1): Last reviewed commit: "docs(cards): document the optional 3DS p..." | Re-trigger Greptile
|
Preview deployment for your docs. Learn more about Mintlify Previews.
|
Grid already accepts
threeDSecurePasswordonPOST /cardsand forwards it to the issuer, but the field was absent from the spec — so it reached no SDK and no documentation, and was discoverable only by being told about it. That is a poor property for a security-relevant field, so this documents it.What it does
threeDSecurePasswordtoCardCreateRequest.openapi.yamlandmintlify/openapi.yaml.Documented semantics, matching the current implementation:
INVALID_INPUT— the US/Lithic program has no such factor, and silently dropping a caller-supplied secret would be worse than refusing it.The lint exemption
The name trips
field-names-camelCasebecause of the consecutive capitals in "3DS". That spelling is the industry one and matches the issuer's own request field, and Grid already honors it on the wire, so renaming would break a live contract to satisfy a naming rule.Rather than exclude the whole schema, this adds a spectral
overridesblock scoped to the single property, alongside the existingTestWebhookResponsecarve-out.field-names-camelCasestill applies to every other field onCardCreateRequest.Verification
npm run lint:openapiexits 0. Confirmed the exemption is doing real work rather than masking: spectral reports 0 errors on main, 1 error (field-names-camelCaseon this property) with the field added and no override, and 0 errors with the override. The field is present in both generated bundles.Follow-up
Worth deciding separately whether the handler should keep accepting a caller-supplied password at all, or always generate one. There is no strength validation on the Grid side today — the issuer's validator is the only gate.