Skip to content

feat(sca): add Strong Customer Authentication surface#558

Open
jklein24 wants to merge 10 commits into
mainfrom
feat/striga-sca
Open

feat(sca): add Strong Customer Authentication surface#558
jklein24 wants to merge 10 commits into
mainfrom
feat/striga-sca

Conversation

@jklein24

@jklein24 jklein24 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Summary

The per-transaction SCA authorization surface — everything needed to gate and authorize an EU (Striga) money-movement debit with an SMS OTP or passkey. This is the compliance-critical core of the Striga SCA work and the base of the grid-api SCA stack; the management surface (#600) stacks on top, and the sparkcore backend lands separately. Designed to stay invisible to every non-SCA (non-EU) caller.

Covered by this PR

Shared SCA vocabulary (defined here, reused by the whole stack):

  • ScaFactor (SMS_OTP / TOTP / PASSKEY)
  • ScaChallenge (id, expiresAt, factor, availableFactors, passkeyAssertionOptions, passkeyAllowedOrigins)
  • ScaAuthorization (exactly one of code / passkeyAssertion; origin required with a passkey assertion)

Per-transaction authorization:

  • PENDING_AUTHORIZATION status + readOnly scaChallenge on Quote and Transaction (incl. the OutgoingTransactionStatus override) — omitted entirely for non-SCA providers.
  • Resource-scoped authorize endpoints: POST /quotes/{id}/authorizeQuote, POST /transactions/{id}/authorizeTransaction (both 409 for non-SCA providers).
  • SMS code re-send: POST /quotes/{id}/authorize/resend, POST /transactions/{id}/authorize/resend.
  • Inline one-shot proof: optional scaAuthorization on execute / transfer-out (satisfy the challenge in the same call).
  • Optional scaFactor on execute / transfer-out to pick SMS_OTP (default) or PASSKEY for the per-transaction challenge.

NOT in this PR — see #600 (stacked on top)

The SCA management surface (customer-level setup/recovery, not per-payment authorization) lives in #600 and reuses the schemas defined here:

  • Factor enrollment — TOTP + passkey register / list / delete
  • Login / 180-day sessionsca/login/start|complete
  • Beneficiary trust whitelisting — external-accounts/{id}/trust, .../untrust/confirm
  • 2FA reset / recovery — liveness-gated
  • Security-event recording — sca/record-event

Also out of scope: the sparkcore backend (separate stack) and any client-side WebAuthn ceremony logic (Grid relays opaque passkey blobs; it performs no crypto).

Known caveat

  • The realtime-funding 202 + withheld-paymentInstructions path on POST /quotes is specified here but not yet reachable — the backend defers it (Striga has no Grid realtime-funding path today; see design doc addendum item F6 / open question 2). It's documented so the contract is stable; treat it as inert until that flow ships.

Stacking

main#558 (this PR)#600 (management). #558 is self-contained and independently mergeable — SMS-OTP authorization needs no enrollment or login — so it can merge to main on its own. #600 depends on the ScaFactor / ScaChallenge / ScaAuthorization schemas introduced here.

Invisibility guarantee

scaChallenge, PENDING_AUTHORIZATION, the authorize/resend endpoints, and scaFactor engage only for customers whose provider requires SCA. Non-EU callers see no new fields, no new statuses, and no behavioral change.

Validation

npm run lint:openapi (redocly + spectral) passes; additions are additive / non-breaking ("Detect breaking changes" CI green).

Design

webdev docs/plans/2026-06-06-striga-sca-design.md

🤖 Generated with Claude Code

@vercel

vercel Bot commented Jun 8, 2026

Copy link
Copy Markdown

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

2 Skipped Deployments
Project Deployment Actions Updated (UTC)
grid-flow-builder Ignored Ignored Preview Jul 16, 2026 7:49am
grid-wallet-demo Ignored Ignored Preview Jul 16, 2026 7:49am

Request Review

@jklein24

jklein24 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

@greptile review

@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

✱ Stainless preview builds for grid

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

cli

feat(api): add sca-authorization parameter to transfer-out, quotes execute methods

go

feat(api): add SCA authorization params, scaChallenge fields, PENDING_AUTHORIZATION status

kotlin

feat(api): add scaChallenge/scaAuthorization for SCA to quotes/transactions

openapi

feat(api): add SCA authorize endpoints, scaChallenge/scaAuthorization to quotes/transactions

php

feat(api): add scaAuthorization param, scaChallenge field, PENDING_AUTHORIZATION status

python

feat(api): add sca_authorization param to quotes/transfers, sca_challenge to transaction types

ruby

feat(api): add sca_authorization param, sca_challenge to quotes/transactions/transfer_out

typescript

feat(api): add Strong Customer Authentication support to quotes/transfers

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 (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`
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 ✅lint ✅test ✅

New diagnostics (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`
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 ✅lint ❗test ❗

go get github.com/stainless-sdks/grid-go@52626fd29e61f48435570c6eeeea27992124ba6f
New diagnostics (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`
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 ✅lint ✅test ❗

New diagnostics (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`
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 ✅lint ❗test ❗

pip install https://pkg.stainless.com/s/grid-python/d62875550f95797269188a9173404dc4395ca101/grid-0.0.1-py3-none-any.whl
New diagnostics (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`
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 ✅lint ❗test ✅

npm install https://pkg.stainless.com/s/grid-typescript/f7279c22e8c833469e4516ca6abee534d55fc02e/dist.tar.gz
New diagnostics (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`
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 (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`
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 (3 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `post /quotes/{quoteId}/authorize/resend`
💡 Model/Recommended: We recommend you use a model for `#/components/schemas/ScaChallenge`

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-07-16 07:54:17 UTC

@greptile-apps

greptile-apps Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

  /\_/\  ⚔ SCA STEEL ⚔  /\_/\
 ( ☠ )___\m/___( ☠ )

FORGE THE CHALLENGE; GUARD THE TRANSFER.

This PR adds the Strong Customer Authentication API surface for protected money movement. The main changes are:

  • Shared schemas for factors, challenges, and authorization proofs.
  • Pending authorization states on quotes and transactions.
  • Quote- and transaction-scoped authorize and resend endpoints.
  • Inline SMS or passkey authorization for execute and transfer-out calls.
  • Sequential challenge handling for operations that require multiple approvals.

Confidence Score: 5/5

This looks safe to merge.

  • The latest guidance resolves the reported execute-path ambiguity.
  • No additional blocking issue qualifies for this follow-up review.

Important Files Changed

Filename Overview
openapi/components/schemas/sca/ScaChallenge.yaml Defines challenge metadata, factor options, expiration, and sequential authorization behavior.
openapi/components/schemas/sca/ScaAuthorization.yaml Defines SMS, TOTP, and passkey authorization proof fields.
openapi/paths/quotes/quotes_{quoteId}_execute.yaml Adds inline authorization and documents the transaction-scoped flow after execution enters pending authorization.
openapi/paths/transactions/transactions_{transactionId}_authorize.yaml Adds transaction challenge authorization with support for sequential challenges.

Reviews (8): Last reviewed commit: "docs(sca): drop last 'provider' mention ..." | Re-trigger Greptile

Comment thread openapi/components/schemas/sca/ScaChallenge.yaml
Comment thread openapi/paths/quotes/quotes_{quoteId}_authorize.yaml
@jklein24

jklein24 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

@greptile review

Comment thread openapi/paths/quotes/quotes_{quoteId}_execute.yaml Outdated
@jklein24

jklein24 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

@greptile review

1 similar comment
@jklein24

jklein24 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

@greptile review

@jklein24

Copy link
Copy Markdown
Contributor Author

@greptile review

jklein24 added a commit that referenced this pull request Jun 17, 2026
Stacks on the per-transaction SCA spec (#558) and adds the remaining
Strong Customer Authentication surfaces an EU (Striga) partner needs, mirroring
the sparkcore handlers' exact routes + JSON shapes. All endpoints are EU-only
(409 for providers that don't require SCA).

- Factor enrollment: TOTP start/confirm, passkey register start/confirm,
  list factors, delete passkey.
- SCA login / 180-day session: login start/complete, plus record-event.
- Beneficiary trust: trust start (issues the SCA challenge + whitelistedId),
  trust/confirm and untrust/confirm (the whitelisting exemption that lets
  recurring payees skip per-transaction SCA).
- 2FA reset: initiate (201) -> poll status -> complete.

Reuses ScaFactor/ScaChallenge/ScaAuthorization from #558. Confirm/login bodies
carry the code|passkeyAssertion+origin proof; beneficiary confirm threads the
whitelistedId back so confirm never re-whitelists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jklein24

Copy link
Copy Markdown
Contributor Author

@greptile review

1 similar comment
@jklein24

Copy link
Copy Markdown
Contributor Author

@greptile review

jklein24 commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

jklein24 added a commit that referenced this pull request Jul 8, 2026
Stacks on the per-transaction SCA spec (#558) and adds the remaining
Strong Customer Authentication surfaces an EU (Striga) partner needs, mirroring
the sparkcore handlers' exact routes + JSON shapes. All endpoints are EU-only
(409 for providers that don't require SCA).

- Factor enrollment: TOTP start/confirm, passkey register start/confirm,
  list factors, delete passkey.
- SCA login / 180-day session: login start/complete, plus record-event.
- Beneficiary trust: trust start (issues the SCA challenge + whitelistedId),
  trust/confirm and untrust/confirm (the whitelisting exemption that lets
  recurring payees skip per-transaction SCA).
- 2FA reset: initiate (201) -> poll status -> complete.

Reuses ScaFactor/ScaChallenge/ScaAuthorization from #558. Confirm/login bodies
carry the code|passkeyAssertion+origin proof; beneficiary confirm threads the
whitelistedId back so confirm never re-whitelists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
jklein24 and others added 6 commits July 8, 2026 16:54
Adds the SCA surface required for EU (Striga) customers while keeping it
invisible to every other caller:

- New sca/ schemas: ScaFactor, ScaChallenge, ScaAuthorization.
- readOnly scaChallenge on Quote and Transaction, present only while status
  is PENDING_AUTHORIZATION (new enum value on TransactionStatus and
  Quote.status); omitted entirely for providers that don't require SCA.
- Resource-scoped authorize endpoints: POST /quotes/{quoteId}/authorize
  (returns Quote) and POST /transactions/{transactionId}/authorize (returns
  Transaction), plus an optional inline scaAuthorization on execute and
  transfer-out for one-shot completion.
- Realtime-funding create-quote returns 202 and withholds paymentInstructions
  until the challenge is authorized.

Design: webdev docs/plans/2026-06-06-striga-sca-design.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address Greptile review: the authorize endpoints are resource-scoped, so the
server resolves the active challenge from the quote/transaction context. The id
is informational, not a field the client passes back in ScaAuthorization.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… only

Address Greptile review: after a quote returns PENDING_AUTHORIZATION, the only
resolution is POST /transactions/{transactionId}/authorize; re-calling execute
409s. scaAuthorization on ExecuteQuoteRequest applies only to the initial call
(to avoid the pending state entirely).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address Greptile review: mirror the execute/create-quote treatment so a
transfer-out client has a spec-level signal that the returned transaction may
be PENDING_AUTHORIZATION and require POST /transactions/{transactionId}/authorize.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… resend)

Addresses an independent audit of the SCA surface against Striga's API:

- ScaAuthorization gains `origin` — Striga's wallets/transaction/confirm
  requires the WebAuthn origin alongside passkeyAssertion, and the assertion is
  origin-bound. Without it a passkey-authorized debit could not be confirmed.
- ScaChallenge surfaces `passkeyAllowedOrigins` (and documents that the relying
  party id lives in passkeyAssertionOptions) so the caller knows which origin to
  echo back.
- New resend endpoints: POST /quotes/{quoteId}/authorize/resend and
  /transactions/{transactionId}/authorize/resend, mapping to Striga's
  resend-otp-for-transaction (SMS only; passkey 409). An SMS code that lapses
  no longer forces abandoning the challenge.
- Cross-reference the realtime-funding quote authorize path and the resend
  endpoint from the execute 200 description.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add PENDING_AUTHORIZATION to OutgoingTransactionStatus. SCA-gated debits
  are outgoing transactions, whose status is overridden by this enum; without
  the value, generated clients reject the very responses the feature produces.
- Add the optional top-level scaFactor field to ExecuteQuoteRequest and
  TransferOutRequest. The backend already reads it to pick SMS_OTP (default)
  vs PASSKEY for the per-transaction challenge; it was undiscoverable in the
  spec.
- Clarify where the passkey origin comes from for a per-transaction challenge:
  such challenges carry passkeyAssertionOptions but omit passkeyAllowedOrigins,
  so ScaAuthorization.origin and ScaChallenge.passkeyAllowedOrigins now explain
  the per-transaction case instead of pointing at an absent field.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 8, 2026
Stacks on the per-transaction SCA spec (#558) and adds the remaining
Strong Customer Authentication surfaces an EU (Striga) partner needs, mirroring
the sparkcore handlers' exact routes + JSON shapes. All endpoints are EU-only
(409 for providers that don't require SCA).

- Factor enrollment: TOTP start/confirm, passkey register start/confirm,
  list factors, delete passkey.
- SCA login / 180-day session: login start/complete, plus record-event.
- Beneficiary trust: trust start (issues the SCA challenge + whitelistedId),
  trust/confirm and untrust/confirm (the whitelisting exemption that lets
  recurring payees skip per-transaction SCA).
- 2FA reset: initiate (201) -> poll status -> complete.

Reuses ScaFactor/ScaChallenge/ScaAuthorization from #558. Confirm/login bodies
carry the code|passkeyAssertion+origin proof; beneficiary confirm threads the
whitelistedId back so confirm never re-whitelists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jklein24

jklein24 commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

@faraday review this

@ls-bolt

ls-bolt Bot commented Jul 9, 2026

Copy link
Copy Markdown

📌 Bolt Status

2026-07-09 06:51:24 UTC — ⚡ Agent nested-torrent(#1) started


Feedback

@lightspark-faraday lightspark-faraday Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes

Comment thread openapi/paths/quotes/quotes.yaml
Comment thread openapi/components/schemas/quotes/Quote.yaml
Comment thread openapi/paths/transactions/transactions_{transactionId}_authorize_resend.yaml Outdated
Comment thread openapi/paths/quotes/quotes_{quoteId}_execute.yaml Outdated
Comment thread openapi/paths/transactions/transactions_{transactionId}_authorize.yaml Outdated
Comment thread openapi/paths/quotes/quotes.yaml
Comment thread openapi/paths/quotes/quotes_{quoteId}_authorize.yaml Outdated
Comment thread openapi/paths/quotes/quotes_{quoteId}_execute.yaml Outdated
…e-target clarity

Address faraday review on #558:
- Add scaFactor to QuoteRequest so a challenge issued at quote creation
  (realtime funding) can be SMS_OTP or PASSKEY, matching execute/transfer-out —
  it was previously unspecified, implying SMS-only.
- Reword the execute 200 description, which contradicted itself (claimed the
  transfer was initiated while also covering the PENDING_AUTHORIZATION case);
  it now splits the two outcomes and states which authorize endpoint to use.
- Document a 429 (RATE_LIMITED) on the authorize and resend endpoints — brute
  -force protection on the OTP and anti-SMS-spam on resend, mirroring the
  existing auth/credentials OTP endpoints.
- Clarify that resend reuses the existing challenge and does not extend
  expiresAt (post-expiry recovery tracked as design follow-up F8).
- Fix nit: sandbox code wording SMS/TOTP -> SMS (TOTP is invalid per-transaction).

Co-Authored-By: Claude <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 14, 2026
Match the #558/#600 terminology fix in the embedded SCA docs section: 'customers
in a region where SCA is required (EU)' / 'customers outside SCA-regulated
regions' instead of 'whose payment provider requires SCA'.

Co-Authored-By: Claude <noreply@anthropic.com>
| Status | Description |
|--------|-------------|
| `PENDING` | Quote is pending confirmation |
| `PENDING_AUTHORIZATION` | Awaiting Strong Customer Authentication. Only occurs for customers in a region where SCA is required (e.g. EU); authorize the transaction's `scaChallenge` to proceed. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need this represented in the transaciton as well or can a transaction be pending until the quote is executed?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO it's good to be explicit here that it's a different state that requires some action from the customer

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we also have a corresponding webhook

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we get that for free with the existing transaction status changes, right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm actually not sure it does since the status never switches to PENDING_AUTHORIZATION, it just starts there when created if needed, so there's no explicit time for a new webhook event here afaict.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hm we do send webhooks for PENDING so it might be nice for consistency

just to clarify my understanding
for realtime funding:

  • create quote -> PENDING_AUTHORIZATION
  • authorize quote -> PENDING (?)
  • fund quote -> PROCESSING

@jklein24 jklein24 Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah ok, if we do that already at creation, then I can add it! Yeah, that sequence looks correct for realtime-funded flows

remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
scaFactor:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we're doing this until we deprecate it for quote? Or should we totally skip it since transfer out will be deprecated soon anyway?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Short term I think we need it even if things get routed through the quotes flows internally. @shreyav wdyt?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ahh sorry missed this comment! replied on the other thread, I don't have a strong preference if its not too much work, but we do plan to mark this deprecated very soon

post:
summary: Authorize a quote's SCA challenge
description: |
Satisfy the Strong Customer Authentication challenge carried by a quote in

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's the use case for both a /authorize end point and /execute with SCA object?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the paragraph below. Specifically this is needed for realtime-funded quotes, which don't use the execute endpoint. IMO it's good to have these as separate explicit actions for that purpose to avoid confusion.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

damn is real time funding not enough of a secure customer authentication

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EU gonna EU

@pengying pengying Jul 14, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just double checking to make sure that I understand the flow - lets say it's a withdrawal flow like Loot rush of external EURC account > EUR. All managed by Lootrush for their end customers.

In this case since
1. customer adds the beneficiary EUR bank account account
2. move the funds from the customer EURC wallet to fund the quote
3. use the real time funded quote mechanism to convert and offramp

And they need to SCA three times?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Realtime quotes combine steps 2 and 3 there. Currently that would just require 2 SCAs for the swap and then withdraw. We can get it down to just one though. See this discussion for the "swap and send" flow". https://lightsparkgroup.slack.com/archives/C09H6AEERDF/p1783576868751969

schema:
type: string
example: Transaction:019542f5-b3e7-1d02-0000-000000000005
post:

@pengying pengying Jul 15, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When would a user authorize a transaction instead of the quote?

I mean a user calls quotes then execute / authorize with SCA. This is the second SCA?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good question that's making me think a bit more about whether this one is needed longer term...

Right now, as designed, this one is used in 2 places - non-realtime quotes (triggered with /execute to send from an internal account) and transfer-out calls. The quotes one is only for real-time quotes.

Your question has made me realize that this is a bit confusing though... If we'd already gotten rid of transfer-out, this would be an easy call to just move auth to the quotes call always and start them in PENDING_AUTHORIZATION. However, with transfer-out existing, we still need this no matter what. @shreyav I'm curious your thoughts on the timeline and mechanics here. Should we just skip the transaction auth call and instead follow the same quotes auth flow always? It means transfer-out won't ever work for EU, but maybe that's ok if we're getting rid of it quickly.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think thats okay to handle the quotes path only, I plan to make transfers APIs deprecated in the next week, and will add a note about that!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I did some digging and reminded myself why I have it this way with 2 different quote paths... It's a Striga constraint, not something I explicitly picked. The SCA challenge isn't a standalone object we can mint up front, it's issued by the initiation call (wallets/send/initiate/*) and bound to that specific transfer, and confirm settles that exact challengeId. There's no "give me a challenge without initiating a transfer" primitive.

So it lands wherever initiation happens:

  • Realtime quote: quote creation is the initiation, so the challenge's on the quote. Authorize the quote.
  • Prefunded quote: the quote's just a price lock on our end, it never touches Striga. Initiation happens at /execute, so the challenge can't exist till then and lands on the transaction.

Putting it on a prefunded quote at creation time would mean initiating a real pending transfer for every quote, including all the ones nobody executes. Quotes are disposable and high-volume, so that's a not ideal.

Unifying on the quotes auth path is still doable though, for prefunded it just means surfacing the execute-time challenge on the quote object and authorizing there. Not super clean though :-/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you want to do execute > quote authorize vs execute > transaction authorize? Also if I'm reading it correctly it looks like ExecuteQuoteRequest has auth evidence in it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you want to do execute > quote authorize vs execute > transaction authorize?

Yeah, exactly, that's where we'd need to go to make it consistent. Still a bit wonky, but at least it's always on the quote.

Also if I'm reading it correctly it looks like ExecuteQuoteRequest has auth evidence in it.

Ah yes, I left that there as optional to remove one step where possible, but I think that may just add more confusion than it solves. Let me just refactor to unify things a bit real quick and then I'll write out the clear API call steps here for each scenario.

@jklein24 jklein24 Jul 16, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refactored to unify, so here are the clear steps. Both scenarios authorize on the quote now; the only difference is where the challenge first surfaces.

Pre-funded (internal-account source, balance already there):

  1. POST /quotes → quote, no challenge
  2. POST /quotes/{quoteId}/execute → quote returns PENDING_AUTHORIZATION + scaChallenge
  3. POST /quotes/{quoteId}/authorize with the proof → released

Realtime funding (funds arrive after):

  1. POST /quotes202, quote PENDING_AUTHORIZATION + scaChallenge, paymentInstructions withheld
  2. POST /quotes/{quoteId}/authorize with the proof → instructions populate, then the customer funds

The transaction-scoped authorize endpoint is gone, so there's nothing to reconcile against transactionId anymore.

jklein24 added a commit that referenced this pull request Jul 15, 2026
Stacks on the per-transaction SCA spec (#558) and adds the remaining
Strong Customer Authentication surfaces an EU (Striga) partner needs, mirroring
the sparkcore handlers' exact routes + JSON shapes. All endpoints are EU-only
(409 for providers that don't require SCA).

- Factor enrollment: TOTP start/confirm, passkey register start/confirm,
  list factors, delete passkey.
- SCA login / 180-day session: login start/complete, plus record-event.
- Beneficiary trust: trust start (issues the SCA challenge + whitelistedId),
  trust/confirm and untrust/confirm (the whitelisting exemption that lets
  recurring payees skip per-transaction SCA).
- 2FA reset: initiate (201) -> poll status -> complete.

Reuses ScaFactor/ScaChallenge/ScaAuthorization from #558. Confirm/login bodies
carry the code|passkeyAssertion+origin proof; beneficiary confirm threads the
whitelistedId back so confirm never re-whitelists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 15, 2026
Match the #558 terminology fix: the enrollment / login / trust / reset endpoints
now say "customers in a region where SCA is required (e.g. EU)" / "customers
outside SCA-regulated regions" instead of "customers whose payment provider
requires SCA", and the 409 reads "SCA is not required for this customer".
Incidental references to the underlying provider as a system (provider-reported
status, risk engine, whitelist handle) are left as-is.

Co-Authored-By: Claude <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 15, 2026
Match the #558/#600 terminology fix in the embedded SCA docs section: 'customers
in a region where SCA is required (EU)' / 'customers outside SCA-regulated
regions' instead of 'whose payment provider requires SCA'.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the breaking-change Introduces a breaking change to the OpenAPI spec label Jul 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Breaking OpenAPI changes detected

This PR introduces breaking changes to openapi.yaml:

API Changelog 2025-10-13 vs. 2026-06-29

API Changes

GET /agents/approvals

  • ⚠️ removed the optional property data/items/quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new BTC enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/quote/allOf[#/components/schemas/Quote]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /agents/me/actions

  • ⚠️ removed the optional property data/items/quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new BTC enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/quote/allOf[#/components/schemas/Quote]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /agents/me/actions/{actionId}

  • ⚠️ removed the optional property quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new BTC enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the quote/allOf[#/components/schemas/Quote]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /agents/me/internal-accounts

  • ⚠️ added the new BTC enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /agents/me/quotes

  • ⚠️ removed the request property remittanceInformation
  • ⚠️ removed the optional property remittanceInformation from the response with the 201 status
  • ⚠️ added the new BTC enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the status response property for the response status 201
  • ⚠️ added the new USDB enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201

GET /agents/me/quotes/{quoteId}

  • ⚠️ removed the optional property remittanceInformation from the response with the 200 status
  • ⚠️ added the new BTC enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the status response property for the response status 200
  • ⚠️ added the new USDB enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /agents/me/quotes/{quoteId}/execute

  • ⚠️ removed the optional property quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new BTC enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the quote/allOf[#/components/schemas/Quote]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /agents/me/transactions

  • ⚠️ removed the optional property data/items/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /agents/me/transactions/{transactionId}

  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /agents/me/transfer-in

  • ⚠️ removed the optional property quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ added the new BTC enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new BTC enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the quote/allOf[#/components/schemas/Quote]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 201
  • ⚠️ added the new USDB enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new USDB enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201

POST /agents/me/transfer-out

  • ⚠️ removed the optional property quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ added the new BTC enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new BTC enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the quote/allOf[#/components/schemas/Quote]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 201
  • ⚠️ added the new USDB enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new USDB enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201

POST /agents/{agentId}/actions/{actionId}/approve

  • ⚠️ removed the optional property quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new BTC enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the quote/allOf[#/components/schemas/Quote]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /agents/{agentId}/actions/{actionId}/reject

  • ⚠️ removed the optional property quote/allOf[#/components/schemas/Quote]/remittanceInformation from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new BTC enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the quote/allOf[#/components/schemas/Quote]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /auth/delegated-keys

  • ⚠️ removed the optional property data/items/spendingLimits from the response with the 200 status

POST /auth/delegated-keys

  • ⚠️ removed the request property spendingLimits
  • ⚠️ removed the optional property spendingLimits from the response with the 201 status

GET /auth/delegated-keys/{id}

  • ⚠️ removed the optional property spendingLimits from the response with the 200 status

GET /customers

  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status

POST /customers

  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[subschema #3]/businessInfo/expectedCounterpartyCountries
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[subschema #3]/businessInfo/naicsCode
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[subschema #3]/businessInfo/purposeOfAccountOtherDescription
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[subschema #3]/businessInfo/sourceOfFundsCategories
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Create Request]/allOf[subschema #3]/businessInfo/sourceOfFundsOtherDescription
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/expectedCounterpartyCountries from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/naicsCode from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/purposeOfAccountOtherDescription from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsCategories from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsOtherDescription from the response with the 201 status

GET /customers/internal-accounts

  • ⚠️ added the new BTC enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

DELETE /customers/{customerId}

  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status

GET /customers/{customerId}

  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status

PATCH /customers/{customerId}

  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Update Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Update Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Update Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Update Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories
  • ⚠️ removed the request property oneOf[subschema #2: Business Customer Update Request]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/expectedCounterpartyCountries from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/naicsCode from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/purposeOfAccountOtherDescription from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsCategories from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsOtherDescription from the response with the 200 status

PATCH /internal-accounts/{id}

  • ⚠️ added the new BTC enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /platform/internal-accounts

  • ⚠️ added the new BTC enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /quotes

  • ⚠️ removed the request property remittanceInformation
  • ⚠️ removed the optional property remittanceInformation from the response with the 201 status
  • ⚠️ added the new BTC enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the status response property for the response status 201
  • ⚠️ added the new USDB enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201

GET /quotes/{quoteId}

  • ⚠️ removed the optional property remittanceInformation from the response with the 200 status
  • ⚠️ added the new BTC enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the status response property for the response status 200
  • ⚠️ added the new USDB enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /quotes/{quoteId}/execute

  • ⚠️ removed the optional property remittanceInformation from the response with the 200 status
  • ⚠️ added the new BTC enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the status response property for the response status 200
  • ⚠️ added the new USDB enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /sandbox/internal-accounts/{accountId}/fund

  • ⚠️ added the new BTC enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new USDB enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /sandbox/send

  • ⚠️ removed the optional property allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /sandbox/uma/receive

  • ⚠️ removed the optional property allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the allOf[#/components/schemas/Transaction]/status response property for the response status 200

GET /transactions

  • ⚠️ removed the optional property data/items/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

GET /transactions/{transactionId}

  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /transactions/{transactionId}/approve

  • ⚠️ removed the optional property allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the allOf[#/components/schemas/Transaction]/status response property for the response status 200

POST /transactions/{transactionId}/confirm

  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new BTC enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 200
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 200
  • ⚠️ added the new USDB enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 200

POST /transactions/{transactionId}/reject

  • ⚠️ removed the optional property allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ removed the optional property allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 200 status
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the allOf[#/components/schemas/Transaction]/status response property for the response status 200

POST /transfer-in

  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ added the new BTC enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 201
  • ⚠️ added the new USDB enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201

POST /transfer-out

  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ removed the optional property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction from the response with the 201 status
  • ⚠️ added the new BTC enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/status response property for the response status 201
  • ⚠️ added the new PENDING_AUTHORIZATION enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/status response property for the response status 201
  • ⚠️ added the new USDB enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType response property for the response status 201

POST webhook:agent-action

  • ⚠️ request property allOf[subschema #2]/data/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType was restricted to a list of enum values
  • ⚠️ request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType was restricted to a list of enum values
  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the request property allOf[subschema #2]/data/quote/allOf[#/components/schemas/Quote]/remittanceInformation
  • ⚠️ removed the request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction

POST webhook:bulk-upload

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type

POST webhook:card-funding-source-change

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type

POST webhook:card-state-change

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type

POST webhook:customer-update

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/expectedCounterpartyCountries
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/naicsCode
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/purposeOfAccountOtherDescription
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsCategories
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[#/components/schemas/BusinessCustomerFields]/businessInfo/sourceOfFundsOtherDescription
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/expectedCounterpartyCountries
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/naicsCode
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/purposeOfAccountOtherDescription
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsCategories
  • ⚠️ removed the request property allOf[subschema #2]/data/oneOf[subschema #2: Business Customer]/allOf[subschema #3]/businessInfo/sourceOfFundsOtherDescription

POST webhook:incoming-payment

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the request property allOf[subschema #2]/data/allOf[subschema #1: Incoming Transaction]/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/allOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/allOf[subschema #1: Incoming Transaction]/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction

POST webhook:internal-account-status

  • ⚠️ request property allOf[subschema #2]/data/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType was restricted to a list of enum values
  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type

POST webhook:invitation-claimed

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type

POST webhook:outgoing-payment

  • ⚠️ request property allOf[subschema #2]/data/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #40: Spark Wallet]/allOf[subschema #3]/assetType was restricted to a list of enum values
  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the request property allOf[subschema #2]/data/allOf[#/components/schemas/Transaction]/destination/oneOf[subschema #1: Account Destination]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/allOf[subschema #2]/source/oneOf[subschema #1: Account Source]/allOf[subschema #2]/onChainTransaction
  • ⚠️ removed the request property allOf[subschema #2]/data/allOf[subschema #2]/source/oneOf[subschema #3: External Funding Source]/allOf[subschema #2]/onChainTransaction

POST webhook:test-webhook

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type

POST webhook:verification-update

  • ⚠️ removed the enum value CARD_TRANSACTION.AUTHORIZED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.EXCEPTION of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.PARTIALLY_SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.REFUNDED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value CARD_TRANSACTION.SETTLED of the request property allOf[#/components/schemas/BaseWebhook]/type
  • ⚠️ removed the enum value MISSING_CONTROL_PERSON of the request property allOf[subschema #2]/data/errors/items/type
  • ⚠️ removed the enum value MISSING_GOOD_STANDING_DOCUMENT of the request property allOf[subschema #2]/data/errors/items/type

Components

  • ⚠️ webhook card-transaction removed

Detected by oasdiff. This PR will need approval from an API reviewer before merge.

jklein24 added a commit that referenced this pull request Jul 16, 2026
Stacks on the per-transaction SCA spec (#558) and adds the remaining
Strong Customer Authentication surfaces an EU (Striga) partner needs, mirroring
the sparkcore handlers' exact routes + JSON shapes. All endpoints are EU-only
(409 for providers that don't require SCA).

- Factor enrollment: TOTP start/confirm, passkey register start/confirm,
  list factors, delete passkey.
- SCA login / 180-day session: login start/complete, plus record-event.
- Beneficiary trust: trust start (issues the SCA challenge + whitelistedId),
  trust/confirm and untrust/confirm (the whitelisting exemption that lets
  recurring payees skip per-transaction SCA).
- 2FA reset: initiate (201) -> poll status -> complete.

Reuses ScaFactor/ScaChallenge/ScaAuthorization from #558. Confirm/login bodies
carry the code|passkeyAssertion+origin proof; beneficiary confirm threads the
whitelistedId back so confirm never re-whitelists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 16, 2026
Match the #558 terminology fix: the enrollment / login / trust / reset endpoints
now say "customers in a region where SCA is required (e.g. EU)" / "customers
outside SCA-regulated regions" instead of "customers whose payment provider
requires SCA", and the 409 reads "SCA is not required for this customer".
Incidental references to the underlying provider as a system (provider-reported
status, risk engine, whitelist handle) are left as-is.

Co-Authored-By: Claude <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 16, 2026
Match the #558/#600 terminology fix in the embedded SCA docs section: 'customers
in a region where SCA is required (EU)' / 'customers outside SCA-regulated
regions' instead of 'whose payment provider requires SCA'.

Co-Authored-By: Claude <noreply@anthropic.com>
@mintlify

mintlify Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
Grid 🟢 Ready View Preview Jul 16, 2026, 7:34 AM

@mintlify

mintlify Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
Grid 🟡 Building Jul 16, 2026, 7:32 AM

To the integrator, Grid is the provider; the underlying provider (Striga) must
not leak into the API surface. Region-based framing here too.

Co-Authored-By: Claude <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 16, 2026
Stacks on the per-transaction SCA spec (#558) and adds the remaining
Strong Customer Authentication surfaces an EU (Striga) partner needs, mirroring
the sparkcore handlers' exact routes + JSON shapes. All endpoints are EU-only
(409 for providers that don't require SCA).

- Factor enrollment: TOTP start/confirm, passkey register start/confirm,
  list factors, delete passkey.
- SCA login / 180-day session: login start/complete, plus record-event.
- Beneficiary trust: trust start (issues the SCA challenge + whitelistedId),
  trust/confirm and untrust/confirm (the whitelisting exemption that lets
  recurring payees skip per-transaction SCA).
- 2FA reset: initiate (201) -> poll status -> complete.

Reuses ScaFactor/ScaChallenge/ScaAuthorization from #558. Confirm/login bodies
carry the code|passkeyAssertion+origin proof; beneficiary confirm threads the
whitelistedId back so confirm never re-whitelists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 16, 2026
Match the #558 terminology fix: the enrollment / login / trust / reset endpoints
now say "customers in a region where SCA is required (e.g. EU)" / "customers
outside SCA-regulated regions" instead of "customers whose payment provider
requires SCA", and the 409 reads "SCA is not required for this customer".
Incidental references to the underlying provider as a system (provider-reported
status, risk engine, whitelist handle) are left as-is.

Co-Authored-By: Claude <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 16, 2026
Match the #558/#600 terminology fix in the embedded SCA docs section: 'customers
in a region where SCA is required (EU)' / 'customers outside SCA-regulated
regions' instead of 'whose payment provider requires SCA'.

Co-Authored-By: Claude <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 16, 2026
Match the #558/#600 terminology fix in the embedded SCA docs section: 'customers
in a region where SCA is required (EU)' / 'customers outside SCA-regulated
regions' instead of 'whose payment provider requires SCA'.

Co-Authored-By: Claude <noreply@anthropic.com>
jklein24 added a commit that referenced this pull request Jul 16, 2026
Match the #558/#600 terminology fix in the embedded SCA docs section: 'customers
in a region where SCA is required (EU)' / 'customers outside SCA-regulated
regions' instead of 'whose payment provider requires SCA'.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking-change Introduces a breaking change to the OpenAPI spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants