Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions mintlify/payouts-and-b2b/payment-flow/send-payment.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -90,6 +90,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/transfer-out' \
`remittanceInformation` is optional. Use it to send a reference that travels with the payment to the recipient (max 80 characters). This populates the ACH Addenda record, FedNow/RTP remittance information, or wire OBI field depending on the payment rail.
</Info>

<Info>
`purposeOfPayment` is optional and accepts the same values as on a quote. Some destinations
require it, and some rails carry it on the payment itself.
</Info>


```json Success (201 Created)
{
Expand Down
6 changes: 6 additions & 0 deletions mintlify/snippets/external-accounts.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,6 +79,12 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco
<Note>
Category must be `CHECKING` or `SAVINGS`. Routing number must be 9 digits.
</Note>

<Note>
Three further fields apply to the `WIRE` rail and are ignored on ACH, RTP and FedNow:
`intermediaryBankName` and `intermediaryRoutingNumber`, for a beneficiary bank reachable only
through a correspondent, and `fiToFiInformation` for bank-to-bank instructions.
</Note>
</Tab>

<Tab title="Mexico">
Expand Down
71 changes: 53 additions & 18 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions openapi/components/schemas/common/UsdAccountInfoBase.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,52 @@ properties:
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
bankName:

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.

@AaryamanBhute is this file one of the autogenerated ones from your workflow or is USD separate?

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.

It's autogenerated, I know @JasonCWang and @mohamedwane have been making changes to it 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.

On the autogenerated question — the history says it's both, which is worth knowing before this merges.

git log on UsdAccountInfoBase.yaml:

Peter.Rojs Add USD account bank, account type and wire routing fields (this PR)
lightspark-copybara chore: Sync account schemas (#398)
Shreya Vissamsetti Revert "chore: Sync account schemas" (#395)
lightspark-copybara chore: Sync account schemas (#388)
Matt Davis Add bankAccountType to USD, bankName/documentType/documentNumber to COP... (#352)
Aaryaman Bhute Split request and response schemas for external account paymentRails (#302)

So lightspark-copybara[bot] does sync this file, but humans also edit it directly — #352 added bankAccountType to a currency schema by hand, which is exactly the shape of this change. And #395 reverted one of the syncs, so the sync isn't unconditionally authoritative either.

Nothing in this repo generates it locally: no scripts/ entry references it, and make build only bundles openapi/openapi.yaml. The one workflow that mentions the directory (docs-sync.yml) just reads these schemas to prompt reviewers about the grid-visualizer.

The practical risk: if a copybara sync runs from a source that doesn't yet have these five properties, it could silently drop them. If that source is upstream of this repo, the fields may need adding there too — otherwise this merges fine and a later sync quietly reverts it. @AaryamanBhute you'd know where that sync originates; happy to mirror the change there if you point me at it.


🤖 bridged-rampart-3(#3) | Feedback

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.

Thanks — that's useful, and it flags a real risk I've detailed in the thread above: if the copybara sync originates from a source that lacks these five properties, a later sync would silently drop them.

Two questions where you'd know better than I can infer from history:

  1. Where does chore: Sync account schemas originate? If these fields also need to exist there, I'm happy to mirror the change so the sync doesn't revert it.
  2. Do the changes @JasonCWang and @mohamedwane have in flight touch UsdAccountInfoBase? If so, worth sequencing — I'm only adding optional properties (no required changes), so it should merge cleanly either way, but a concurrent sync is the case that would clobber it.

Also worth flagging for whoever merges: this is the spec half only. webdev's generated grid_api client has to be regenerated from the merged spec before the backend can accept these fields — its from_dict whitelists keys, so until then they're silently dropped rather than rejected.


🤖 bridged-rampart-3(#3) | Feedback

type: string
description: >-
The name of the financial institution holding the account. Optional on
every rail, and recommended for wires, where it identifies the
beneficiary's institution on the payment message.
example: Chase Bank
minLength: 1
maxLength: 140
bankAccountType:
type: string
description: >-
Whether the account is a checking or a savings account. Optional on every
rail; when omitted, the account is treated as a checking account.
enum:
- CHECKING
- SAVINGS
example: CHECKING
intermediaryBankName:
type: string
description: >-
The name of the intermediary financial institution, for accounts reachable
only through a correspondent bank. Used on the WIRE rail; ignored on ACH,
RTP and FEDNOW.
example: JPMorgan Chase Bank
minLength: 1
maxLength: 140
intermediaryRoutingNumber:
type: string
description: >-
The ABA routing number of the intermediary financial institution. Used on
the WIRE rail; ignored on ACH, RTP and FEDNOW.
example: '021000021'
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
fiToFiInformation:
type: string
description: >-
Bank-to-bank instructions carried alongside the payment. Used on the WIRE
rail; ignored on ACH, RTP and FEDNOW.
example: /BNF/Invoice 4471
maxLength: 210
example:
accountType: USD_ACCOUNT
accountNumber: '1234567890'
routingNumber: '021000021'
bankName: Chase Bank
bankAccountType: CHECKING
2 changes: 2 additions & 0 deletions openapi/components/schemas/transfers/TransferOutRequest.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,5 @@ properties:
remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
purposeOfPayment:
$ref: ../quotes/PurposeOfPayment.yaml
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Add USD account bank, account type and wire routing fields by peterrojs · Pull Request #778 · lightsparkdev/grid-api · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions mintlify/payouts-and-b2b/payment-flow/send-payment.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -90,6 +90,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/transfer-out' \
`remittanceInformation` is optional. Use it to send a reference that travels with the payment to the recipient (max 80 characters). This populates the ACH Addenda record, FedNow/RTP remittance information, or wire OBI field depending on the payment rail.
</Info>

<Info>
`purposeOfPayment` is optional and accepts the same values as on a quote. Some destinations
require it, and some rails carry it on the payment itself.
</Info>


```json Success (201 Created)
{
Expand Down
6 changes: 6 additions & 0 deletions mintlify/snippets/external-accounts.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,6 +79,12 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco
<Note>
Category must be `CHECKING` or `SAVINGS`. Routing number must be 9 digits.
</Note>

<Note>
Three further fields apply to the `WIRE` rail and are ignored on ACH, RTP and FedNow:
`intermediaryBankName` and `intermediaryRoutingNumber`, for a beneficiary bank reachable only
through a correspondent, and `fiToFiInformation` for bank-to-bank instructions.
</Note>
</Tab>

<Tab title="Mexico">
Expand Down
71 changes: 53 additions & 18 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions openapi/components/schemas/common/UsdAccountInfoBase.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,52 @@ properties:
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
bankName:

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.

@AaryamanBhute is this file one of the autogenerated ones from your workflow or is USD separate?

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.

It's autogenerated, I know @JasonCWang and @mohamedwane have been making changes to it 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.

On the autogenerated question — the history says it's both, which is worth knowing before this merges.

git log on UsdAccountInfoBase.yaml:

Peter.Rojs Add USD account bank, account type and wire routing fields (this PR)
lightspark-copybara chore: Sync account schemas (#398)
Shreya Vissamsetti Revert "chore: Sync account schemas" (#395)
lightspark-copybara chore: Sync account schemas (#388)
Matt Davis Add bankAccountType to USD, bankName/documentType/documentNumber to COP... (#352)
Aaryaman Bhute Split request and response schemas for external account paymentRails (#302)

So lightspark-copybara[bot] does sync this file, but humans also edit it directly — #352 added bankAccountType to a currency schema by hand, which is exactly the shape of this change. And #395 reverted one of the syncs, so the sync isn't unconditionally authoritative either.

Nothing in this repo generates it locally: no scripts/ entry references it, and make build only bundles openapi/openapi.yaml. The one workflow that mentions the directory (docs-sync.yml) just reads these schemas to prompt reviewers about the grid-visualizer.

The practical risk: if a copybara sync runs from a source that doesn't yet have these five properties, it could silently drop them. If that source is upstream of this repo, the fields may need adding there too — otherwise this merges fine and a later sync quietly reverts it. @AaryamanBhute you'd know where that sync originates; happy to mirror the change there if you point me at it.


🤖 bridged-rampart-3(#3) | Feedback

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.

Thanks — that's useful, and it flags a real risk I've detailed in the thread above: if the copybara sync originates from a source that lacks these five properties, a later sync would silently drop them.

Two questions where you'd know better than I can infer from history:

  1. Where does chore: Sync account schemas originate? If these fields also need to exist there, I'm happy to mirror the change so the sync doesn't revert it.
  2. Do the changes @JasonCWang and @mohamedwane have in flight touch UsdAccountInfoBase? If so, worth sequencing — I'm only adding optional properties (no required changes), so it should merge cleanly either way, but a concurrent sync is the case that would clobber it.

Also worth flagging for whoever merges: this is the spec half only. webdev's generated grid_api client has to be regenerated from the merged spec before the backend can accept these fields — its from_dict whitelists keys, so until then they're silently dropped rather than rejected.


🤖 bridged-rampart-3(#3) | Feedback

type: string
description: >-
The name of the financial institution holding the account. Optional on
every rail, and recommended for wires, where it identifies the
beneficiary's institution on the payment message.
example: Chase Bank
minLength: 1
maxLength: 140
bankAccountType:
type: string
description: >-
Whether the account is a checking or a savings account. Optional on every
rail; when omitted, the account is treated as a checking account.
enum:
- CHECKING
- SAVINGS
example: CHECKING
intermediaryBankName:
type: string
description: >-
The name of the intermediary financial institution, for accounts reachable
only through a correspondent bank. Used on the WIRE rail; ignored on ACH,
RTP and FEDNOW.
example: JPMorgan Chase Bank
minLength: 1
maxLength: 140
intermediaryRoutingNumber:
type: string
description: >-
The ABA routing number of the intermediary financial institution. Used on
the WIRE rail; ignored on ACH, RTP and FEDNOW.
example: '021000021'
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
fiToFiInformation:
type: string
description: >-
Bank-to-bank instructions carried alongside the payment. Used on the WIRE
rail; ignored on ACH, RTP and FEDNOW.
example: /BNF/Invoice 4471
maxLength: 210
example:
accountType: USD_ACCOUNT
accountNumber: '1234567890'
routingNumber: '021000021'
bankName: Chase Bank
bankAccountType: CHECKING
2 changes: 2 additions & 0 deletions openapi/components/schemas/transfers/TransferOutRequest.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,5 @@ properties:
remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
purposeOfPayment:
$ref: ../quotes/PurposeOfPayment.yaml
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add USD account bank, account type and wire routing fields by peterrojs · Pull Request #778 · lightsparkdev/grid-api · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions mintlify/payouts-and-b2b/payment-flow/send-payment.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -90,6 +90,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/transfer-out' \
`remittanceInformation` is optional. Use it to send a reference that travels with the payment to the recipient (max 80 characters). This populates the ACH Addenda record, FedNow/RTP remittance information, or wire OBI field depending on the payment rail.
</Info>

<Info>
`purposeOfPayment` is optional and accepts the same values as on a quote. Some destinations
require it, and some rails carry it on the payment itself.
</Info>


```json Success (201 Created)
{
Expand Down
6 changes: 6 additions & 0 deletions mintlify/snippets/external-accounts.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,6 +79,12 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco
<Note>
Category must be `CHECKING` or `SAVINGS`. Routing number must be 9 digits.
</Note>

<Note>
Three further fields apply to the `WIRE` rail and are ignored on ACH, RTP and FedNow:
`intermediaryBankName` and `intermediaryRoutingNumber`, for a beneficiary bank reachable only
through a correspondent, and `fiToFiInformation` for bank-to-bank instructions.
</Note>
</Tab>

<Tab title="Mexico">
Expand Down
71 changes: 53 additions & 18 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions openapi/components/schemas/common/UsdAccountInfoBase.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,52 @@ properties:
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
bankName:

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.

@AaryamanBhute is this file one of the autogenerated ones from your workflow or is USD separate?

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.

It's autogenerated, I know @JasonCWang and @mohamedwane have been making changes to it 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.

On the autogenerated question — the history says it's both, which is worth knowing before this merges.

git log on UsdAccountInfoBase.yaml:

Peter.Rojs Add USD account bank, account type and wire routing fields (this PR)
lightspark-copybara chore: Sync account schemas (#398)
Shreya Vissamsetti Revert "chore: Sync account schemas" (#395)
lightspark-copybara chore: Sync account schemas (#388)
Matt Davis Add bankAccountType to USD, bankName/documentType/documentNumber to COP... (#352)
Aaryaman Bhute Split request and response schemas for external account paymentRails (#302)

So lightspark-copybara[bot] does sync this file, but humans also edit it directly — #352 added bankAccountType to a currency schema by hand, which is exactly the shape of this change. And #395 reverted one of the syncs, so the sync isn't unconditionally authoritative either.

Nothing in this repo generates it locally: no scripts/ entry references it, and make build only bundles openapi/openapi.yaml. The one workflow that mentions the directory (docs-sync.yml) just reads these schemas to prompt reviewers about the grid-visualizer.

The practical risk: if a copybara sync runs from a source that doesn't yet have these five properties, it could silently drop them. If that source is upstream of this repo, the fields may need adding there too — otherwise this merges fine and a later sync quietly reverts it. @AaryamanBhute you'd know where that sync originates; happy to mirror the change there if you point me at it.


🤖 bridged-rampart-3(#3) | Feedback

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.

Thanks — that's useful, and it flags a real risk I've detailed in the thread above: if the copybara sync originates from a source that lacks these five properties, a later sync would silently drop them.

Two questions where you'd know better than I can infer from history:

  1. Where does chore: Sync account schemas originate? If these fields also need to exist there, I'm happy to mirror the change so the sync doesn't revert it.
  2. Do the changes @JasonCWang and @mohamedwane have in flight touch UsdAccountInfoBase? If so, worth sequencing — I'm only adding optional properties (no required changes), so it should merge cleanly either way, but a concurrent sync is the case that would clobber it.

Also worth flagging for whoever merges: this is the spec half only. webdev's generated grid_api client has to be regenerated from the merged spec before the backend can accept these fields — its from_dict whitelists keys, so until then they're silently dropped rather than rejected.


🤖 bridged-rampart-3(#3) | Feedback

type: string
description: >-
The name of the financial institution holding the account. Optional on
every rail, and recommended for wires, where it identifies the
beneficiary's institution on the payment message.
example: Chase Bank
minLength: 1
maxLength: 140
bankAccountType:
type: string
description: >-
Whether the account is a checking or a savings account. Optional on every
rail; when omitted, the account is treated as a checking account.
enum:
- CHECKING
- SAVINGS
example: CHECKING
intermediaryBankName:
type: string
description: >-
The name of the intermediary financial institution, for accounts reachable
only through a correspondent bank. Used on the WIRE rail; ignored on ACH,
RTP and FEDNOW.
example: JPMorgan Chase Bank
minLength: 1
maxLength: 140
intermediaryRoutingNumber:
type: string
description: >-
The ABA routing number of the intermediary financial institution. Used on
the WIRE rail; ignored on ACH, RTP and FEDNOW.
example: '021000021'
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
fiToFiInformation:
type: string
description: >-
Bank-to-bank instructions carried alongside the payment. Used on the WIRE
rail; ignored on ACH, RTP and FEDNOW.
example: /BNF/Invoice 4471
maxLength: 210
example:
accountType: USD_ACCOUNT
accountNumber: '1234567890'
routingNumber: '021000021'
bankName: Chase Bank
bankAccountType: CHECKING
2 changes: 2 additions & 0 deletions openapi/components/schemas/transfers/TransferOutRequest.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,5 @@ properties:
remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
purposeOfPayment:
$ref: ../quotes/PurposeOfPayment.yaml
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add USD account bank, account type and wire routing fields by peterrojs · Pull Request #778 · lightsparkdev/grid-api · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions mintlify/payouts-and-b2b/payment-flow/send-payment.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -90,6 +90,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/transfer-out' \
`remittanceInformation` is optional. Use it to send a reference that travels with the payment to the recipient (max 80 characters). This populates the ACH Addenda record, FedNow/RTP remittance information, or wire OBI field depending on the payment rail.
</Info>

<Info>
`purposeOfPayment` is optional and accepts the same values as on a quote. Some destinations
require it, and some rails carry it on the payment itself.
</Info>


```json Success (201 Created)
{
Expand Down
6 changes: 6 additions & 0 deletions mintlify/snippets/external-accounts.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,6 +79,12 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco
<Note>
Category must be `CHECKING` or `SAVINGS`. Routing number must be 9 digits.
</Note>

<Note>
Three further fields apply to the `WIRE` rail and are ignored on ACH, RTP and FedNow:
`intermediaryBankName` and `intermediaryRoutingNumber`, for a beneficiary bank reachable only
through a correspondent, and `fiToFiInformation` for bank-to-bank instructions.
</Note>
</Tab>

<Tab title="Mexico">
Expand Down
71 changes: 53 additions & 18 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions openapi/components/schemas/common/UsdAccountInfoBase.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,52 @@ properties:
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
bankName:

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.

@AaryamanBhute is this file one of the autogenerated ones from your workflow or is USD separate?

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.

It's autogenerated, I know @JasonCWang and @mohamedwane have been making changes to it 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.

On the autogenerated question — the history says it's both, which is worth knowing before this merges.

git log on UsdAccountInfoBase.yaml:

Peter.Rojs Add USD account bank, account type and wire routing fields (this PR)
lightspark-copybara chore: Sync account schemas (#398)
Shreya Vissamsetti Revert "chore: Sync account schemas" (#395)
lightspark-copybara chore: Sync account schemas (#388)
Matt Davis Add bankAccountType to USD, bankName/documentType/documentNumber to COP... (#352)
Aaryaman Bhute Split request and response schemas for external account paymentRails (#302)

So lightspark-copybara[bot] does sync this file, but humans also edit it directly — #352 added bankAccountType to a currency schema by hand, which is exactly the shape of this change. And #395 reverted one of the syncs, so the sync isn't unconditionally authoritative either.

Nothing in this repo generates it locally: no scripts/ entry references it, and make build only bundles openapi/openapi.yaml. The one workflow that mentions the directory (docs-sync.yml) just reads these schemas to prompt reviewers about the grid-visualizer.

The practical risk: if a copybara sync runs from a source that doesn't yet have these five properties, it could silently drop them. If that source is upstream of this repo, the fields may need adding there too — otherwise this merges fine and a later sync quietly reverts it. @AaryamanBhute you'd know where that sync originates; happy to mirror the change there if you point me at it.


🤖 bridged-rampart-3(#3) | Feedback

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.

Thanks — that's useful, and it flags a real risk I've detailed in the thread above: if the copybara sync originates from a source that lacks these five properties, a later sync would silently drop them.

Two questions where you'd know better than I can infer from history:

  1. Where does chore: Sync account schemas originate? If these fields also need to exist there, I'm happy to mirror the change so the sync doesn't revert it.
  2. Do the changes @JasonCWang and @mohamedwane have in flight touch UsdAccountInfoBase? If so, worth sequencing — I'm only adding optional properties (no required changes), so it should merge cleanly either way, but a concurrent sync is the case that would clobber it.

Also worth flagging for whoever merges: this is the spec half only. webdev's generated grid_api client has to be regenerated from the merged spec before the backend can accept these fields — its from_dict whitelists keys, so until then they're silently dropped rather than rejected.


🤖 bridged-rampart-3(#3) | Feedback

type: string
description: >-
The name of the financial institution holding the account. Optional on
every rail, and recommended for wires, where it identifies the
beneficiary's institution on the payment message.
example: Chase Bank
minLength: 1
maxLength: 140
bankAccountType:
type: string
description: >-
Whether the account is a checking or a savings account. Optional on every
rail; when omitted, the account is treated as a checking account.
enum:
- CHECKING
- SAVINGS
example: CHECKING
intermediaryBankName:
type: string
description: >-
The name of the intermediary financial institution, for accounts reachable
only through a correspondent bank. Used on the WIRE rail; ignored on ACH,
RTP and FEDNOW.
example: JPMorgan Chase Bank
minLength: 1
maxLength: 140
intermediaryRoutingNumber:
type: string
description: >-
The ABA routing number of the intermediary financial institution. Used on
the WIRE rail; ignored on ACH, RTP and FEDNOW.
example: '021000021'
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
fiToFiInformation:
type: string
description: >-
Bank-to-bank instructions carried alongside the payment. Used on the WIRE
rail; ignored on ACH, RTP and FEDNOW.
example: /BNF/Invoice 4471
maxLength: 210
example:
accountType: USD_ACCOUNT
accountNumber: '1234567890'
routingNumber: '021000021'
bankName: Chase Bank
bankAccountType: CHECKING
2 changes: 2 additions & 0 deletions openapi/components/schemas/transfers/TransferOutRequest.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,5 @@ properties:
remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
purposeOfPayment:
$ref: ../quotes/PurposeOfPayment.yaml
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Add USD account bank, account type and wire routing fields by peterrojs · Pull Request #778 · lightsparkdev/grid-api · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions mintlify/payouts-and-b2b/payment-flow/send-payment.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -90,6 +90,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/transfer-out' \
`remittanceInformation` is optional. Use it to send a reference that travels with the payment to the recipient (max 80 characters). This populates the ACH Addenda record, FedNow/RTP remittance information, or wire OBI field depending on the payment rail.
</Info>

<Info>
`purposeOfPayment` is optional and accepts the same values as on a quote. Some destinations
require it, and some rails carry it on the payment itself.
</Info>


```json Success (201 Created)
{
Expand Down
6 changes: 6 additions & 0 deletions mintlify/snippets/external-accounts.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,6 +79,12 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco
<Note>
Category must be `CHECKING` or `SAVINGS`. Routing number must be 9 digits.
</Note>

<Note>
Three further fields apply to the `WIRE` rail and are ignored on ACH, RTP and FedNow:
`intermediaryBankName` and `intermediaryRoutingNumber`, for a beneficiary bank reachable only
through a correspondent, and `fiToFiInformation` for bank-to-bank instructions.
</Note>
</Tab>

<Tab title="Mexico">
Expand Down
71 changes: 53 additions & 18 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions openapi/components/schemas/common/UsdAccountInfoBase.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,52 @@ properties:
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
bankName:

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.

@AaryamanBhute is this file one of the autogenerated ones from your workflow or is USD separate?

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.

It's autogenerated, I know @JasonCWang and @mohamedwane have been making changes to it 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.

On the autogenerated question — the history says it's both, which is worth knowing before this merges.

git log on UsdAccountInfoBase.yaml:

Peter.Rojs Add USD account bank, account type and wire routing fields (this PR)
lightspark-copybara chore: Sync account schemas (#398)
Shreya Vissamsetti Revert "chore: Sync account schemas" (#395)
lightspark-copybara chore: Sync account schemas (#388)
Matt Davis Add bankAccountType to USD, bankName/documentType/documentNumber to COP... (#352)
Aaryaman Bhute Split request and response schemas for external account paymentRails (#302)

So lightspark-copybara[bot] does sync this file, but humans also edit it directly — #352 added bankAccountType to a currency schema by hand, which is exactly the shape of this change. And #395 reverted one of the syncs, so the sync isn't unconditionally authoritative either.

Nothing in this repo generates it locally: no scripts/ entry references it, and make build only bundles openapi/openapi.yaml. The one workflow that mentions the directory (docs-sync.yml) just reads these schemas to prompt reviewers about the grid-visualizer.

The practical risk: if a copybara sync runs from a source that doesn't yet have these five properties, it could silently drop them. If that source is upstream of this repo, the fields may need adding there too — otherwise this merges fine and a later sync quietly reverts it. @AaryamanBhute you'd know where that sync originates; happy to mirror the change there if you point me at it.


🤖 bridged-rampart-3(#3) | Feedback

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.

Thanks — that's useful, and it flags a real risk I've detailed in the thread above: if the copybara sync originates from a source that lacks these five properties, a later sync would silently drop them.

Two questions where you'd know better than I can infer from history:

  1. Where does chore: Sync account schemas originate? If these fields also need to exist there, I'm happy to mirror the change so the sync doesn't revert it.
  2. Do the changes @JasonCWang and @mohamedwane have in flight touch UsdAccountInfoBase? If so, worth sequencing — I'm only adding optional properties (no required changes), so it should merge cleanly either way, but a concurrent sync is the case that would clobber it.

Also worth flagging for whoever merges: this is the spec half only. webdev's generated grid_api client has to be regenerated from the merged spec before the backend can accept these fields — its from_dict whitelists keys, so until then they're silently dropped rather than rejected.


🤖 bridged-rampart-3(#3) | Feedback

type: string
description: >-
The name of the financial institution holding the account. Optional on
every rail, and recommended for wires, where it identifies the
beneficiary's institution on the payment message.
example: Chase Bank
minLength: 1
maxLength: 140
bankAccountType:
type: string
description: >-
Whether the account is a checking or a savings account. Optional on every
rail; when omitted, the account is treated as a checking account.
enum:
- CHECKING
- SAVINGS
example: CHECKING
intermediaryBankName:
type: string
description: >-
The name of the intermediary financial institution, for accounts reachable
only through a correspondent bank. Used on the WIRE rail; ignored on ACH,
RTP and FEDNOW.
example: JPMorgan Chase Bank
minLength: 1
maxLength: 140
intermediaryRoutingNumber:
type: string
description: >-
The ABA routing number of the intermediary financial institution. Used on
the WIRE rail; ignored on ACH, RTP and FEDNOW.
example: '021000021'
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
fiToFiInformation:
type: string
description: >-
Bank-to-bank instructions carried alongside the payment. Used on the WIRE
rail; ignored on ACH, RTP and FEDNOW.
example: /BNF/Invoice 4471
maxLength: 210
example:
accountType: USD_ACCOUNT
accountNumber: '1234567890'
routingNumber: '021000021'
bankName: Chase Bank
bankAccountType: CHECKING
2 changes: 2 additions & 0 deletions openapi/components/schemas/transfers/TransferOutRequest.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,5 @@ properties:
remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
purposeOfPayment:
$ref: ../quotes/PurposeOfPayment.yaml
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add USD account bank, account type and wire routing fields by peterrojs · Pull Request #778 · lightsparkdev/grid-api · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions mintlify/payouts-and-b2b/payment-flow/send-payment.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -90,6 +90,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/transfer-out' \
`remittanceInformation` is optional. Use it to send a reference that travels with the payment to the recipient (max 80 characters). This populates the ACH Addenda record, FedNow/RTP remittance information, or wire OBI field depending on the payment rail.
</Info>

<Info>
`purposeOfPayment` is optional and accepts the same values as on a quote. Some destinations
require it, and some rails carry it on the payment itself.
</Info>


```json Success (201 Created)
{
Expand Down
6 changes: 6 additions & 0 deletions mintlify/snippets/external-accounts.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,6 +79,12 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco
<Note>
Category must be `CHECKING` or `SAVINGS`. Routing number must be 9 digits.
</Note>

<Note>
Three further fields apply to the `WIRE` rail and are ignored on ACH, RTP and FedNow:
`intermediaryBankName` and `intermediaryRoutingNumber`, for a beneficiary bank reachable only
through a correspondent, and `fiToFiInformation` for bank-to-bank instructions.
</Note>
</Tab>

<Tab title="Mexico">
Expand Down
71 changes: 53 additions & 18 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions openapi/components/schemas/common/UsdAccountInfoBase.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,52 @@ properties:
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
bankName:

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.

@AaryamanBhute is this file one of the autogenerated ones from your workflow or is USD separate?

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.

It's autogenerated, I know @JasonCWang and @mohamedwane have been making changes to it 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.

On the autogenerated question — the history says it's both, which is worth knowing before this merges.

git log on UsdAccountInfoBase.yaml:

Peter.Rojs Add USD account bank, account type and wire routing fields (this PR)
lightspark-copybara chore: Sync account schemas (#398)
Shreya Vissamsetti Revert "chore: Sync account schemas" (#395)
lightspark-copybara chore: Sync account schemas (#388)
Matt Davis Add bankAccountType to USD, bankName/documentType/documentNumber to COP... (#352)
Aaryaman Bhute Split request and response schemas for external account paymentRails (#302)

So lightspark-copybara[bot] does sync this file, but humans also edit it directly — #352 added bankAccountType to a currency schema by hand, which is exactly the shape of this change. And #395 reverted one of the syncs, so the sync isn't unconditionally authoritative either.

Nothing in this repo generates it locally: no scripts/ entry references it, and make build only bundles openapi/openapi.yaml. The one workflow that mentions the directory (docs-sync.yml) just reads these schemas to prompt reviewers about the grid-visualizer.

The practical risk: if a copybara sync runs from a source that doesn't yet have these five properties, it could silently drop them. If that source is upstream of this repo, the fields may need adding there too — otherwise this merges fine and a later sync quietly reverts it. @AaryamanBhute you'd know where that sync originates; happy to mirror the change there if you point me at it.


🤖 bridged-rampart-3(#3) | Feedback

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.

Thanks — that's useful, and it flags a real risk I've detailed in the thread above: if the copybara sync originates from a source that lacks these five properties, a later sync would silently drop them.

Two questions where you'd know better than I can infer from history:

  1. Where does chore: Sync account schemas originate? If these fields also need to exist there, I'm happy to mirror the change so the sync doesn't revert it.
  2. Do the changes @JasonCWang and @mohamedwane have in flight touch UsdAccountInfoBase? If so, worth sequencing — I'm only adding optional properties (no required changes), so it should merge cleanly either way, but a concurrent sync is the case that would clobber it.

Also worth flagging for whoever merges: this is the spec half only. webdev's generated grid_api client has to be regenerated from the merged spec before the backend can accept these fields — its from_dict whitelists keys, so until then they're silently dropped rather than rejected.


🤖 bridged-rampart-3(#3) | Feedback

type: string
description: >-
The name of the financial institution holding the account. Optional on
every rail, and recommended for wires, where it identifies the
beneficiary's institution on the payment message.
example: Chase Bank
minLength: 1
maxLength: 140
bankAccountType:
type: string
description: >-
Whether the account is a checking or a savings account. Optional on every
rail; when omitted, the account is treated as a checking account.
enum:
- CHECKING
- SAVINGS
example: CHECKING
intermediaryBankName:
type: string
description: >-
The name of the intermediary financial institution, for accounts reachable
only through a correspondent bank. Used on the WIRE rail; ignored on ACH,
RTP and FEDNOW.
example: JPMorgan Chase Bank
minLength: 1
maxLength: 140
intermediaryRoutingNumber:
type: string
description: >-
The ABA routing number of the intermediary financial institution. Used on
the WIRE rail; ignored on ACH, RTP and FEDNOW.
example: '021000021'
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
fiToFiInformation:
type: string
description: >-
Bank-to-bank instructions carried alongside the payment. Used on the WIRE
rail; ignored on ACH, RTP and FEDNOW.
example: /BNF/Invoice 4471
maxLength: 210
example:
accountType: USD_ACCOUNT
accountNumber: '1234567890'
routingNumber: '021000021'
bankName: Chase Bank
bankAccountType: CHECKING
2 changes: 2 additions & 0 deletions openapi/components/schemas/transfers/TransferOutRequest.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,5 @@ properties:
remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
purposeOfPayment:
$ref: ../quotes/PurposeOfPayment.yaml
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Add USD account bank, account type and wire routing fields by peterrojs · Pull Request #778 · lightsparkdev/grid-api · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions mintlify/payouts-and-b2b/payment-flow/send-payment.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -90,6 +90,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/transfer-out' \
`remittanceInformation` is optional. Use it to send a reference that travels with the payment to the recipient (max 80 characters). This populates the ACH Addenda record, FedNow/RTP remittance information, or wire OBI field depending on the payment rail.
</Info>

<Info>
`purposeOfPayment` is optional and accepts the same values as on a quote. Some destinations
require it, and some rails carry it on the payment itself.
</Info>


```json Success (201 Created)
{
Expand Down
6 changes: 6 additions & 0 deletions mintlify/snippets/external-accounts.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,6 +79,12 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco
<Note>
Category must be `CHECKING` or `SAVINGS`. Routing number must be 9 digits.
</Note>

<Note>
Three further fields apply to the `WIRE` rail and are ignored on ACH, RTP and FedNow:
`intermediaryBankName` and `intermediaryRoutingNumber`, for a beneficiary bank reachable only
through a correspondent, and `fiToFiInformation` for bank-to-bank instructions.
</Note>
</Tab>

<Tab title="Mexico">
Expand Down
71 changes: 53 additions & 18 deletions openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions openapi/components/schemas/common/UsdAccountInfoBase.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,52 @@ properties:
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
bankName:

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.

@AaryamanBhute is this file one of the autogenerated ones from your workflow or is USD separate?

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.

It's autogenerated, I know @JasonCWang and @mohamedwane have been making changes to it 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.

On the autogenerated question — the history says it's both, which is worth knowing before this merges.

git log on UsdAccountInfoBase.yaml:

Peter.Rojs Add USD account bank, account type and wire routing fields (this PR)
lightspark-copybara chore: Sync account schemas (#398)
Shreya Vissamsetti Revert "chore: Sync account schemas" (#395)
lightspark-copybara chore: Sync account schemas (#388)
Matt Davis Add bankAccountType to USD, bankName/documentType/documentNumber to COP... (#352)
Aaryaman Bhute Split request and response schemas for external account paymentRails (#302)

So lightspark-copybara[bot] does sync this file, but humans also edit it directly — #352 added bankAccountType to a currency schema by hand, which is exactly the shape of this change. And #395 reverted one of the syncs, so the sync isn't unconditionally authoritative either.

Nothing in this repo generates it locally: no scripts/ entry references it, and make build only bundles openapi/openapi.yaml. The one workflow that mentions the directory (docs-sync.yml) just reads these schemas to prompt reviewers about the grid-visualizer.

The practical risk: if a copybara sync runs from a source that doesn't yet have these five properties, it could silently drop them. If that source is upstream of this repo, the fields may need adding there too — otherwise this merges fine and a later sync quietly reverts it. @AaryamanBhute you'd know where that sync originates; happy to mirror the change there if you point me at it.


🤖 bridged-rampart-3(#3) | Feedback

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.

Thanks — that's useful, and it flags a real risk I've detailed in the thread above: if the copybara sync originates from a source that lacks these five properties, a later sync would silently drop them.

Two questions where you'd know better than I can infer from history:

  1. Where does chore: Sync account schemas originate? If these fields also need to exist there, I'm happy to mirror the change so the sync doesn't revert it.
  2. Do the changes @JasonCWang and @mohamedwane have in flight touch UsdAccountInfoBase? If so, worth sequencing — I'm only adding optional properties (no required changes), so it should merge cleanly either way, but a concurrent sync is the case that would clobber it.

Also worth flagging for whoever merges: this is the spec half only. webdev's generated grid_api client has to be regenerated from the merged spec before the backend can accept these fields — its from_dict whitelists keys, so until then they're silently dropped rather than rejected.


🤖 bridged-rampart-3(#3) | Feedback

type: string
description: >-
The name of the financial institution holding the account. Optional on
every rail, and recommended for wires, where it identifies the
beneficiary's institution on the payment message.
example: Chase Bank
minLength: 1
maxLength: 140
bankAccountType:
type: string
description: >-
Whether the account is a checking or a savings account. Optional on every
rail; when omitted, the account is treated as a checking account.
enum:
- CHECKING
- SAVINGS
example: CHECKING
intermediaryBankName:
type: string
description: >-
The name of the intermediary financial institution, for accounts reachable
only through a correspondent bank. Used on the WIRE rail; ignored on ACH,
RTP and FEDNOW.
example: JPMorgan Chase Bank
minLength: 1
maxLength: 140
intermediaryRoutingNumber:
type: string
description: >-
The ABA routing number of the intermediary financial institution. Used on
the WIRE rail; ignored on ACH, RTP and FEDNOW.
example: '021000021'
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
fiToFiInformation:
type: string
description: >-
Bank-to-bank instructions carried alongside the payment. Used on the WIRE
rail; ignored on ACH, RTP and FEDNOW.
example: /BNF/Invoice 4471
maxLength: 210
example:
accountType: USD_ACCOUNT
accountNumber: '1234567890'
routingNumber: '021000021'
bankName: Chase Bank
bankAccountType: CHECKING
2 changes: 2 additions & 0 deletions openapi/components/schemas/transfers/TransferOutRequest.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,5 @@ properties:
remittanceInformation field, and for wires it populates the OBI
(Originator to Beneficiary Information) / beneficiary information.
example: '12345'
purposeOfPayment:
$ref: ../quotes/PurposeOfPayment.yaml
Loading