Skip to content

Add stablecoin issuance API surface#578

Draft
kphurley7 wants to merge 1 commit into
mainfrom
kph/stablecoin-issuance-spec
Draft

Add stablecoin issuance API surface#578
kphurley7 wants to merge 1 commit into
mainfrom
kph/stablecoin-issuance-spec

Conversation

@kphurley7

@kphurley7 kphurley7 commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Important

Do not merge until the webdev implementation stack (lightsparkdev/webdev#28785 → #28734) has merged and the feature is ready to light up. Merging here publishes the endpoints: the nightly docs-sync workflow picks up openapi/ changes on main and the Stainless-documented spec feeds the public docs/SDKs. This PR stays draft until launch readiness.

Summary

Companion spec PR for the Brale stablecoin issuance stack in webdev (implementation: the flow-sliced stack starting at lightsparkdev/webdev#28785). Adds to the split OpenAPI source (openapi/):

  • 12 paths under openapi/paths/stablecoins/: provider account links, stablecoin registration/list/get, external-account link sessions + linking (Plaid / direct bank entry / Grid external account), mint+burn quote create/get/execute, operations list/get.
  • 48 schemas under openapi/components/schemas/stablecoins/: typed discriminated requests (quote operation types, mint funding sources, link methods), typed destination oneOf on quote/operation, payout-rail subset enum, list envelopes.
  • Stablecoin error codes added to Error400/Error404/Error409 enums (the generated clients hard-reject unknown codes, so these must ship before the backend returns them).
  • Stablecoins tag.

Bundle regenerated with make build; Redocly validation clean; spectral passes at --fail-severity=error.

Verification

The rebuilt bundle's stablecoin paths/schemas and error enums are deep-equal to the spec vendored in the webdev stack tip (verified programmatically). The only non-stablecoin delta vs that copy is ExchangeRateFees.total, which exists here and not yet in webdev's vendored copy (pre-existing drift; webdev picks it up on its next update_schema.sh sync).

🤖 Generated with Claude Code

Stablecoin issuance endpoints for the Grid API: provider account links,
stablecoin registration, external accounts (Plaid link sessions, direct
bank entry, Grid external accounts), mint/burn quotes and execution, and
operations. Adds the stablecoin error codes to the Error400/404/409
enums and the Stablecoins tag.

Spec source of truth for the webdev implementation stack starting at
lightsparkdev/webdev#28029, which vendors this spec and generates the
grid_api client from it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
grid-flow-builder Ignored Ignored Preview Jun 12, 2026 8:33pm

Request Review

@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

✱ Stainless preview builds for grid

This PR will update the grid SDKs with the following commit messages.

cli

chore(internal): regenerate SDK with no functional changes

csharp

chore(internal): regenerate SDK with no functional changes

go

chore(internal): regenerate SDK with no functional changes

kotlin

chore(internal): regenerate SDK with no functional changes

openapi

feat: Add stablecoin issuance API surface

php

chore(internal): regenerate SDK with no functional changes

python

chore(internal): regenerate SDK with no functional changes

ruby

chore(internal): regenerate SDK with no functional changes

typescript

chore(internal): regenerate SDK with no functional changes

Edit this comment to update them. They will appear in their respective SDK's changelogs.

grid-openapi studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ✅

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-ruby studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ✅build ⏭️ (prev: build ✅) → lint ✅test ✅

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-typescript studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ✅build ⏭️ (prev: build ✅) → lint ⏭️ (prev: lint ✅) → test ✅

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-go studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ✅build ⏭️ (prev: build ✅) → lint ❗test ❗

go get github.com/stainless-sdks/grid-go@390f6c91bd184b4f84343e4cff414c7dd74f2a16
New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-kotlin studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ✅build ⏭️ (prev: build ✅) → lint ⏭️ (prev: lint ✅) → test ✅

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-python studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ✅build ⏭️ (prev: build ✅) → lint ⏭️ (prev: lint ❗) → test ❗

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-csharp studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ⚠️build ⏭️ (prev: build ❗) → lint ⏭️ (prev: lint ✅) → test ❗

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-php studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ✅lint ✅test ✅

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`
grid-cli studio · code · diff

Your SDK build had at least one new note diagnostic, which is a regression from the base state.
generate ⚠️build ❗lint ❗test ❗

New diagnostics (15 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-provider-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-provider-accounts/{stablecoinProviderAccountId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoins`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoins/{stablecoinId}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-account-link-sessions`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /stablecoin-external-accounts`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /stablecoin-external-accounts/{stablecoinExternalAccountId}`

This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push.
If you push custom code to the preview branch, re-run this workflow to update the comment.
Last updated: 2026-06-12 20:37:16 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant