docs(cards): panEmbedUrl is nullable and minted only on GET /cards/{id}#654
docs(cards): panEmbedUrl is nullable and minted only on GET /cards/{id}#654ls-bolt[bot] wants to merge 1 commit into
Conversation
Make Card.panEmbedUrl nullable in the OpenAPI schema and document the fetch-on-demand reveal pattern: the signed URL is populated only on the single-card GET, is short-lived, and must be fetched right before rendering the PAN-reveal iframe. Update the issuing-cards, quickstart, webhooks, and terminology docs (and the CARD.STATE_CHANGE webhook example) that previously showed panEmbedUrl arriving populated in the webhook payload. Follow-up #2 from webdev#29877. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 2 Skipped Deployments
|
|
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 Edit this comment to update them. They will appear in their respective SDK's changelogs. ✅ grid-cli studio · code · diff
✅ grid-openapi studio · code · diff
✅ grid-php studio · code · diff
✅ grid-go studio · code · diff
✅ grid-ruby studio · code · diff
✅ grid-kotlin studio · code · diff
|
|
Preview deployment for your docs. Learn more about Mintlify Previews.
|
|
📌 Bolt Status 2026-07-06 23:42:57 UTC — |
|
Re: the oasdiff breaking-change notice — the nullability flags on the four card endpoints are intentional and codify existing runtime behavior rather than changing it. The server already returns The |

Summary
Follow-up #2 from webdev#29877 (Lithic card PAN-reveal POC) — brings the public docs in line with the actual reveal model: the signed
panEmbedUrlis minted only onGET /cards/{id}, is short-lived (~5 min TTL), and is null everywhere else (list/create/update responses and webhook payloads).openapi/components/schemas/cards/Card.yaml—panEmbedUrlis now nullable (type: [string, 'null']), with a description stating it's populated only on the single-card GET, is short-lived, and should be fetched right before rendering the iframe (never cached).openapi/paths/cards/cards_{id}.yaml—GET /cards/{id}description now calls out that it's the only endpoint that mints a freshpanEmbedUrl.mintlify/snippets/cards/issuing-cards.mdx(rendered bymintlify/cards/card-management/issuing-cards.mdx, which just imports the snippet) — removedpanEmbedUrlfrom the fields theCARD.STATE_CHANGEwebhook delivers; added a "Revealing the PAN" section with the fetch-on-demand pattern.mintlify/snippets/cards/webhooks.mdxandquickstart.mdx(webhook example payloads now showpanEmbedUrl: null; reveal notes rewritten to fetch-on-demand),terminology.mdx(PAN embed URL definition mentions single-GET-only + short-lived), and theactivatedexample inopenapi/webhooks/card-state-change.yaml.Verification
make build— rebundledopenapi.yaml+mintlify/openapi.yaml(both included).make lint— passes with 0 errors; remaining warnings/infos are pre-existing on main (verified by diffing against a baseline lint run onmain).🤖 thundering-graviton(#1) | Feedback