From 9bf7e0eaf009aa3ac5e3eb2872190020a332a46e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 22:25:11 +0000 Subject: [PATCH 01/26] feat(api): add pagination to platform.externalAccounts.list --- .stats.yml | 4 +-- packages/mcp-server/src/local-docs-search.ts | 6 ++--- src/resources/platform/external-accounts.ts | 25 +++++++++++++++++++ .../platform/external-accounts.test.ts | 9 ++++++- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/.stats.yml b/.stats.yml index bd93d1b..5349ee0 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark%2Fgrid-5b8a8161eeb365a5f33ff76fd0db58d75715e177d14dd4a761135ece6295bb96.yml -openapi_spec_hash: e0638786090ed4ef2bfd6499c7a357c3 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark%2Fgrid-7098711cad4185ec795534caa5312fd4f07689b33c1f8a40527f3bbc641f937d.yml +openapi_spec_hash: 30ce2704e6e0889c89fe06c59fb2820a config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index a201dfc..44936eb 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -656,11 +656,11 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'Retrieve a list of all external accounts that belong to the platform, as opposed to an individual customer.\n\nThese accounts are used for platform-wide operations such as receiving funds from external sources or managing platform-level payment destinations.\n', stainlessPath: '(resource) platform.external_accounts > (method) list', qualified: 'client.platform.externalAccounts.list', - params: ['currency?: string;'], + params: ['currency?: string;', 'cursor?: string;', 'limit?: number;'], response: - "{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; }", + "{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", markdown: - "## list\n\n`client.platform.externalAccounts.list(currency?: string): { data: external_account[]; }`\n\n**get** `/platform/external-accounts`\n\nRetrieve a list of all external accounts that belong to the platform, as opposed to an individual customer.\n\nThese accounts are used for platform-wide operations such as receiving funds from external sources or managing platform-level payment destinations.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n### Returns\n\n- `{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; }`\n\n - `data: { id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccounts = await client.platform.externalAccounts.list();\n\nconsole.log(externalAccounts);\n```", + "## list\n\n`client.platform.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { data: external_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/platform/external-accounts`\n\nRetrieve a list of all external accounts that belong to the platform, as opposed to an individual customer.\n\nThese accounts are used for platform-wide operations such as receiving funds from external sources or managing platform-level payment destinations.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccounts = await client.platform.externalAccounts.list();\n\nconsole.log(externalAccounts);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.list', diff --git a/src/resources/platform/external-accounts.ts b/src/resources/platform/external-accounts.ts index 3a7e8e6..87d68d4 100644 --- a/src/resources/platform/external-accounts.ts +++ b/src/resources/platform/external-accounts.ts @@ -769,6 +769,21 @@ export interface ExternalAccountListResponse { * List of external accounts matching the filter criteria */ data: Array; + + /** + * Indicates if more results are available beyond this page + */ + hasMore: boolean; + + /** + * Cursor to retrieve the next page of results (only present if hasMore is true) + */ + nextCursor?: string; + + /** + * Total number of external accounts matching the criteria (excluding pagination) + */ + totalCount?: number; } export interface ExternalAccountCreateParams { @@ -837,6 +852,16 @@ export interface ExternalAccountListParams { * Filter by currency code */ currency?: string; + + /** + * Cursor for pagination (returned from previous request) + */ + cursor?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; } export declare namespace ExternalAccounts { diff --git a/tests/api-resources/platform/external-accounts.test.ts b/tests/api-resources/platform/external-accounts.test.ts index 76ea219..d579b8f 100644 --- a/tests/api-resources/platform/external-accounts.test.ts +++ b/tests/api-resources/platform/external-accounts.test.ts @@ -87,7 +87,14 @@ describe('resource externalAccounts', () => { test.skip('list: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.platform.externalAccounts.list({ currency: 'currency' }, { path: '/_stainless_unknown_path' }), + client.platform.externalAccounts.list( + { + currency: 'currency', + cursor: 'cursor', + limit: 1, + }, + { path: '/_stainless_unknown_path' }, + ), ).rejects.toThrow(LightsparkGrid.NotFoundError); }); From f21102a8d02c768d927a02b67b82657cf9d27674 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 22:59:56 +0000 Subject: [PATCH 02/26] fix(types): update BDT/GHS/GTQ/HTG/JMD/PKR account and beneficiary types --- .stats.yml | 4 +- packages/mcp-server/src/local-docs-search.ts | 26 +++--- src/resources/platform/external-accounts.ts | 30 ++----- src/resources/shared.ts | 88 ++++++++------------ 4 files changed, 54 insertions(+), 94 deletions(-) diff --git a/.stats.yml b/.stats.yml index 5349ee0..79a6d1a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark%2Fgrid-7098711cad4185ec795534caa5312fd4f07689b33c1f8a40527f3bbc641f937d.yml -openapi_spec_hash: 30ce2704e6e0889c89fe06c59fb2820a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark%2Fgrid-8f060a4f19e3d7743af0785132344fdb0cbc3f68c1a0f7ad14391abb6add9cfa.yml +openapi_spec_hash: 398aa35d4cd9f69a66591c5fbc016e03 config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 44936eb..88860e3 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -371,7 +371,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }", markdown: - "## list_internal_accounts\n\n`client.customers.listInternalAccounts(currency?: string, cursor?: string, customerId?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**get** `/customers/internal-accounts`\n\nRetrieve a list of internal accounts with optional filtering parameters. Returns all\ninternal accounts that match the specified filters. If no filters are provided, returns all internal accounts\n(paginated).\n\nInternal accounts are created automatically when a customer is created based on the platform configuration.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by internal accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for a customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for the platform-managed holding accounts.\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.customers.listInternalAccounts()) {\n console.log(internalAccount);\n}\n```", + "## list_internal_accounts\n\n`client.customers.listInternalAccounts(currency?: string, cursor?: string, customerId?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**get** `/customers/internal-accounts`\n\nRetrieve a list of internal accounts with optional filtering parameters. Returns all\ninternal accounts that match the specified filters. If no filters are provided, returns all internal accounts\n(paginated).\n\nInternal accounts are created automatically when a customer is created based on the platform configuration.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by internal accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for a customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for the platform-managed holding accounts.\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.customers.listInternalAccounts()) {\n console.log(internalAccount);\n}\n```", perLanguage: { typescript: { method: 'client.customers.listInternalAccounts', @@ -407,7 +407,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## list\n\n`client.customers.externalAccounts.list(currency?: string, cursor?: string, customerId?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts`\n\nRetrieve a list of external accounts with optional filtering parameters. Returns all\nexternal accounts that match the specified filters. If no filters are provided, returns all external accounts\n(paginated).\n\nExternal accounts are bank accounts, cryptocurrency wallets, or other payment destinations that customers can use to receive funds from the platform.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by external accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.customers.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", + "## list\n\n`client.customers.externalAccounts.list(currency?: string, cursor?: string, customerId?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts`\n\nRetrieve a list of external accounts with optional filtering parameters. Returns all\nexternal accounts that match the specified filters. If no filters are provided, returns all external accounts\n(paginated).\n\nExternal accounts are bank accounts, cryptocurrency wallets, or other payment destinations that customers can use to receive funds from the platform.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by external accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.customers.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.list', @@ -439,7 +439,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) customers.external_accounts > (method) create', qualified: 'client.customers.externalAccounts.create', params: [ - "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", + "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', 'cryptoNetwork?: string;', 'customerId?: string;', @@ -449,7 +449,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; beneficiary: bdt_beneficiary | business_beneficiary; branchCode: string; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; beneficiary: ghs_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: pkr_beneficiary | business_beneficiary; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, cryptoNetwork?: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `cryptoNetwork?: string`\n The blockchain network for this external account. Required when the account is a cryptocurrency wallet. Specifies which network the wallet is on. Example values: SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST.\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: pkr_beneficiary | business_beneficiary; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, cryptoNetwork?: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `cryptoNetwork?: string`\n The blockchain network for this external account. Required when the account is a cryptocurrency wallet. Specifies which network the wallet is on. Example values: SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST.\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.create', @@ -484,7 +484,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## retrieve\n\n`client.customers.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts/{externalAccountId}`\n\nRetrieve a customer external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", + "## retrieve\n\n`client.customers.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts/{externalAccountId}`\n\nRetrieve a customer external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.retrieve', @@ -692,14 +692,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) platform.external_accounts > (method) create', qualified: 'client.platform.externalAccounts.create', params: [ - "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", + "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', 'platformAccountId?: string;', ], response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; beneficiary: bdt_beneficiary | business_beneficiary; branchCode: string; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; beneficiary: ghs_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: pkr_beneficiary | business_beneficiary; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: pkr_beneficiary | business_beneficiary; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.create', @@ -734,7 +734,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## retrieve\n\n`client.platform.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/platform/external-accounts/{externalAccountId}`\n\nRetrieve a platform external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", + "## retrieve\n\n`client.platform.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/platform/external-accounts/{externalAccountId}`\n\nRetrieve a platform external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.retrieve', @@ -956,7 +956,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", markdown: - "## retrieve\n\n`client.quotes.retrieve(quoteId: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**get** `/quotes/{quoteId}`\n\nRetrieve a quote by its ID. If the quote has been settled, it will include\nthe transaction ID. This allows clients to track the full lifecycle of a payment\nfrom quote creation to settlement.\n\n\n### Parameters\n\n- `quoteId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.retrieve('quoteId');\n\nconsole.log(quote);\n```", + "## retrieve\n\n`client.quotes.retrieve(quoteId: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**get** `/quotes/{quoteId}`\n\nRetrieve a quote by its ID. If the quote has been settled, it will include\nthe transaction ID. This allows clients to track the full lifecycle of a payment\nfrom quote creation to settlement.\n\n\n### Parameters\n\n- `quoteId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.retrieve('quoteId');\n\nconsole.log(quote);\n```", perLanguage: { typescript: { method: 'client.quotes.retrieve', @@ -1003,7 +1003,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", markdown: - "## create\n\n`client.quotes.create(destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }, lockedCurrencyAmount: number, lockedCurrencySide: 'SENDING' | 'RECEIVING', source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }, description?: string, immediatelyExecute?: boolean, lookupId?: string, purposeOfPayment?: string, senderCustomerInfo?: object, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes`\n\nGenerate a quote for a cross-currency transfer between any combination of accounts\nand UMA addresses. This endpoint handles currency exchange and provides the necessary\ninstructions to execute the transfer.\n\n**Transfer Types Supported:**\n- **Account to Account**: Transfer between internal/external accounts with currency exchange.\n- **Account to UMA**: Transfer from an internal account to an UMA address.\n- **UMA to Account or UMA to UMA**: This transfer type will only be funded by payment instructions, not from an internal account.\n\n**Key Features:**\n- **Flexible Amount Locking**: Always specify whether you want to lock the sending amount or receiving amount\n- **Currency Exchange**: Handles all cross-currency transfers with real-time exchange rates\n- **Payment Instructions**: For UMA or customer ID sources, provides banking details needed for execution\n\n**Important:** If you are transferring funds in the same currency (no exchange required),\nuse the `/transfer-in` or `/transfer-out` endpoints instead.\n\n\n### Parameters\n\n- `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n Destination account details\n\n- `lockedCurrencyAmount: number`\n The amount to send/receive in the smallest unit of the locked currency (eg. cents). See `lockedCurrencySide` for more information.\n\n- `lockedCurrencySide: 'SENDING' | 'RECEIVING'`\n The side of the quote which should be locked and specified in the `lockedCurrencyAmount`. For example, if I want to send exactly $5 MXN from my wallet, I would set this to \"sending\", and the `lockedCurrencyAmount` to 500 (in cents). If I want the receiver to receive exactly $10 USD, I would set this to \"receiving\" and the `lockedCurrencyAmount` to 10000 (in cents).\n\n- `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n Source account details\n\n- `description?: string`\n Optional description/memo for the transfer\n\n- `immediatelyExecute?: boolean`\n Whether to immediately execute the quote after creation. If true, the quote will be executed and the transaction will be created at the current exchange rate. It should only be used if you don't want to lock and view rate details before executing the quote. If you are executing a pre-existing quote, use the `/quotes/{quoteId}/execute` endpoint instead. This is false by default.\nThis can only be used for quotes with a `source` which is either an internal account, or has direct pull functionality (e.g. ACH pull with an external account).\nNot supported when the `source` is an internal account of type `EMBEDDED_WALLET`: those transfers require a `Grid-Wallet-Signature` over the `payloadToSign` returned in the quote response, which is not available in a combined create-and-execute call. Create the quote first with `immediatelyExecute: false` and then call `POST /quotes/{quoteId}/execute` with the signature header.\n\n- `lookupId?: string`\n Lookup ID from a previous receiver lookup request. If provided, this can make the quote creation more efficient by reusing cached lookup data.\nNOTE: This is required for UMA destinations due to counterparty institution requirements. See `senderCustomerInfo` for more information.\n\n- `purposeOfPayment?: string`\n The purpose of the payment. This may be required when sending to certain geographies (e.g. India).\n\n- `senderCustomerInfo?: object`\n Key-value pairs of additional information about the sender which was requested by the destination. This is relevant when the destination requires more sender info than was provided during customer creation.\nAny fields specified in `requiredPayerDataFields` from the response of the `/receiver/uma/{receiverUmaAddress}` (lookupUma) or `/receiver/external-account/{accountId}` (lookupExternalAccount) endpoints MUST be provided here if they were requested. If the destination did not request any additional information, this field can be omitted.\n\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.create({\n destination: { accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', destinationType: 'ACCOUNT' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', sourceType: 'ACCOUNT' },\n});\n\nconsole.log(quote);\n```", + "## create\n\n`client.quotes.create(destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }, lockedCurrencyAmount: number, lockedCurrencySide: 'SENDING' | 'RECEIVING', source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }, description?: string, immediatelyExecute?: boolean, lookupId?: string, purposeOfPayment?: string, senderCustomerInfo?: object, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes`\n\nGenerate a quote for a cross-currency transfer between any combination of accounts\nand UMA addresses. This endpoint handles currency exchange and provides the necessary\ninstructions to execute the transfer.\n\n**Transfer Types Supported:**\n- **Account to Account**: Transfer between internal/external accounts with currency exchange.\n- **Account to UMA**: Transfer from an internal account to an UMA address.\n- **UMA to Account or UMA to UMA**: This transfer type will only be funded by payment instructions, not from an internal account.\n\n**Key Features:**\n- **Flexible Amount Locking**: Always specify whether you want to lock the sending amount or receiving amount\n- **Currency Exchange**: Handles all cross-currency transfers with real-time exchange rates\n- **Payment Instructions**: For UMA or customer ID sources, provides banking details needed for execution\n\n**Important:** If you are transferring funds in the same currency (no exchange required),\nuse the `/transfer-in` or `/transfer-out` endpoints instead.\n\n\n### Parameters\n\n- `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n Destination account details\n\n- `lockedCurrencyAmount: number`\n The amount to send/receive in the smallest unit of the locked currency (eg. cents). See `lockedCurrencySide` for more information.\n\n- `lockedCurrencySide: 'SENDING' | 'RECEIVING'`\n The side of the quote which should be locked and specified in the `lockedCurrencyAmount`. For example, if I want to send exactly $5 MXN from my wallet, I would set this to \"sending\", and the `lockedCurrencyAmount` to 500 (in cents). If I want the receiver to receive exactly $10 USD, I would set this to \"receiving\" and the `lockedCurrencyAmount` to 10000 (in cents).\n\n- `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n Source account details\n\n- `description?: string`\n Optional description/memo for the transfer\n\n- `immediatelyExecute?: boolean`\n Whether to immediately execute the quote after creation. If true, the quote will be executed and the transaction will be created at the current exchange rate. It should only be used if you don't want to lock and view rate details before executing the quote. If you are executing a pre-existing quote, use the `/quotes/{quoteId}/execute` endpoint instead. This is false by default.\nThis can only be used for quotes with a `source` which is either an internal account, or has direct pull functionality (e.g. ACH pull with an external account).\nNot supported when the `source` is an internal account of type `EMBEDDED_WALLET`: those transfers require a `Grid-Wallet-Signature` over the `payloadToSign` returned in the quote response, which is not available in a combined create-and-execute call. Create the quote first with `immediatelyExecute: false` and then call `POST /quotes/{quoteId}/execute` with the signature header.\n\n- `lookupId?: string`\n Lookup ID from a previous receiver lookup request. If provided, this can make the quote creation more efficient by reusing cached lookup data.\nNOTE: This is required for UMA destinations due to counterparty institution requirements. See `senderCustomerInfo` for more information.\n\n- `purposeOfPayment?: string`\n The purpose of the payment. This may be required when sending to certain geographies (e.g. India).\n\n- `senderCustomerInfo?: object`\n Key-value pairs of additional information about the sender which was requested by the destination. This is relevant when the destination requires more sender info than was provided during customer creation.\nAny fields specified in `requiredPayerDataFields` from the response of the `/receiver/uma/{receiverUmaAddress}` (lookupUma) or `/receiver/external-account/{accountId}` (lookupExternalAccount) endpoints MUST be provided here if they were requested. If the destination did not request any additional information, this field can be omitted.\n\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.create({\n destination: { accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', destinationType: 'ACCOUNT' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', sourceType: 'ACCOUNT' },\n});\n\nconsole.log(quote);\n```", perLanguage: { typescript: { method: 'client.quotes.create', @@ -1039,7 +1039,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", markdown: - "## execute\n\n`client.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes/{quoteId}/execute`\n\nExecute a quote by its ID. This endpoint initiates the transfer between\nthe source and destination accounts.\n\nThis endpoint can only be used for quotes with a `source` which is either an internal account,\nor has direct pull functionality (e.g. ACH pull with an external account).\n\nWhen the quote's `source` is an internal account of type `EMBEDDED_WALLET`,\nthe request must include a `Grid-Wallet-Signature` header. The signature is\nproduced by signing the `payloadToSign` value from the quote's\n`paymentInstructions[].accountOrWalletInfo` entry with the session private\nkey of a verified authentication credential on the source Embedded Wallet.\n\nOnce executed, the quote cannot be cancelled and the transfer will be processed.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(quote);\n```", + "## execute\n\n`client.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes/{quoteId}/execute`\n\nExecute a quote by its ID. This endpoint initiates the transfer between\nthe source and destination accounts.\n\nThis endpoint can only be used for quotes with a `source` which is either an internal account,\nor has direct pull functionality (e.g. ACH pull with an external account).\n\nWhen the quote's `source` is an internal account of type `EMBEDDED_WALLET`,\nthe request must include a `Grid-Wallet-Signature` header. The signature is\nproduced by signing the `payloadToSign` value from the quote's\n`paymentInstructions[].accountOrWalletInfo` entry with the session private\nkey of a verified authentication credential on the source Embedded Wallet.\n\nOnce executed, the quote cannot be cancelled and the transfer will be processed.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(quote);\n```", perLanguage: { typescript: { method: 'client.quotes.execute', @@ -1374,7 +1374,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }", markdown: - "## send_funds\n\n`client.sandbox.sendFunds(currencyCode: string, quoteId: string, currencyAmount?: number): { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }`\n\n**post** `/sandbox/send`\n\nSimulate sending funds to the bank account as instructed in the quote.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `currencyCode: string`\n Currency code for the funds to be sent\n\n- `quoteId: string`\n The unique identifier of the quote\n\n- `currencyAmount?: number`\n The amount to send in the smallest unit of the currency (eg. cents). If not provided, the amount will be derived from the quote.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: { amount: number; currency: currency; }; source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; quoteId?: string; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; receivedAmount?: { amount: number; currency: currency; }; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `sentAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'`\n - `type: 'OUTGOING' | 'INCOMING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `exchangeRate?: number`\n - `failureReason?: string`\n - `fees?: number`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `quoteId?: string`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `receivedAmount?: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }`\n - `settledAt?: string`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst outgoingTransaction = await client.sandbox.sendFunds({ currencyCode: 'USD', quoteId: 'Quote:019542f5-b3e7-1d02-0000-000000000006' });\n\nconsole.log(outgoingTransaction);\n```", + "## send_funds\n\n`client.sandbox.sendFunds(currencyCode: string, quoteId: string, currencyAmount?: number): { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }`\n\n**post** `/sandbox/send`\n\nSimulate sending funds to the bank account as instructed in the quote.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `currencyCode: string`\n Currency code for the funds to be sent\n\n- `quoteId: string`\n The unique identifier of the quote\n\n- `currencyAmount?: number`\n The amount to send in the smallest unit of the currency (eg. cents). If not provided, the amount will be derived from the quote.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: { amount: number; currency: currency; }; source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; quoteId?: string; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; receivedAmount?: { amount: number; currency: currency; }; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `sentAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'`\n - `type: 'OUTGOING' | 'INCOMING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `exchangeRate?: number`\n - `failureReason?: string`\n - `fees?: number`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `quoteId?: string`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `receivedAmount?: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }`\n - `settledAt?: string`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst outgoingTransaction = await client.sandbox.sendFunds({ currencyCode: 'USD', quoteId: 'Quote:019542f5-b3e7-1d02-0000-000000000006' });\n\nconsole.log(outgoingTransaction);\n```", perLanguage: { typescript: { method: 'client.sandbox.sendFunds', @@ -1452,7 +1452,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }", markdown: - "## fund\n\n`client.sandbox.internalAccounts.fund(accountId: string, amount: number): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**post** `/sandbox/internal-accounts/{accountId}/fund`\n\nSimulate receiving funds into an internal account in the sandbox environment. This is useful for testing scenarios where you need to add funds to a customer's or platform's internal account without going through a real bank transfer or following payment instructions.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `accountId: string`\n\n- `amount: number`\n Amount to add in the smallest unit of the account's currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst internalAccount = await client.sandbox.internalAccounts.fund('InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', { amount: 100000 });\n\nconsole.log(internalAccount);\n```", + "## fund\n\n`client.sandbox.internalAccounts.fund(accountId: string, amount: number): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**post** `/sandbox/internal-accounts/{accountId}/fund`\n\nSimulate receiving funds into an internal account in the sandbox environment. This is useful for testing scenarios where you need to add funds to a customer's or platform's internal account without going through a real bank transfer or following payment instructions.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `accountId: string`\n\n- `amount: number`\n Amount to add in the smallest unit of the account's currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst internalAccount = await client.sandbox.internalAccounts.fund('InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', { amount: 100000 });\n\nconsole.log(internalAccount);\n```", perLanguage: { typescript: { method: 'client.sandbox.internalAccounts.fund', diff --git a/src/resources/platform/external-accounts.ts b/src/resources/platform/external-accounts.ts index 87d68d4..cec93b0 100644 --- a/src/resources/platform/external-accounts.ts +++ b/src/resources/platform/external-accounts.ts @@ -128,16 +128,6 @@ export interface BdtAccountInfo { accountType: 'BDT_ACCOUNT'; - /** - * The name of the bank - */ - bankName: string; - - /** - * The branch code - */ - branchCode: string; - paymentRails: Array<'BANK_TRANSFER' | 'MOBILE_MONEY'>; /** @@ -145,6 +135,11 @@ export interface BdtAccountInfo { */ phoneNumber: string; + /** + * The branch code + */ + branchCode?: string; + /** * The SWIFT/BIC code of the bank */ @@ -312,11 +307,6 @@ export interface GhsAccountInfo { accountType: 'GHS_ACCOUNT'; - /** - * The name of the bank - */ - bankName: string; - paymentRails: Array<'BANK_TRANSFER' | 'MOBILE_MONEY'>; /** @@ -338,11 +328,6 @@ export interface GtqAccountInfo { */ bankAccountType: 'CHECKING' | 'SAVINGS'; - /** - * The name of the bank - */ - bankName: string; - paymentRails: Array<'BANK_TRANSFER'>; } @@ -428,11 +413,6 @@ export interface JmdAccountInfo { */ bankAccountType: 'CHECKING' | 'SAVINGS'; - /** - * The name of the bank - */ - bankName: string; - /** * The branch code */ diff --git a/src/resources/shared.ts b/src/resources/shared.ts index fd73552..5eeca7d 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -57,6 +57,11 @@ export interface AedExternalAccountCreateInfo { export interface BdtBeneficiary { beneficiaryType: 'INDIVIDUAL'; + /** + * The country of residence of the beneficiary + */ + countryOfResidence: string; + /** * The full name of the beneficiary */ @@ -69,11 +74,6 @@ export interface BdtBeneficiary { */ birthDate?: string; - /** - * The country of residence of the beneficiary - */ - countryOfResidence?: string; - /** * The email of the beneficiary */ @@ -98,22 +98,17 @@ export interface BdtExternalAccountCreateInfo { accountType: 'BDT_ACCOUNT'; - /** - * The name of the bank - */ - bankName: string; - beneficiary: BdtBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; /** - * The branch code + * The phone number in international format */ - branchCode: string; + phoneNumber: string; /** - * The phone number in international format + * The branch code */ - phoneNumber: string; + branchCode?: string; /** * The SWIFT/BIC code of the bank @@ -503,6 +498,11 @@ export interface GbpExternalAccountCreateInfo { export interface GhsBeneficiary { beneficiaryType: 'INDIVIDUAL'; + /** + * The country of residence of the beneficiary + */ + countryOfResidence: string; + /** * The full name of the beneficiary */ @@ -515,11 +515,6 @@ export interface GhsBeneficiary { */ birthDate?: string; - /** - * The country of residence of the beneficiary - */ - countryOfResidence?: string; - /** * The email of the beneficiary */ @@ -544,11 +539,6 @@ export interface GhsExternalAccountCreateInfo { accountType: 'GHS_ACCOUNT'; - /** - * The name of the bank - */ - bankName: string; - beneficiary: GhsBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; /** @@ -570,11 +560,6 @@ export interface GtqBeneficiary { */ fullName: string; - /** - * The phone number of the beneficiary - */ - phoneNumber: string; - address?: ExternalAccountsAPI.Address; /** @@ -591,6 +576,11 @@ export interface GtqBeneficiary { * The nationality of the beneficiary */ nationality?: string; + + /** + * The phone number of the beneficiary + */ + phoneNumber?: string; } export interface GtqExternalAccountCreateInfo { @@ -606,11 +596,6 @@ export interface GtqExternalAccountCreateInfo { */ bankAccountType: 'CHECKING' | 'SAVINGS'; - /** - * The name of the bank - */ - bankName: string; - beneficiary: GtqBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; } @@ -638,6 +623,11 @@ export interface HkdExternalAccountCreateInfo { export interface HtgBeneficiary { beneficiaryType: 'INDIVIDUAL'; + /** + * The country of residence of the beneficiary + */ + countryOfResidence: string; + /** * The full name of the beneficiary */ @@ -650,11 +640,6 @@ export interface HtgBeneficiary { */ birthDate?: string; - /** - * The country of residence of the beneficiary - */ - countryOfResidence?: string; - /** * The email of the beneficiary */ @@ -724,6 +709,11 @@ export interface JmdBeneficiary { beneficiaryType: 'INDIVIDUAL'; + /** + * The country of residence of the beneficiary + */ + countryOfResidence: string; + /** * The full name of the beneficiary */ @@ -739,11 +729,6 @@ export interface JmdBeneficiary { */ birthDate?: string; - /** - * The country of residence of the beneficiary - */ - countryOfResidence?: string; - /** * The email of the beneficiary */ @@ -768,11 +753,6 @@ export interface JmdExternalAccountCreateInfo { */ bankAccountType: 'CHECKING' | 'SAVINGS'; - /** - * The name of the bank - */ - bankName: string; - beneficiary: JmdBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; /** @@ -988,6 +968,11 @@ export interface PhpExternalAccountCreateInfo { export interface PkrBeneficiary { beneficiaryType: 'INDIVIDUAL'; + /** + * The country of residence of the beneficiary + */ + countryOfResidence: string; + /** * The full name of the beneficiary */ @@ -1000,11 +985,6 @@ export interface PkrBeneficiary { */ birthDate?: string; - /** - * The country of residence of the beneficiary - */ - countryOfResidence?: string; - /** * The email of the beneficiary */ From 75b1675f61d88b0657e36f8b4e3fe569dd0b1eda Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 03:21:14 +0000 Subject: [PATCH 03/26] fix(types): make fields optional in BDT/GHS/PKR account types --- .stats.yml | 4 +- packages/mcp-server/src/local-docs-search.ts | 26 +++++------ src/resources/platform/external-accounts.ts | 46 ++++++++++---------- src/resources/shared.ts | 46 ++++++++++---------- 4 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.stats.yml b/.stats.yml index 79a6d1a..72c7f16 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark%2Fgrid-8f060a4f19e3d7743af0785132344fdb0cbc3f68c1a0f7ad14391abb6add9cfa.yml -openapi_spec_hash: 398aa35d4cd9f69a66591c5fbc016e03 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark%2Fgrid-8dda19f5ffefa2dc8a788591b75019a5aa18290cb2972dee4ead39ed20d66e5b.yml +openapi_spec_hash: 8f93612be6357ca06485ce98339e740f config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 88860e3..d18a255 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -371,7 +371,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }", markdown: - "## list_internal_accounts\n\n`client.customers.listInternalAccounts(currency?: string, cursor?: string, customerId?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**get** `/customers/internal-accounts`\n\nRetrieve a list of internal accounts with optional filtering parameters. Returns all\ninternal accounts that match the specified filters. If no filters are provided, returns all internal accounts\n(paginated).\n\nInternal accounts are created automatically when a customer is created based on the platform configuration.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by internal accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for a customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for the platform-managed holding accounts.\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.customers.listInternalAccounts()) {\n console.log(internalAccount);\n}\n```", + "## list_internal_accounts\n\n`client.customers.listInternalAccounts(currency?: string, cursor?: string, customerId?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**get** `/customers/internal-accounts`\n\nRetrieve a list of internal accounts with optional filtering parameters. Returns all\ninternal accounts that match the specified filters. If no filters are provided, returns all internal accounts\n(paginated).\n\nInternal accounts are created automatically when a customer is created based on the platform configuration.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by internal accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for a customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for the platform-managed holding accounts.\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.customers.listInternalAccounts()) {\n console.log(internalAccount);\n}\n```", perLanguage: { typescript: { method: 'client.customers.listInternalAccounts', @@ -407,7 +407,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## list\n\n`client.customers.externalAccounts.list(currency?: string, cursor?: string, customerId?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts`\n\nRetrieve a list of external accounts with optional filtering parameters. Returns all\nexternal accounts that match the specified filters. If no filters are provided, returns all external accounts\n(paginated).\n\nExternal accounts are bank accounts, cryptocurrency wallets, or other payment destinations that customers can use to receive funds from the platform.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by external accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.customers.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", + "## list\n\n`client.customers.externalAccounts.list(currency?: string, cursor?: string, customerId?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts`\n\nRetrieve a list of external accounts with optional filtering parameters. Returns all\nexternal accounts that match the specified filters. If no filters are provided, returns all external accounts\n(paginated).\n\nExternal accounts are bank accounts, cryptocurrency wallets, or other payment destinations that customers can use to receive funds from the platform.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by external accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.customers.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.list', @@ -439,7 +439,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) customers.external_accounts > (method) create', qualified: 'client.customers.externalAccounts.create', params: [ - "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", + "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', 'cryptoNetwork?: string;', 'customerId?: string;', @@ -449,7 +449,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: pkr_beneficiary | business_beneficiary; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, cryptoNetwork?: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `cryptoNetwork?: string`\n The blockchain network for this external account. Required when the account is a cryptocurrency wallet. Specifies which network the wallet is on. Example values: SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST.\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, cryptoNetwork?: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `cryptoNetwork?: string`\n The blockchain network for this external account. Required when the account is a cryptocurrency wallet. Specifies which network the wallet is on. Example values: SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST.\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.create', @@ -484,7 +484,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## retrieve\n\n`client.customers.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts/{externalAccountId}`\n\nRetrieve a customer external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", + "## retrieve\n\n`client.customers.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts/{externalAccountId}`\n\nRetrieve a customer external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.retrieve', @@ -692,14 +692,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) platform.external_accounts > (method) create', qualified: 'client.platform.externalAccounts.create', params: [ - "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", + "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', 'platformAccountId?: string;', ], response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: pkr_beneficiary | business_beneficiary; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.create', @@ -734,7 +734,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## retrieve\n\n`client.platform.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/platform/external-accounts/{externalAccountId}`\n\nRetrieve a platform external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", + "## retrieve\n\n`client.platform.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/platform/external-accounts/{externalAccountId}`\n\nRetrieve a platform external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.retrieve', @@ -956,7 +956,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", markdown: - "## retrieve\n\n`client.quotes.retrieve(quoteId: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**get** `/quotes/{quoteId}`\n\nRetrieve a quote by its ID. If the quote has been settled, it will include\nthe transaction ID. This allows clients to track the full lifecycle of a payment\nfrom quote creation to settlement.\n\n\n### Parameters\n\n- `quoteId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.retrieve('quoteId');\n\nconsole.log(quote);\n```", + "## retrieve\n\n`client.quotes.retrieve(quoteId: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**get** `/quotes/{quoteId}`\n\nRetrieve a quote by its ID. If the quote has been settled, it will include\nthe transaction ID. This allows clients to track the full lifecycle of a payment\nfrom quote creation to settlement.\n\n\n### Parameters\n\n- `quoteId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.retrieve('quoteId');\n\nconsole.log(quote);\n```", perLanguage: { typescript: { method: 'client.quotes.retrieve', @@ -1003,7 +1003,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", markdown: - "## create\n\n`client.quotes.create(destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }, lockedCurrencyAmount: number, lockedCurrencySide: 'SENDING' | 'RECEIVING', source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }, description?: string, immediatelyExecute?: boolean, lookupId?: string, purposeOfPayment?: string, senderCustomerInfo?: object, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes`\n\nGenerate a quote for a cross-currency transfer between any combination of accounts\nand UMA addresses. This endpoint handles currency exchange and provides the necessary\ninstructions to execute the transfer.\n\n**Transfer Types Supported:**\n- **Account to Account**: Transfer between internal/external accounts with currency exchange.\n- **Account to UMA**: Transfer from an internal account to an UMA address.\n- **UMA to Account or UMA to UMA**: This transfer type will only be funded by payment instructions, not from an internal account.\n\n**Key Features:**\n- **Flexible Amount Locking**: Always specify whether you want to lock the sending amount or receiving amount\n- **Currency Exchange**: Handles all cross-currency transfers with real-time exchange rates\n- **Payment Instructions**: For UMA or customer ID sources, provides banking details needed for execution\n\n**Important:** If you are transferring funds in the same currency (no exchange required),\nuse the `/transfer-in` or `/transfer-out` endpoints instead.\n\n\n### Parameters\n\n- `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n Destination account details\n\n- `lockedCurrencyAmount: number`\n The amount to send/receive in the smallest unit of the locked currency (eg. cents). See `lockedCurrencySide` for more information.\n\n- `lockedCurrencySide: 'SENDING' | 'RECEIVING'`\n The side of the quote which should be locked and specified in the `lockedCurrencyAmount`. For example, if I want to send exactly $5 MXN from my wallet, I would set this to \"sending\", and the `lockedCurrencyAmount` to 500 (in cents). If I want the receiver to receive exactly $10 USD, I would set this to \"receiving\" and the `lockedCurrencyAmount` to 10000 (in cents).\n\n- `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n Source account details\n\n- `description?: string`\n Optional description/memo for the transfer\n\n- `immediatelyExecute?: boolean`\n Whether to immediately execute the quote after creation. If true, the quote will be executed and the transaction will be created at the current exchange rate. It should only be used if you don't want to lock and view rate details before executing the quote. If you are executing a pre-existing quote, use the `/quotes/{quoteId}/execute` endpoint instead. This is false by default.\nThis can only be used for quotes with a `source` which is either an internal account, or has direct pull functionality (e.g. ACH pull with an external account).\nNot supported when the `source` is an internal account of type `EMBEDDED_WALLET`: those transfers require a `Grid-Wallet-Signature` over the `payloadToSign` returned in the quote response, which is not available in a combined create-and-execute call. Create the quote first with `immediatelyExecute: false` and then call `POST /quotes/{quoteId}/execute` with the signature header.\n\n- `lookupId?: string`\n Lookup ID from a previous receiver lookup request. If provided, this can make the quote creation more efficient by reusing cached lookup data.\nNOTE: This is required for UMA destinations due to counterparty institution requirements. See `senderCustomerInfo` for more information.\n\n- `purposeOfPayment?: string`\n The purpose of the payment. This may be required when sending to certain geographies (e.g. India).\n\n- `senderCustomerInfo?: object`\n Key-value pairs of additional information about the sender which was requested by the destination. This is relevant when the destination requires more sender info than was provided during customer creation.\nAny fields specified in `requiredPayerDataFields` from the response of the `/receiver/uma/{receiverUmaAddress}` (lookupUma) or `/receiver/external-account/{accountId}` (lookupExternalAccount) endpoints MUST be provided here if they were requested. If the destination did not request any additional information, this field can be omitted.\n\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.create({\n destination: { accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', destinationType: 'ACCOUNT' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', sourceType: 'ACCOUNT' },\n});\n\nconsole.log(quote);\n```", + "## create\n\n`client.quotes.create(destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }, lockedCurrencyAmount: number, lockedCurrencySide: 'SENDING' | 'RECEIVING', source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }, description?: string, immediatelyExecute?: boolean, lookupId?: string, purposeOfPayment?: string, senderCustomerInfo?: object, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes`\n\nGenerate a quote for a cross-currency transfer between any combination of accounts\nand UMA addresses. This endpoint handles currency exchange and provides the necessary\ninstructions to execute the transfer.\n\n**Transfer Types Supported:**\n- **Account to Account**: Transfer between internal/external accounts with currency exchange.\n- **Account to UMA**: Transfer from an internal account to an UMA address.\n- **UMA to Account or UMA to UMA**: This transfer type will only be funded by payment instructions, not from an internal account.\n\n**Key Features:**\n- **Flexible Amount Locking**: Always specify whether you want to lock the sending amount or receiving amount\n- **Currency Exchange**: Handles all cross-currency transfers with real-time exchange rates\n- **Payment Instructions**: For UMA or customer ID sources, provides banking details needed for execution\n\n**Important:** If you are transferring funds in the same currency (no exchange required),\nuse the `/transfer-in` or `/transfer-out` endpoints instead.\n\n\n### Parameters\n\n- `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n Destination account details\n\n- `lockedCurrencyAmount: number`\n The amount to send/receive in the smallest unit of the locked currency (eg. cents). See `lockedCurrencySide` for more information.\n\n- `lockedCurrencySide: 'SENDING' | 'RECEIVING'`\n The side of the quote which should be locked and specified in the `lockedCurrencyAmount`. For example, if I want to send exactly $5 MXN from my wallet, I would set this to \"sending\", and the `lockedCurrencyAmount` to 500 (in cents). If I want the receiver to receive exactly $10 USD, I would set this to \"receiving\" and the `lockedCurrencyAmount` to 10000 (in cents).\n\n- `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n Source account details\n\n- `description?: string`\n Optional description/memo for the transfer\n\n- `immediatelyExecute?: boolean`\n Whether to immediately execute the quote after creation. If true, the quote will be executed and the transaction will be created at the current exchange rate. It should only be used if you don't want to lock and view rate details before executing the quote. If you are executing a pre-existing quote, use the `/quotes/{quoteId}/execute` endpoint instead. This is false by default.\nThis can only be used for quotes with a `source` which is either an internal account, or has direct pull functionality (e.g. ACH pull with an external account).\nNot supported when the `source` is an internal account of type `EMBEDDED_WALLET`: those transfers require a `Grid-Wallet-Signature` over the `payloadToSign` returned in the quote response, which is not available in a combined create-and-execute call. Create the quote first with `immediatelyExecute: false` and then call `POST /quotes/{quoteId}/execute` with the signature header.\n\n- `lookupId?: string`\n Lookup ID from a previous receiver lookup request. If provided, this can make the quote creation more efficient by reusing cached lookup data.\nNOTE: This is required for UMA destinations due to counterparty institution requirements. See `senderCustomerInfo` for more information.\n\n- `purposeOfPayment?: string`\n The purpose of the payment. This may be required when sending to certain geographies (e.g. India).\n\n- `senderCustomerInfo?: object`\n Key-value pairs of additional information about the sender which was requested by the destination. This is relevant when the destination requires more sender info than was provided during customer creation.\nAny fields specified in `requiredPayerDataFields` from the response of the `/receiver/uma/{receiverUmaAddress}` (lookupUma) or `/receiver/external-account/{accountId}` (lookupExternalAccount) endpoints MUST be provided here if they were requested. If the destination did not request any additional information, this field can be omitted.\n\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.create({\n destination: { accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', destinationType: 'ACCOUNT' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', sourceType: 'ACCOUNT' },\n});\n\nconsole.log(quote);\n```", perLanguage: { typescript: { method: 'client.quotes.create', @@ -1039,7 +1039,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", markdown: - "## execute\n\n`client.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes/{quoteId}/execute`\n\nExecute a quote by its ID. This endpoint initiates the transfer between\nthe source and destination accounts.\n\nThis endpoint can only be used for quotes with a `source` which is either an internal account,\nor has direct pull functionality (e.g. ACH pull with an external account).\n\nWhen the quote's `source` is an internal account of type `EMBEDDED_WALLET`,\nthe request must include a `Grid-Wallet-Signature` header. The signature is\nproduced by signing the `payloadToSign` value from the quote's\n`paymentInstructions[].accountOrWalletInfo` entry with the session private\nkey of a verified authentication credential on the source Embedded Wallet.\n\nOnce executed, the quote cannot be cancelled and the transfer will be processed.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(quote);\n```", + "## execute\n\n`client.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/quotes/{quoteId}/execute`\n\nExecute a quote by its ID. This endpoint initiates the transfer between\nthe source and destination accounts.\n\nThis endpoint can only be used for quotes with a `source` which is either an internal account,\nor has direct pull functionality (e.g. ACH pull with an external account).\n\nWhen the quote's `source` is an internal account of type `EMBEDDED_WALLET`,\nthe request must include a `Grid-Wallet-Signature` header. The signature is\nproduced by signing the `payloadToSign` value from the quote's\n`paymentInstructions[].accountOrWalletInfo` entry with the session private\nkey of a verified authentication credential on the source Embedded Wallet.\n\nOnce executed, the quote cannot be cancelled and the transfer will be processed.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(quote);\n```", perLanguage: { typescript: { method: 'client.quotes.execute', @@ -1374,7 +1374,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }", markdown: - "## send_funds\n\n`client.sandbox.sendFunds(currencyCode: string, quoteId: string, currencyAmount?: number): { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }`\n\n**post** `/sandbox/send`\n\nSimulate sending funds to the bank account as instructed in the quote.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `currencyCode: string`\n Currency code for the funds to be sent\n\n- `quoteId: string`\n The unique identifier of the quote\n\n- `currencyAmount?: number`\n The amount to send in the smallest unit of the currency (eg. cents). If not provided, the amount will be derived from the quote.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: { amount: number; currency: currency; }; source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; quoteId?: string; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; receivedAmount?: { amount: number; currency: currency; }; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `sentAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'`\n - `type: 'OUTGOING' | 'INCOMING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `exchangeRate?: number`\n - `failureReason?: string`\n - `fees?: number`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `quoteId?: string`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `receivedAmount?: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }`\n - `settledAt?: string`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst outgoingTransaction = await client.sandbox.sendFunds({ currencyCode: 'USD', quoteId: 'Quote:019542f5-b3e7-1d02-0000-000000000006' });\n\nconsole.log(outgoingTransaction);\n```", + "## send_funds\n\n`client.sandbox.sendFunds(currencyCode: string, quoteId: string, currencyAmount?: number): { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }`\n\n**post** `/sandbox/send`\n\nSimulate sending funds to the bank account as instructed in the quote.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `currencyCode: string`\n Currency code for the funds to be sent\n\n- `quoteId: string`\n The unique identifier of the quote\n\n- `currencyAmount?: number`\n The amount to send in the smallest unit of the currency (eg. cents). If not provided, the amount will be derived from the quote.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: { amount: number; currency: currency; }; source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; quoteId?: string; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; receivedAmount?: { amount: number; currency: currency; }; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `sentAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'`\n - `type: 'OUTGOING' | 'INCOMING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `exchangeRate?: number`\n - `failureReason?: string`\n - `fees?: number`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `quoteId?: string`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `receivedAmount?: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }`\n - `settledAt?: string`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst outgoingTransaction = await client.sandbox.sendFunds({ currencyCode: 'USD', quoteId: 'Quote:019542f5-b3e7-1d02-0000-000000000006' });\n\nconsole.log(outgoingTransaction);\n```", perLanguage: { typescript: { method: 'client.sandbox.sendFunds', @@ -1452,7 +1452,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }", markdown: - "## fund\n\n`client.sandbox.internalAccounts.fund(accountId: string, amount: number): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**post** `/sandbox/internal-accounts/{accountId}/fund`\n\nSimulate receiving funds into an internal account in the sandbox environment. This is useful for testing scenarios where you need to add funds to a customer's or platform's internal account without going through a real bank transfer or following payment instructions.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `accountId: string`\n\n- `amount: number`\n Amount to add in the smallest unit of the account's currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountNumber: string; accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; branchCode?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PKR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; phoneNumber: string; iban?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst internalAccount = await client.sandbox.internalAccounts.fund('InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', { amount: 100000 });\n\nconsole.log(internalAccount);\n```", + "## fund\n\n`client.sandbox.internalAccounts.fund(accountId: string, amount: number): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**post** `/sandbox/internal-accounts/{accountId}/fund`\n\nSimulate receiving funds into an internal account in the sandbox environment. This is useful for testing scenarios where you need to add funds to a customer's or platform's internal account without going through a real bank transfer or following payment instructions.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `accountId: string`\n\n- `amount: number`\n Amount to add in the smallest unit of the account's currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst internalAccount = await client.sandbox.internalAccounts.fund('InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', { amount: 100000 });\n\nconsole.log(internalAccount);\n```", perLanguage: { typescript: { method: 'client.sandbox.internalAccounts.fund', diff --git a/src/resources/platform/external-accounts.ts b/src/resources/platform/external-accounts.ts index cec93b0..314b62d 100644 --- a/src/resources/platform/external-accounts.ts +++ b/src/resources/platform/external-accounts.ts @@ -121,25 +121,25 @@ export interface AedAccountInfo { } export interface BdtAccountInfo { - /** - * The account number of the bank - */ - accountNumber: string; - accountType: 'BDT_ACCOUNT'; paymentRails: Array<'BANK_TRANSFER' | 'MOBILE_MONEY'>; /** - * The phone number in international format + * The account number of the bank */ - phoneNumber: string; + accountNumber?: string; /** * The branch code */ branchCode?: string; + /** + * The phone number in international format + */ + phoneNumber?: string; + /** * The SWIFT/BIC code of the bank */ @@ -300,19 +300,19 @@ export interface GbpAccountInfo { } export interface GhsAccountInfo { - /** - * The account number of the bank - */ - accountNumber: string; - accountType: 'GHS_ACCOUNT'; paymentRails: Array<'BANK_TRANSFER' | 'MOBILE_MONEY'>; + /** + * The account number of the bank + */ + accountNumber?: string; + /** * The phone number in international format */ - phoneNumber: string; + phoneNumber?: string; } export interface GtqAccountInfo { @@ -518,29 +518,29 @@ export interface PhpAccountInfo { } export interface PkrAccountInfo { + accountType: 'PKR_ACCOUNT'; + + paymentRails: Array<'BANK_TRANSFER' | 'MOBILE_MONEY'>; + /** * The account number of the bank */ - accountNumber: string; - - accountType: 'PKR_ACCOUNT'; + accountNumber?: string; /** * The name of the bank */ - bankName: string; - - paymentRails: Array<'BANK_TRANSFER' | 'MOBILE_MONEY'>; + bankName?: string; /** - * The phone number in international format + * Pakistani IBAN (24 characters, starting with PK) */ - phoneNumber: string; + iban?: string; /** - * Pakistani IBAN (24 characters, starting with PK) + * The phone number in international format */ - iban?: string; + phoneNumber?: string; } export interface RwfAccountInfo { diff --git a/src/resources/shared.ts b/src/resources/shared.ts index 5eeca7d..76fdd8e 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -91,25 +91,25 @@ export interface BdtBeneficiary { } export interface BdtExternalAccountCreateInfo { - /** - * The account number of the bank - */ - accountNumber: string; - accountType: 'BDT_ACCOUNT'; beneficiary: BdtBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; /** - * The phone number in international format + * The account number of the bank */ - phoneNumber: string; + accountNumber?: string; /** * The branch code */ branchCode?: string; + /** + * The phone number in international format + */ + phoneNumber?: string; + /** * The SWIFT/BIC code of the bank */ @@ -532,19 +532,19 @@ export interface GhsBeneficiary { } export interface GhsExternalAccountCreateInfo { - /** - * The account number of the bank - */ - accountNumber: string; - accountType: 'GHS_ACCOUNT'; beneficiary: GhsBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; + /** + * The account number of the bank + */ + accountNumber?: string; + /** * The phone number in international format */ - phoneNumber: string; + phoneNumber?: string; } export interface GtqBeneficiary { @@ -1002,29 +1002,29 @@ export interface PkrBeneficiary { } export interface PkrExternalAccountCreateInfo { + accountType: 'PKR_ACCOUNT'; + + beneficiary: PkrBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; + /** * The account number of the bank */ - accountNumber: string; - - accountType: 'PKR_ACCOUNT'; + accountNumber?: string; /** * The name of the bank */ - bankName: string; - - beneficiary: PkrBeneficiary | ExternalAccountsAPI.BusinessBeneficiary; + bankName?: string; /** - * The phone number in international format + * Pakistani IBAN (24 characters, starting with PK) */ - phoneNumber: string; + iban?: string; /** - * Pakistani IBAN (24 characters, starting with PK) + * The phone number in international format */ - iban?: string; + phoneNumber?: string; } export interface RwfBeneficiary { From e3444b43c1a0f8b04bc6a39b864ebac19012bc8a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 03:27:46 +0000 Subject: [PATCH 04/26] chore(internal): codegen related update --- packages/mcp-server/src/local-docs-search.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index d18a255..a986e97 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -464,7 +464,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ kotlin: { method: 'customers().externalAccounts().create', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.UsdExternalAccountCreateInfo\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreate\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreateParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ExternalAccountCreate = ExternalAccountCreate.builder()\n .accountInfo(UsdExternalAccountCreateInfo.builder()\n .accountNumber("12345678901")\n .accountType(UsdExternalAccountCreateInfo.AccountType.USD_ACCOUNT)\n .individualBeneficiary("John Doe")\n .routingNumber("123456789")\n .build())\n .currency("USD")\n .build()\n val externalAccount: ExternalAccount = client.customers().externalAccounts().create(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.UsdExternalAccountCreateInfo\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreate\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ExternalAccountCreate = ExternalAccountCreate.builder()\n .accountInfo(UsdExternalAccountCreateInfo.builder()\n .accountNumber("12345678901")\n .accountType(UsdExternalAccountCreateInfo.AccountType.USD_ACCOUNT)\n .individualBeneficiary("John Doe")\n .routingNumber("123456789")\n .build())\n .currency("USD")\n .build()\n val externalAccount: ExternalAccount = client.customers().externalAccounts().create(params)\n}', }, http: { example: From 7f042f33f721a05e26f66da079892dc6b33994f3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 03:30:49 +0000 Subject: [PATCH 05/26] chore(format): run eslint and prettier separately --- eslint.config.mjs | 3 - package.json | 1 - pnpm-lock.yaml | 3996 ++++++++++++++++++++++++++++++----------- scripts/fast-format | 9 +- scripts/format | 3 +- scripts/lint | 3 + src/internal/types.ts | 14 +- 7 files changed, 2951 insertions(+), 1078 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 1438f16..d5709e0 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,7 +1,6 @@ // @ts-check import tseslint from 'typescript-eslint'; import unusedImports from 'eslint-plugin-unused-imports'; -import prettier from 'eslint-plugin-prettier'; export default tseslint.config( { @@ -14,11 +13,9 @@ export default tseslint.config( plugins: { '@typescript-eslint': tseslint.plugin, 'unused-imports': unusedImports, - prettier, }, rules: { 'no-unused-vars': 'off', - 'prettier/prettier': 'error', 'unused-imports/no-unused-imports': 'error', 'no-restricted-imports': [ 'error', diff --git a/package.json b/package.json index 7d9d011..062b20a 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ "@typescript-eslint/parser": "8.31.1", "@typescript-eslint/typescript-estree": "8.31.1", "eslint": "^9.39.1", - "eslint-plugin-prettier": "^5.4.1", "eslint-plugin-unused-imports": "^4.1.4", "iconv-lite": "^0.6.3", "jest": "^29.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74cc367..594fec0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,6 @@ overrides: minimatch: ^9.0.5 importers: - .: devDependencies: '@arethetypeswrong/cli': @@ -38,9 +37,6 @@ importers: eslint: specifier: ^9.39.1 version: 9.39.1 - eslint-plugin-prettier: - specifier: ^5.4.1 - version: 5.4.1(eslint@9.39.1)(prettier@3.1.1) eslint-plugin-unused-imports: specifier: ^4.1.4 version: 4.1.4(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.39.1)(typescript@5.8.3))(eslint@9.39.1)(typescript@5.8.3))(eslint@9.39.1) @@ -206,344 +202,574 @@ importers: version: 4.2.0 packages: - '@andrewbranch/untar.js@1.0.3': - resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + resolution: + { + integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==, + } '@anthropic-ai/mcpb@2.1.2': - resolution: {integrity: sha512-goRbBC8ySo7SWb7tRzr+tL6FxDc4JPTRCdgfD2omba7freofvjq5rom1lBnYHZHo6Mizs1jAHJeN53aZbDoy8A==} + resolution: + { + integrity: sha512-goRbBC8ySo7SWb7tRzr+tL6FxDc4JPTRCdgfD2omba7freofvjq5rom1lBnYHZHo6Mizs1jAHJeN53aZbDoy8A==, + } hasBin: true '@arethetypeswrong/cli@0.17.0': - resolution: {integrity: sha512-xSMW7bfzVWpYw5JFgZqBXqr6PdR0/REmn3DkxCES5N0JTcB0CVgbIynJCvKBFmXaPc3hzmmTrb7+yPDRoOSZdA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-xSMW7bfzVWpYw5JFgZqBXqr6PdR0/REmn3DkxCES5N0JTcB0CVgbIynJCvKBFmXaPc3hzmmTrb7+yPDRoOSZdA==, + } + engines: { node: '>=18' } hasBin: true '@arethetypeswrong/core@0.17.0': - resolution: {integrity: sha512-FHyhFizXNetigTVsIhqXKGYLpazPS5YNojEPpZEUcBPt9wVvoEbNIvG+hybuBR+pjlRcbyuqhukHZm1fr+bDgA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-FHyhFizXNetigTVsIhqXKGYLpazPS5YNojEPpZEUcBPt9wVvoEbNIvG+hybuBR+pjlRcbyuqhukHZm1fr+bDgA==, + } + engines: { node: '>=18' } '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==, + } + engines: { node: '>=6.9.0' } '@babel/compat-data@7.28.6': - resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==, + } + engines: { node: '>=6.9.0' } '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==, + } + engines: { node: '>=6.9.0' } '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==, + } + engines: { node: '>=6.9.0' } '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==, + } + engines: { node: '>=6.9.0' } '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, + } + engines: { node: '>=6.9.0' } '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==, + } + engines: { node: '>=6.9.0' } '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==, + } + engines: { node: '>=6.9.0' } '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, + } + engines: { node: '>=6.9.0' } '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, + } + engines: { node: '>=6.9.0' } '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, + } + engines: { node: '>=6.9.0' } '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==, + } + engines: { node: '>=6.9.0' } '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==, + } + engines: { node: '>=6.0.0' } hasBin: true '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + resolution: + { + integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + resolution: + { + integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + resolution: + { + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-attributes@7.28.6': - resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + resolution: + { + integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + resolution: + { + integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + resolution: + { + integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + resolution: + { + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + resolution: + { + integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + resolution: + { + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + resolution: + { + integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + resolution: + { + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, + } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, + } + engines: { node: '>=6.9.0' } '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==, + } + engines: { node: '>=6.9.0' } '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==, + } + engines: { node: '>=6.9.0' } '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + resolution: + { + integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, + } '@cloudflare/cabidela@0.2.4': - resolution: {integrity: sha512-u/1OwwqfcMvjmUFOcb6QtFzVVGpncHJxwl254wjzp0JC5CUlBkV6r5BbRrHI5ZYJEAgu8NeeorirxngmMFPZjQ==} + resolution: + { + integrity: sha512-u/1OwwqfcMvjmUFOcb6QtFzVVGpncHJxwl254wjzp0JC5CUlBkV6r5BbRrHI5ZYJEAgu8NeeorirxngmMFPZjQ==, + } '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} + resolution: + { + integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, + } + engines: { node: '>=0.1.90' } '@cspotcode/source-map-consumer@0.8.0': - resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==, + } + engines: { node: '>= 12' } '@cspotcode/source-map-support@0.7.0': - resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==, + } + engines: { node: '>=12' } '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + resolution: + { + integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + resolution: + { + integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@eslint/js@9.39.1': - resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@hono/node-server@1.19.11': - resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} - engines: {node: '>=18.14.1'} + resolution: + { + integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==, + } + engines: { node: '>=18.14.1' } peerDependencies: hono: ^4 '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} + resolution: + { + integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, + } + engines: { node: '>=18.18.0' } '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} + resolution: + { + integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==, + } + engines: { node: '>=18.18.0' } '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: '>=12.22' } '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} + resolution: + { + integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, + } + engines: { node: '>=18.18' } '@inquirer/checkbox@3.0.1': - resolution: {integrity: sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==, + } + engines: { node: '>=18' } '@inquirer/confirm@4.0.1': - resolution: {integrity: sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==, + } + engines: { node: '>=18' } '@inquirer/core@9.2.1': - resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==, + } + engines: { node: '>=18' } '@inquirer/editor@3.0.1': - resolution: {integrity: sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==, + } + engines: { node: '>=18' } '@inquirer/expand@3.0.1': - resolution: {integrity: sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==, + } + engines: { node: '>=18' } '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==, + } + engines: { node: '>=18' } '@inquirer/input@3.0.1': - resolution: {integrity: sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==, + } + engines: { node: '>=18' } '@inquirer/number@2.0.1': - resolution: {integrity: sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==, + } + engines: { node: '>=18' } '@inquirer/password@3.0.1': - resolution: {integrity: sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==, + } + engines: { node: '>=18' } '@inquirer/prompts@6.0.1': - resolution: {integrity: sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==, + } + engines: { node: '>=18' } '@inquirer/rawlist@3.0.1': - resolution: {integrity: sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==, + } + engines: { node: '>=18' } '@inquirer/search@2.0.1': - resolution: {integrity: sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==, + } + engines: { node: '>=18' } '@inquirer/select@3.0.1': - resolution: {integrity: sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==, + } + engines: { node: '>=18' } '@inquirer/type@2.0.0': - resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==, + } + engines: { node: '>=18' } '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, + } + engines: { node: '>=8' } '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, + } + engines: { node: '>=8' } '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -551,32 +777,53 @@ packages: optional: true '@jest/create-cache-key-function@29.7.0': - resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -584,54 +831,96 @@ packages: optional: true '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + resolution: + { + integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, + } '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + resolution: + { + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, + } '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, + } + engines: { node: '>=6.0.0' } '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + resolution: + { + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + } '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + } '@jridgewell/trace-mapping@0.3.20': - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + resolution: + { + integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==, + } '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, + } '@modelcontextprotocol/sdk@1.27.1': - resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==, + } + engines: { node: '>=18' } peerDependencies: '@cfworker/json-schema': ^4.1.1 zod: ^3.25 || ^4.0 @@ -640,104 +929,164 @@ packages: optional: true '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: '>= 8' } '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: '>= 8' } '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: '>= 8' } '@pinojs/redact@0.4.0': - resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + resolution: + { + integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==, + } '@pkgr/core@0.2.4': - resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==, + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + } '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==, + } + engines: { node: '>=10' } '@sinonjs/commons@3.0.0': - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + resolution: + { + integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==, + } '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + resolution: + { + integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==, + } '@swc/core-darwin-arm64@1.4.16': - resolution: {integrity: sha512-UOCcH1GvjRnnM/LWT6VCGpIk0OhHRq6v1U6QXuPt5wVsgXnXQwnf5k3sG5Cm56hQHDvhRPY6HCsHi/p0oek8oQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-UOCcH1GvjRnnM/LWT6VCGpIk0OhHRq6v1U6QXuPt5wVsgXnXQwnf5k3sG5Cm56hQHDvhRPY6HCsHi/p0oek8oQ==, + } + engines: { node: '>=10' } cpu: [arm64] os: [darwin] '@swc/core-darwin-x64@1.4.16': - resolution: {integrity: sha512-t3bgqFoYLWvyVtVL6KkFNCINEoOrIlyggT/kJRgi1y0aXSr0oVgcrQ4ezJpdeahZZ4N+Q6vT3ffM30yIunELNA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-t3bgqFoYLWvyVtVL6KkFNCINEoOrIlyggT/kJRgi1y0aXSr0oVgcrQ4ezJpdeahZZ4N+Q6vT3ffM30yIunELNA==, + } + engines: { node: '>=10' } cpu: [x64] os: [darwin] '@swc/core-linux-arm-gnueabihf@1.4.16': - resolution: {integrity: sha512-DvHuwvEF86YvSd0lwnzVcjOTZ0jcxewIbsN0vc/0fqm9qBdMMjr9ox6VCam1n3yYeRtj4VFgrjeNFksqbUejdQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-DvHuwvEF86YvSd0lwnzVcjOTZ0jcxewIbsN0vc/0fqm9qBdMMjr9ox6VCam1n3yYeRtj4VFgrjeNFksqbUejdQ==, + } + engines: { node: '>=10' } cpu: [arm] os: [linux] '@swc/core-linux-arm64-gnu@1.4.16': - resolution: {integrity: sha512-9Uu5YlPbyCvbidjKtYEsPpyZlu16roOZ5c2tP1vHfnU9bgf5Tz5q5VovSduNxPHx+ed2iC1b1URODHvDzbbDuQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-9Uu5YlPbyCvbidjKtYEsPpyZlu16roOZ5c2tP1vHfnU9bgf5Tz5q5VovSduNxPHx+ed2iC1b1URODHvDzbbDuQ==, + } + engines: { node: '>=10' } cpu: [arm64] os: [linux] libc: [glibc] '@swc/core-linux-arm64-musl@1.4.16': - resolution: {integrity: sha512-/YZq/qB1CHpeoL0eMzyqK5/tYZn/rzKoCYDviFU4uduSUIJsDJQuQA/skdqUzqbheOXKAd4mnJ1hT04RbJ8FPQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-/YZq/qB1CHpeoL0eMzyqK5/tYZn/rzKoCYDviFU4uduSUIJsDJQuQA/skdqUzqbheOXKAd4mnJ1hT04RbJ8FPQ==, + } + engines: { node: '>=10' } cpu: [arm64] os: [linux] libc: [musl] '@swc/core-linux-x64-gnu@1.4.16': - resolution: {integrity: sha512-UUjaW5VTngZYDcA8yQlrFmqs1tLi1TxbKlnaJwoNhel9zRQ0yG1YEVGrzTvv4YApSuIiDK18t+Ip927bwucuVQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-UUjaW5VTngZYDcA8yQlrFmqs1tLi1TxbKlnaJwoNhel9zRQ0yG1YEVGrzTvv4YApSuIiDK18t+Ip927bwucuVQ==, + } + engines: { node: '>=10' } cpu: [x64] os: [linux] libc: [glibc] '@swc/core-linux-x64-musl@1.4.16': - resolution: {integrity: sha512-aFhxPifevDTwEDKPi4eRYWzC0p/WYJeiFkkpNU5Uc7a7M5iMWPAbPFUbHesdlb9Jfqs5c07oyz86u+/HySBNPQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-aFhxPifevDTwEDKPi4eRYWzC0p/WYJeiFkkpNU5Uc7a7M5iMWPAbPFUbHesdlb9Jfqs5c07oyz86u+/HySBNPQ==, + } + engines: { node: '>=10' } cpu: [x64] os: [linux] libc: [musl] '@swc/core-win32-arm64-msvc@1.4.16': - resolution: {integrity: sha512-bTD43MbhIHL2s5QgCwyleaGwl96Gk/scF2TaVKdUe4QlJCDV/YK9h5oIBAp63ckHtE8GHlH4c8dZNBiAXn4Org==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-bTD43MbhIHL2s5QgCwyleaGwl96Gk/scF2TaVKdUe4QlJCDV/YK9h5oIBAp63ckHtE8GHlH4c8dZNBiAXn4Org==, + } + engines: { node: '>=10' } cpu: [arm64] os: [win32] '@swc/core-win32-ia32-msvc@1.4.16': - resolution: {integrity: sha512-/lmZeAN/qV5XbK2SEvi8e2RkIg8FQNYiSA8y2/Zb4gTUMKVO5JMLH0BSWMiIKMstKDPDSxMWgwJaQHF8UMyPmQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-/lmZeAN/qV5XbK2SEvi8e2RkIg8FQNYiSA8y2/Zb4gTUMKVO5JMLH0BSWMiIKMstKDPDSxMWgwJaQHF8UMyPmQ==, + } + engines: { node: '>=10' } cpu: [ia32] os: [win32] '@swc/core-win32-x64-msvc@1.4.16': - resolution: {integrity: sha512-BPAfFfODWXtUu6SwaTTftDHvcbDyWBSI/oanUeRbQR5vVWkXoQ3cxLTsDluc3H74IqXS5z1Uyoe0vNo2hB1opA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-BPAfFfODWXtUu6SwaTTftDHvcbDyWBSI/oanUeRbQR5vVWkXoQ3cxLTsDluc3H74IqXS5z1Uyoe0vNo2hB1opA==, + } + engines: { node: '>=10' } cpu: [x64] os: [win32] '@swc/core@1.4.16': - resolution: {integrity: sha512-Xaf+UBvW6JNuV131uvSNyMXHn+bh6LyKN4tbv7tOUFQpXyz/t9YWRE04emtlUW9Y0qrm/GKFCbY8n3z6BpZbTA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Xaf+UBvW6JNuV131uvSNyMXHn+bh6LyKN4tbv7tOUFQpXyz/t9YWRE04emtlUW9Y0qrm/GKFCbY8n3z6BpZbTA==, + } + engines: { node: '>=10' } peerDependencies: '@swc/helpers': ^0.5.0 peerDependenciesMeta: @@ -745,204 +1094,366 @@ packages: optional: true '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + resolution: + { + integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, + } '@swc/jest@0.2.36': - resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} - engines: {npm: '>= 7.0.0'} + resolution: + { + integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==, + } + engines: { npm: '>= 7.0.0' } peerDependencies: '@swc/core': '*' '@swc/types@0.1.6': - resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==} + resolution: + { + integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==, + } '@ts-morph/common@0.20.0': - resolution: {integrity: sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q==} + resolution: + { + integrity: sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q==, + } '@tsconfig/node10@1.0.8': - resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} + resolution: + { + integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==, + } '@tsconfig/node12@1.0.9': - resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==} + resolution: + { + integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==, + } '@tsconfig/node14@1.0.1': - resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} + resolution: + { + integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==, + } '@tsconfig/node16@1.0.2': - resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} + resolution: + { + integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==, + } '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + resolution: + { + integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, + } '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + resolution: + { + integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==, + } '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + resolution: + { + integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, + } '@types/babel__traverse@7.20.4': - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + resolution: + { + integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==, + } '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + resolution: + { + integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==, + } '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + resolution: + { + integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==, + } '@types/cookie-parser@1.4.10': - resolution: {integrity: sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg==} + resolution: + { + integrity: sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg==, + } peerDependencies: '@types/express': '*' '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + resolution: + { + integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==, + } '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + } '@types/express-serve-static-core@5.0.7': - resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} + resolution: + { + integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==, + } '@types/express@5.0.3': - resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} + resolution: + { + integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==, + } '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + resolution: + { + integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==, + } '@types/http-errors@2.0.5': - resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + resolution: + { + integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==, + } '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + resolution: + { + integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==, + } '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + resolution: + { + integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==, + } '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + resolution: + { + integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==, + } '@types/jest@29.5.11': - resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} + resolution: + { + integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==, + } '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + resolution: + { + integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==, + } '@types/mute-stream@0.0.4': - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + resolution: + { + integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==, + } '@types/node@20.19.11': - resolution: {integrity: sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==} + resolution: + { + integrity: sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==, + } '@types/node@22.19.1': - resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + resolution: + { + integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==, + } '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + resolution: + { + integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==, + } '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + resolution: + { + integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==, + } '@types/send@0.17.5': - resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + resolution: + { + integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==, + } '@types/serve-static@1.15.8': - resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + resolution: + { + integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==, + } '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + resolution: + { + integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==, + } '@types/wrap-ansi@3.0.0': - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + resolution: + { + integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==, + } '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + resolution: + { + integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==, + } '@types/yargs@17.0.32': - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + resolution: + { + integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==, + } '@typescript-eslint/eslint-plugin@8.31.1': - resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/parser@8.31.1': - resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/scope-manager@8.31.1': - resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@typescript-eslint/type-utils@8.31.1': - resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/types@8.31.1': - resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@typescript-eslint/typescript-estree@8.31.1': - resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/utils@8.31.1': - resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/visitor-keys@8.31.1': - resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@valtown/deno-http-worker@0.0.21': - resolution: {integrity: sha512-16kFuUykann75lNytnXXIQlmpzreZjzdyT27ebT3yNGCS3kKaS1iZYWHc3Si9An54Cphwr4qEcviChQkEeJBlA==} - engines: {node: 20 || 22 || 24} + resolution: + { + integrity: sha512-16kFuUykann75lNytnXXIQlmpzreZjzdyT27ebT3yNGCS3kKaS1iZYWHc3Si9An54Cphwr4qEcviChQkEeJBlA==, + } + engines: { node: 20 || 22 || 24 } accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==, + } + engines: { node: '>= 0.6' } acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==, + } + engines: { node: '>=0.4.0' } acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==, + } + engines: { node: '>=0.4.0' } hasBin: true acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==, + } + engines: { node: '>=0.4.0' } hasBin: true aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, + } + engines: { node: '>=8' } ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + resolution: + { + integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==, + } peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -950,262 +1461,466 @@ packages: optional: true ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, + } ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + resolution: + { + integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==, + } ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, + } + engines: { node: '>=8' } ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==, + } + engines: { node: '>=18' } ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: '>=8' } ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==, + } + engines: { node: '>=12' } ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: '>=8' } ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, + } + engines: { node: '>=10' } any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + resolution: + { + integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, + } anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, + } + engines: { node: '>= 8' } arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + resolution: + { + integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, + } argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + } argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } atomic-sleep@1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==, + } + engines: { node: '>=8.0.0' } babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@babel/core': ^7.8.0 babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, + } + engines: { node: '>=8' } babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} + resolution: + { + integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==, + } peerDependencies: '@babel/core': ^7.0.0 || ^8.0.0-0 babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@babel/core': ^7.0.0 balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } baseline-browser-mapping@2.9.14: - resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==} + resolution: + { + integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==, + } hasBin: true body-parser@2.2.2: - resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==, + } + engines: { node: '>=18' } brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + resolution: + { + integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==, + } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: '>=8' } browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + resolution: + { + integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==, + } + engines: { node: '>= 6' } bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + resolution: + { + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, + } buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, + } bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, + } + engines: { node: '>= 0.8' } call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, + } + engines: { node: '>= 0.4' } call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, + } + engines: { node: '>= 0.4' } callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: '>=6' } camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, + } + engines: { node: '>=6' } camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, + } + engines: { node: '>=10' } caniuse-lite@1.0.30001764: - resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==} + resolution: + { + integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==, + } chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: '>=10' } chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + resolution: + { + integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, + } + engines: { node: '>=10' } chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + resolution: + { + integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, + } ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, + } + engines: { node: '>=8' } cjs-module-lexer@1.4.1: - resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + resolution: + { + integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==, + } clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, + } + engines: { node: '>=6' } cli-highlight@2.1.11: - resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} + resolution: + { + integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==, + } + engines: { node: '>=8.0.0', npm: '>=5.0.0' } hasBin: true cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} + resolution: + { + integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==, + } + engines: { node: 10.* || >= 12.* } cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==, + } + engines: { node: '>= 12' } cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + resolution: + { + integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, + } cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: '>=12' } co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + resolution: + { + integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, + } + engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } code-block-writer@12.0.0: - resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} + resolution: + { + integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==, + } collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + resolution: + { + integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==, + } color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: '>=7.0.0' } color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, + } commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, + } + engines: { node: '>=14' } commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==, + } + engines: { node: '>=18' } content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==, + } + engines: { node: '>= 0.6' } content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, + } + engines: { node: '>= 0.6' } convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } cookie-parser@1.4.7: - resolution: {integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==, + } + engines: { node: '>= 0.8.0' } cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + resolution: + { + integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, + } cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} + resolution: + { + integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==, + } + engines: { node: '>=6.6.0' } cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==, + } + engines: { node: '>= 0.6' } cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, + } + engines: { node: '>= 0.10' } create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + resolution: + { + integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, + } cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: '>= 8' } dateformat@4.6.3: - resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + resolution: + { + integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==, + } debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==, + } + engines: { node: '>=6.0' } peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1213,8 +1928,11 @@ packages: optional: true debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, + } + engines: { node: '>=6.0' } peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1222,7 +1940,10 @@ packages: optional: true dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + resolution: + { + integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==, + } peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -1230,96 +1951,171 @@ packages: optional: true deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, + } + engines: { node: '>=0.10.0' } depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, + } + engines: { node: '>= 0.8' } detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, + } + engines: { node: '>=8' } diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + resolution: + { + integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, + } + engines: { node: '>=0.3.1' } dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, + } + engines: { node: '>= 0.4' } ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + resolution: + { + integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, + } electron-to-chromium@1.5.267: - resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + resolution: + { + integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==, + } emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==, + } + engines: { node: '>=12' } emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } emojilib@2.4.0: - resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + resolution: + { + integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==, + } encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==, + } + engines: { node: '>= 0.8' } end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + resolution: + { + integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==, + } environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==, + } + engines: { node: '>=18' } error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, + } es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, + } + engines: { node: '>= 0.4' } es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: '>= 0.4' } es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, + } + engines: { node: '>= 0.4' } escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, + } + engines: { node: '>=6' } escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: '>=6' } escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + resolution: + { + integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, + } escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, + } + engines: { node: '>=8' } escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: '>=10' } eslint-plugin-prettier@5.4.1: - resolution: {integrity: sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==, + } + engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: '@types/eslint': '>=8.0.0' eslint: '>=8.0.0' @@ -1332,7 +2128,10 @@ packages: optional: true eslint-plugin-unused-imports@4.1.4: - resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} + resolution: + { + integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==, + } peerDependencies: '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 eslint: ^9.0.0 || ^8.0.0 @@ -1341,24 +2140,39 @@ packages: optional: true eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint@9.39.1: - resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true peerDependencies: jiti: '*' @@ -1367,392 +2181,695 @@ packages: optional: true espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: '>=4' } hasBin: true esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, + } + engines: { node: '>=0.10' } esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: '>=4.0' } estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: '>=4.0' } esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: '>=0.10.0' } etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, + } + engines: { node: '>= 0.6' } eventsource-parser@3.0.6: - resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==, + } + engines: { node: '>=18.0.0' } eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==, + } + engines: { node: '>=18.0.0' } execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, + } + engines: { node: '>=10' } exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, + } + engines: { node: '>= 0.8.0' } expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } express-rate-limit@8.3.1: - resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} - engines: {node: '>= 16'} + resolution: + { + integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==, + } + engines: { node: '>= 16' } peerDependencies: express: '>= 4.11' express@5.2.1: - resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==, + } + engines: { node: '>= 18' } external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, + } + engines: { node: '>=4' } fast-copy@4.0.2: - resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} + resolution: + { + integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==, + } fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + resolution: + { + integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, + } fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + resolution: + { + integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, + } + engines: { node: '>=8.6.0' } fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + resolution: + { + integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==, + } fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + resolution: + { + integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==, + } fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + resolution: + { + integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, + } fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + resolution: + { + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, + } fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + resolution: + { + integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==, + } file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, + } + engines: { node: '>=16.0.0' } fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: '>=8' } finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==, + } + engines: { node: '>= 0.8' } find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, + } + engines: { node: '>=8' } find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: '>=10' } flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, + } + engines: { node: '>=16' } flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + resolution: + { + integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==, + } flora-colossus@2.0.0: - resolution: {integrity: sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==, + } + engines: { node: '>= 12' } forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, + } + engines: { node: '>= 0.6' } fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==, + } + engines: { node: '>= 0.8' } fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, + } + engines: { node: '>=12' } fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + } fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } fuse.js@7.1.0: - resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==, + } + engines: { node: '>=10' } galactus@1.0.0: - resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==, + } + engines: { node: '>= 12' } gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: '>=6.9.0' } get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, + } + engines: { node: '>= 0.4' } get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, + } + engines: { node: '>=8.0.0' } get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, + } + engines: { node: '>= 0.4' } get-stdin@8.0.0: - resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==, + } + engines: { node: '>=10' } get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, + } + engines: { node: '>=10' } glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: '>= 6' } glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: '>=10.13.0' } glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, + } deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, + } + engines: { node: '>=12' } deprecated: Glob versions prior to v9 are no longer supported globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, + } + engines: { node: '>=18' } gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, + } + engines: { node: '>= 0.4' } graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} + resolution: + { + integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==, + } + engines: { node: '>=0.4.7' } hasBin: true has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: '>=8' } has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, + } + engines: { node: '>= 0.4' } hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==, + } + engines: { node: '>= 0.4' } hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: '>= 0.4' } help-me@5.0.0: - resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + resolution: + { + integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==, + } highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + resolution: + { + integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==, + } hono@4.12.5: - resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==} - engines: {node: '>=16.9.0'} + resolution: + { + integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==, + } + engines: { node: '>=16.9.0' } html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, + } + engines: { node: '>= 0.8' } human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + resolution: + { + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, + } + engines: { node: '>=10.17.0' } iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, + } + engines: { node: '>=0.10.0' } iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, + } + engines: { node: '>=0.10.0' } iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==, + } + engines: { node: '>=0.10.0' } ignore-walk@5.0.1: - resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + resolution: + { + integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: '>= 4' } ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, + } + engines: { node: '>= 4' } import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, + } + engines: { node: '>=6' } import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==, + } + engines: { node: '>=8' } hasBin: true imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: '>=0.8.19' } indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, + } + engines: { node: '>=8' } inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==, + } + engines: { node: '>= 12' } ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, + } + engines: { node: '>= 0.10' } is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + resolution: + { + integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==, + } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: '>=0.10.0' } is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: '>=8' } is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, + } + engines: { node: '>=6' } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: '>=0.10.0' } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: '>=0.12.0' } is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + resolution: + { + integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==, + } is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: '>=8' } isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, + } + engines: { node: '>=8' } istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, + } + engines: { node: '>=8' } istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==, + } + engines: { node: '>=10' } istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, + } + engines: { node: '>=10' } istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, + } + engines: { node: '>=10' } istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==, + } + engines: { node: '>=8' } jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1761,8 +2878,11 @@ packages: optional: true jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -1773,48 +2893,81 @@ packages: optional: true jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, + } + engines: { node: '>=6' } peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -1822,48 +2975,81 @@ packages: optional: true jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1872,695 +3058,1248 @@ packages: optional: true jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + resolution: + { + integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==, + } joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==, + } + engines: { node: '>=10' } jq-web@https://github.com/stainless-api/jq-web/releases/download/v0.8.8/jq-web.tar.gz: - resolution: {integrity: sha512-6nmDSHGJm8Cclf2oSuO9xQ7vt5x5bDiuTKX2rkyW1K7Uo2SHeI4ZvpgMITKy+8p3bbEnKovTPGoHhApa6v/PbA==, tarball: https://github.com/stainless-api/jq-web/releases/download/v0.8.8/jq-web.tar.gz} + resolution: + { + integrity: sha512-6nmDSHGJm8Cclf2oSuO9xQ7vt5x5bDiuTKX2rkyW1K7Uo2SHeI4ZvpgMITKy+8p3bbEnKovTPGoHhApa6v/PbA==, + tarball: https://github.com/stainless-api/jq-web/releases/download/v0.8.8/jq-web.tar.gz, + } version: 0.8.8 js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + resolution: + { + integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==, + } hasBin: true js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + resolution: + { + integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==, + } hasBin: true jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: '>=6' } hasBin: true json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, + } json-schema-typed@8.0.2: - resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + resolution: + { + integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==, + } json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: '>=6' } hasBin: true jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + resolution: + { + integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==, + } jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + resolution: + { + integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==, + } keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, + } + engines: { node: '>=6' } leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, + } + engines: { node: '>=6' } levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: '>= 0.8.0' } lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + } + engines: { node: '>=8' } locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: '>=10' } lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + resolution: + { + integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, + } lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: '>=10' } make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + resolution: + { + integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, + } makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + resolution: + { + integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, + } marked-terminal@7.2.1: - resolution: {integrity: sha512-rQ1MoMFXZICWNsKMiiHwP/Z+92PLKskTPXj+e7uwXmuMPkNn7iTqC+IvDekVm1MPeC9wYQeLxeFaOvudRR/XbQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-rQ1MoMFXZICWNsKMiiHwP/Z+92PLKskTPXj+e7uwXmuMPkNn7iTqC+IvDekVm1MPeC9wYQeLxeFaOvudRR/XbQ==, + } + engines: { node: '>=16.0.0' } peerDependencies: marked: '>=1 <15' marked@9.1.6: - resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} - engines: {node: '>= 16'} + resolution: + { + integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==, + } + engines: { node: '>= 16' } hasBin: true math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + } + engines: { node: '>= 0.4' } media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==, + } + engines: { node: '>= 0.8' } merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==, + } + engines: { node: '>=18' } merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: '>= 8' } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: '>=8.6' } mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==, + } + engines: { node: '>= 0.6' } mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==, + } + engines: { node: '>= 0.6' } mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: '>=6' } minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, + } + engines: { node: '>=16 || 14 >=14.17' } minimist@1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + resolution: + { + integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==, + } minisearch@7.2.0: - resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} + resolution: + { + integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==, + } mkdirp@2.1.6: - resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==, + } + engines: { node: '>=10' } hasBin: true mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, + } + engines: { node: '>=4' } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + resolution: + { + integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + resolution: + { + integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, + } natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==, + } + engines: { node: '>= 0.6' } neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + resolution: + { + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, + } node-emoji@2.1.3: - resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==, + } + engines: { node: '>=18' } node-forge@1.3.2: - resolution: {integrity: sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==} - engines: {node: '>= 6.13.0'} + resolution: + { + integrity: sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==, + } + engines: { node: '>= 6.13.0' } node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, + } node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + resolution: + { + integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==, + } normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, + } + engines: { node: '>=0.10.0' } npm-bundled@2.0.1: - resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + resolution: + { + integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } npm-normalize-package-bin@2.0.0: - resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + resolution: + { + integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } npm-packlist@5.1.3: - resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + resolution: + { + integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } hasBin: true npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + } + engines: { node: '>=8' } object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, + } + engines: { node: '>=0.10.0' } object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, + } + engines: { node: '>= 0.4' } on-exit-leak-free@2.1.2: - resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==, + } + engines: { node: '>=14.0.0' } on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, + } + engines: { node: '>= 0.8' } once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: '>=6' } optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: '>= 0.8.0' } os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, + } + engines: { node: '>=0.10.0' } p-all@3.0.0: - resolution: {integrity: sha512-qUZbvbBFVXm6uJ7U/WDiO0fv6waBMbjlCm4E66oZdRR+egswICarIdHyVSZZHudH8T5SF8x/JG0q0duFzPnlBw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-qUZbvbBFVXm6uJ7U/WDiO0fv6waBMbjlCm4E66oZdRR+egswICarIdHyVSZZHudH8T5SF8x/JG0q0duFzPnlBw==, + } + engines: { node: '>=10' } p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + } + engines: { node: '>=6' } p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: '>=10' } p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + } + engines: { node: '>=8' } p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: '>=10' } p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, + } + engines: { node: '>=10' } p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + } + engines: { node: '>=6' } parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: '>=6' } parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: '>=8' } parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + resolution: + { + integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==, + } parse5@5.1.1: - resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + resolution: + { + integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==, + } parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + resolution: + { + integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, + } parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, + } + engines: { node: '>= 0.8' } path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + resolution: + { + integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==, + } path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: '>=8' } path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + } + engines: { node: '>=0.10.0' } path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: '>=8' } path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + resolution: + { + integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==, + } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: '>=8.6' } pino-abstract-transport@3.0.0: - resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + resolution: + { + integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==, + } pino-http@11.0.0: - resolution: {integrity: sha512-wqg5XIAGRRIWtTk8qPGxkbrfiwEWz1lgedVLvhLALudKXvg1/L2lTFgTGPJ4Z2e3qcRmxoFxDuSdMdMGNM6I1g==} + resolution: + { + integrity: sha512-wqg5XIAGRRIWtTk8qPGxkbrfiwEWz1lgedVLvhLALudKXvg1/L2lTFgTGPJ4Z2e3qcRmxoFxDuSdMdMGNM6I1g==, + } pino-pretty@13.1.3: - resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==} + resolution: + { + integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==, + } hasBin: true pino-std-serializers@7.1.0: - resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + resolution: + { + integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==, + } pino@10.3.1: - resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + resolution: + { + integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==, + } hasBin: true pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, + } + engines: { node: '>= 6' } pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} + resolution: + { + integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==, + } + engines: { node: '>=16.20.0' } pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, + } + engines: { node: '>=8' } prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: '>= 0.8.0' } prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, + } + engines: { node: '>=6.0.0' } prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==, + } + engines: { node: '>=14' } hasBin: true pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, + } + engines: { node: '>=6' } pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } process-warning@5.0.0: - resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + resolution: + { + integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==, + } prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, + } + engines: { node: '>= 6' } proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, + } + engines: { node: '>= 0.10' } publint@0.2.12: - resolution: {integrity: sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==, + } + engines: { node: '>=16' } hasBin: true pump@3.0.4: - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + resolution: + { + integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==, + } punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: '>=6' } pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + resolution: + { + integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==, + } qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} - engines: {node: '>=0.6'} + resolution: + { + integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==, + } + engines: { node: '>=0.6' } queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + resolution: + { + integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==, + } range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, + } + engines: { node: '>= 0.6' } raw-body@3.0.1: - resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==, + } + engines: { node: '>= 0.10' } react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + resolution: + { + integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==, + } readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, + } + engines: { node: '>= 6' } real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} + resolution: + { + integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==, + } + engines: { node: '>= 12.13.0' } require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: '>=0.10.0' } require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + } + engines: { node: '>=0.10.0' } resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, + } + engines: { node: '>=8' } resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: '>=4' } resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + } + engines: { node: '>=8' } resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==, + } + engines: { node: '>=10' } resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolution: + { + integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, + } hasBin: true reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, + } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==, + } + engines: { node: '>= 18' } run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, + } + engines: { node: '>=6' } safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, + } safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==, + } + engines: { node: '>=10' } safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } secure-json-parse@4.1.0: - resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + resolution: + { + integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==, + } semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } hasBin: true semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==, + } + engines: { node: '>=10' } hasBin: true semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==, + } + engines: { node: '>=10' } hasBin: true send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==, + } + engines: { node: '>= 18' } serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==, + } + engines: { node: '>= 18' } setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + resolution: + { + integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, + } shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: '>=8' } shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: '>=8' } side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, + } + engines: { node: '>= 0.4' } side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, + } + engines: { node: '>= 0.4' } side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, + } + engines: { node: '>= 0.4' } side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, + } + engines: { node: '>= 0.4' } signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: '>=14' } sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } skin-tone@2.0.0: - resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==, + } + engines: { node: '>=8' } slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: '>=8' } sonic-boom@4.2.1: - resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + resolution: + { + integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==, + } source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + resolution: + { + integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, + } source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: '>=0.10.0' } split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} + resolution: + { + integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==, + } + engines: { node: '>= 10.x' } sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, + } + engines: { node: '>=10' } statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, + } + engines: { node: '>= 0.8' } statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==, + } + engines: { node: '>= 0.8' } string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, + } + engines: { node: '>=10' } string-to-stream@3.0.1: - resolution: {integrity: sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==} + resolution: + { + integrity: sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==, + } string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: '>=8' } string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + resolution: + { + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, + } strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: '>=8' } strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, + } + engines: { node: '>=4' } strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, + } + engines: { node: '>=8' } strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, + } + engines: { node: '>=6' } strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: '>=8' } strip-json-comments@5.0.3: - resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==, + } + engines: { node: '>=14.16' } superstruct@1.0.4: - resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==, + } + engines: { node: '>=14.0.0' } supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: '>=8' } supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, + } + engines: { node: '>=10' } supports-hyperlinks@3.1.0: - resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==} - engines: {node: '>=14.18'} + resolution: + { + integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==, + } + engines: { node: '>=14.18' } supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: '>= 0.4' } synckit@0.11.8: - resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { + integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==, + } + engines: { node: ^14.18.0 || >=16.0.0 } test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, + } + engines: { node: '>=8' } thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, + } + engines: { node: '>=0.8' } thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + resolution: + { + integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, + } thread-stream@4.0.0: - resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==, + } + engines: { node: '>=20' } tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + resolution: + { + integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, + } + engines: { node: '>=0.6.0' } tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + resolution: + { + integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, + } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: '>=8.0' } toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + resolution: + { + integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, + } + engines: { node: '>=0.6' } ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} + resolution: + { + integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==, + } + engines: { node: '>=18.12' } peerDependencies: typescript: '>=4.8.4' ts-jest@29.4.6: - resolution: {integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -2586,10 +4325,16 @@ packages: optional: true ts-morph@19.0.0: - resolution: {integrity: sha512-D6qcpiJdn46tUqV45vr5UGM2dnIEuTGNxVhg0sk5NX11orcouwj6i1bMqZIz2mZTZB1Hcgy7C3oEVhAT+f6mbQ==} + resolution: + { + integrity: sha512-D6qcpiJdn46tUqV45vr5UGM2dnIEuTGNxVhg0sk5NX11orcouwj6i1bMqZIz2mZTZB1Hcgy7C3oEVhAT+f6mbQ==, + } ts-node@10.7.0: - resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} + resolution: + { + integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==, + } hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -2603,195 +4348,330 @@ packages: optional: true tsc-multi@https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz: - resolution: {integrity: sha512-tWyCXnx0WqCkVlo5s+4KMj7HC0/0YrCZY0PustUwX9F2lNwd8Kp07q/Q56uGvV9q80XaSDrhy0YqBmrX5TDNpQ==, tarball: https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz} + resolution: + { + integrity: sha512-tWyCXnx0WqCkVlo5s+4KMj7HC0/0YrCZY0PustUwX9F2lNwd8Kp07q/Q56uGvV9q80XaSDrhy0YqBmrX5TDNpQ==, + tarball: https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz, + } version: 1.1.9 - engines: {node: '>=14'} + engines: { node: '>=14' } hasBin: true peerDependencies: typescript: '>=4.3.0' tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, + } + engines: { node: '>=6' } tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: '>= 0.8.0' } type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, + } + engines: { node: '>=4' } type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, + } + engines: { node: '>=10' } type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==, + } + engines: { node: '>=16' } type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==, + } + engines: { node: '>= 0.6' } typescript-eslint@8.31.1: - resolution: {integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' typescript@5.6.1-rc: - resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==, + } + engines: { node: '>=14.17' } hasBin: true typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==, + } + engines: { node: '>=14.17' } hasBin: true uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==, + } + engines: { node: '>=0.8.0' } hasBin: true undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + resolution: + { + integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, + } unicode-emoji-modifier-base@1.0.0: - resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==, + } + engines: { node: '>=4' } universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + resolution: + { + integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, + } + engines: { node: '>= 10.0.0' } unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, + } + engines: { node: '>= 0.8' } update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + resolution: + { + integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==, + } hasBin: true peerDependencies: browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + } v8-compile-cache-lib@3.0.0: - resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==} + resolution: + { + integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==, + } v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} + resolution: + { + integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==, + } + engines: { node: '>=10.12.0' } validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + resolution: + { + integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, + } + engines: { node: '>= 0.8' } walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + resolution: + { + integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, + } which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: '>= 8' } hasBin: true word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: '>=0.10.0' } wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + resolution: + { + integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, + } wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, + } + engines: { node: '>=8' } wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: '>=10' } wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + resolution: + { + integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: '>=10' } yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, + } + engines: { node: '>=10' } yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: '>=12' } yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, + } + engines: { node: '>=10' } yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: '>=12' } yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, + } + engines: { node: '>=6' } yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: '>=10' } yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==, + } + engines: { node: '>=18' } zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + resolution: + { + integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==, + } peerDependencies: zod: ^3.24.1 zod-to-json-schema@3.25.0: - resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} + resolution: + { + integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==, + } peerDependencies: zod: ^3.25 || ^4 zod-to-json-schema@3.25.1: - resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} + resolution: + { + integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==, + } peerDependencies: zod: ^3.25 || ^4 zod-validation-error@4.0.1: - resolution: {integrity: sha512-F3rdaCOHs5ViJ5YTz5zzRtfkQdMdIeKudJAoxy7yB/2ZMEHw73lmCAcQw11r7++20MyGl4WV59EVh7A9rNAyog==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-F3rdaCOHs5ViJ5YTz5zzRtfkQdMdIeKudJAoxy7yB/2ZMEHw73lmCAcQw11r7++20MyGl4WV59EVh7A9rNAyog==, + } + engines: { node: '>=18.0.0' } peerDependencies: zod: ^3.25.0 || ^4.0.0 zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + resolution: + { + integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, + } snapshots: - '@andrewbranch/untar.js@1.0.3': {} '@anthropic-ai/mcpb@2.1.2': diff --git a/scripts/fast-format b/scripts/fast-format index 53721ac..f1873ae 100755 --- a/scripts/fast-format +++ b/scripts/fast-format @@ -31,10 +31,7 @@ if ! [ -z "$ESLINT_FILES" ]; then fi echo "==> Running prettier --write" -# format things eslint didn't -PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)" -if ! [ -z "$PRETTIER_FILES" ]; then - echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \ - --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern \ - '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +if ! [ -z "$FILE_LIST" ]; then + cat "$FILE_LIST" | xargs ./node_modules/.bin/prettier \ + --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern --ignore-unknown fi diff --git a/scripts/format b/scripts/format index 7a75640..b1b2c17 100755 --- a/scripts/format +++ b/scripts/format @@ -8,5 +8,4 @@ echo "==> Running eslint --fix" ./node_modules/.bin/eslint --fix . echo "==> Running prettier --write" -# format things eslint didn't -./node_modules/.bin/prettier --write --cache --cache-strategy metadata . '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +./node_modules/.bin/prettier --write --cache --cache-strategy metadata . diff --git a/scripts/lint b/scripts/lint index 97a3df8..5a15375 100755 --- a/scripts/lint +++ b/scripts/lint @@ -4,6 +4,9 @@ set -e cd "$(dirname "$0")/.." +echo "==> Running prettier --check" +./node_modules/.bin/prettier --check . + echo "==> Running eslint" ./node_modules/.bin/eslint . diff --git a/src/internal/types.ts b/src/internal/types.ts index b668dfc..a050513 100644 --- a/src/internal/types.ts +++ b/src/internal/types.ts @@ -40,7 +40,6 @@ type OverloadedParameters = : T extends (...args: infer A) => unknown ? A : never; -/* eslint-disable */ /** * These imports attempt to get types from a parent package's dependencies. * Unresolved bare specifiers can trigger [automatic type acquisition][1] in some projects, which @@ -63,19 +62,18 @@ type OverloadedParameters = * * [1]: https://www.typescriptlang.org/tsconfig/#typeAcquisition */ -/** @ts-ignore For users with \@types/node */ +/** @ts-ignore For users with \@types/node */ /* prettier-ignore */ type UndiciTypesRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with undici */ +/** @ts-ignore For users with undici */ /* prettier-ignore */ type UndiciRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with \@types/bun */ +/** @ts-ignore For users with \@types/bun */ /* prettier-ignore */ type BunRequestInit = globalThis.FetchRequestInit; -/** @ts-ignore For users with node-fetch@2 */ +/** @ts-ignore For users with node-fetch@2 */ /* prettier-ignore */ type NodeFetch2RequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */ +/** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */ /* prettier-ignore */ type NodeFetch3RequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users who use Deno */ +/** @ts-ignore For users who use Deno */ /* prettier-ignore */ type FetchRequestInit = NonNullable[1]>; -/* eslint-enable */ type RequestInits = | NotAny From 76ae105e8416d30d5c19b8515552e52620bd04f2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 03:56:02 +0000 Subject: [PATCH 06/26] chore: avoid formatting file that gets changed during releases --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 7cc13dd..36afd3b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,6 +2,7 @@ CHANGELOG.md /ecosystem-tests/*/** /node_modules /deno +/packages/mcp-server/manifest.json # don't format tsc output, will break source maps dist From 7ed1b36627670e2f73728d6c67e8aa0ffd91cff5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 03:56:57 +0000 Subject: [PATCH 07/26] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index 72c7f16..7249da5 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark%2Fgrid-8dda19f5ffefa2dc8a788591b75019a5aa18290cb2972dee4ead39ed20d66e5b.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-8dda19f5ffefa2dc8a788591b75019a5aa18290cb2972dee4ead39ed20d66e5b.yml openapi_spec_hash: 8f93612be6357ca06485ce98339e740f config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 From 64072cdf999803c37e1c1061e2b8bcd888fb5a93 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 20:53:46 +0000 Subject: [PATCH 08/26] fix(api): remove cryptoNetwork field from external accounts --- .stats.yml | 4 +-- packages/mcp-server/src/local-docs-search.ts | 27 +++++++++---------- src/resources/customers/external-accounts.ts | 26 ------------------ .../customers/external-accounts.test.ts | 1 - 4 files changed, 15 insertions(+), 43 deletions(-) diff --git a/.stats.yml b/.stats.yml index 7249da5..3fbc1a7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-8dda19f5ffefa2dc8a788591b75019a5aa18290cb2972dee4ead39ed20d66e5b.yml -openapi_spec_hash: 8f93612be6357ca06485ce98339e740f +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-751b541681d3f29c57dd24051745521d5e0971a019d5d3f030df0cf89af7179c.yml +openapi_spec_hash: 0c9b03d3f97aac8e985ecd2b30c2567c config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index a986e97..f0b733e 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -405,9 +405,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.customers.externalAccounts.list', params: ['currency?: string;', 'cursor?: string;', 'customerId?: string;', 'limit?: number;'], response: - "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## list\n\n`client.customers.externalAccounts.list(currency?: string, cursor?: string, customerId?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts`\n\nRetrieve a list of external accounts with optional filtering parameters. Returns all\nexternal accounts that match the specified filters. If no filters are provided, returns all external accounts\n(paginated).\n\nExternal accounts are bank accounts, cryptocurrency wallets, or other payment destinations that customers can use to receive funds from the platform.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by external accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.customers.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", + "## list\n\n`client.customers.externalAccounts.list(currency?: string, cursor?: string, customerId?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts`\n\nRetrieve a list of external accounts with optional filtering parameters. Returns all\nexternal accounts that match the specified filters. If no filters are provided, returns all external accounts\n(paginated).\n\nExternal accounts are bank accounts, cryptocurrency wallets, or other payment destinations that customers can use to receive funds from the platform.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by external accounts associated with a specific customer\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.customers.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.list', @@ -441,15 +441,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ params: [ "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', - 'cryptoNetwork?: string;', 'customerId?: string;', 'defaultUmaDepositAccount?: boolean;', 'platformAccountId?: string;', ], response: - "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, cryptoNetwork?: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `cryptoNetwork?: string`\n The blockchain network for this external account. Required when the account is a cryptocurrency wallet. Specifies which network the wallet is on. Example values: SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST.\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.create', @@ -468,7 +467,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/customers/external-accounts \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "accountInfo": {\n "accountNumber": "12345678901",\n "accountType": "USD_ACCOUNT",\n "beneficiary": {\n "beneficiaryType": "INDIVIDUAL",\n "fullName": "John Doe",\n "address": {\n "country": "US",\n "line1": "123 Main Street",\n "postalCode": "94105",\n "city": "San Francisco",\n "state": "CA"\n },\n "birthDate": "1990-01-15",\n "nationality": "US"\n },\n "routingNumber": "123456789"\n },\n "currency": "USD",\n "cryptoNetwork": "SOLANA_MAINNET",\n "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",\n "platformAccountId": "ext_acc_123456"\n }\'', + 'curl https://api.lightspark.com/grid/2025-10-13/customers/external-accounts \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "accountInfo": {\n "accountNumber": "12345678901",\n "accountType": "USD_ACCOUNT",\n "beneficiary": {\n "beneficiaryType": "INDIVIDUAL",\n "fullName": "John Doe",\n "address": {\n "country": "US",\n "line1": "123 Main Street",\n "postalCode": "94105",\n "city": "San Francisco",\n "state": "CA"\n },\n "birthDate": "1990-01-15",\n "nationality": "US"\n },\n "routingNumber": "123456789"\n },\n "currency": "USD",\n "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",\n "platformAccountId": "ext_acc_123456"\n }\'', }, }, }, @@ -482,9 +481,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.customers.externalAccounts.retrieve', params: ['externalAccountId: string;'], response: - "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## retrieve\n\n`client.customers.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts/{externalAccountId}`\n\nRetrieve a customer external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", + "## retrieve\n\n`client.customers.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/customers/external-accounts/{externalAccountId}`\n\nRetrieve a customer external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.retrieve', @@ -658,9 +657,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.platform.externalAccounts.list', params: ['currency?: string;', 'cursor?: string;', 'limit?: number;'], response: - "{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", + "{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", markdown: - "## list\n\n`client.platform.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { data: external_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/platform/external-accounts`\n\nRetrieve a list of all external accounts that belong to the platform, as opposed to an individual customer.\n\nThese accounts are used for platform-wide operations such as receiving funds from external sources or managing platform-level payment destinations.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccounts = await client.platform.externalAccounts.list();\n\nconsole.log(externalAccounts);\n```", + "## list\n\n`client.platform.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { data: external_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/platform/external-accounts`\n\nRetrieve a list of all external accounts that belong to the platform, as opposed to an individual customer.\n\nThese accounts are used for platform-wide operations such as receiving funds from external sources or managing platform-level payment destinations.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccounts = await client.platform.externalAccounts.list();\n\nconsole.log(externalAccounts);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.list', @@ -697,9 +696,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'platformAccountId?: string;', ], response: - "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.create', @@ -732,9 +731,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.platform.externalAccounts.retrieve', params: ['externalAccountId: string;'], response: - "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## retrieve\n\n`client.platform.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/platform/external-accounts/{externalAccountId}`\n\nRetrieve a platform external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; cryptoNetwork?: string; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `cryptoNetwork?: string`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", + "## retrieve\n\n`client.platform.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/platform/external-accounts/{externalAccountId}`\n\nRetrieve a platform external account by its system-generated ID\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.retrieve', diff --git a/src/resources/customers/external-accounts.ts b/src/resources/customers/external-accounts.ts index f35b9b8..ba5dca7 100644 --- a/src/resources/customers/external-accounts.ts +++ b/src/resources/customers/external-accounts.ts @@ -321,14 +321,6 @@ export interface ExternalAccount { */ beneficiaryVerifiedData?: BeneficiaryVerifiedData; - /** - * The blockchain network for this external account, if applicable. Present when - * the account is a cryptocurrency wallet. Example values: SOLANA_MAINNET, - * SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, - * SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST. - */ - cryptoNetwork?: string; - /** * The customer this account is tied to, or null if the account is on behalf of the * platform. @@ -406,15 +398,6 @@ export interface ExternalAccountCreate { */ currency: string; - /** - * The blockchain network for this external account. Required when the account is a - * cryptocurrency wallet. Specifies which network the wallet is on. Example values: - * SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, - * BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, - * LIGHTNING_REGTEST. - */ - cryptoNetwork?: string; - /** * The ID of the customer for whom to create the external account. If not provided, * the external account will be created on behalf of the platform. @@ -1051,15 +1034,6 @@ export interface ExternalAccountCreateParams { */ currency: string; - /** - * The blockchain network for this external account. Required when the account is a - * cryptocurrency wallet. Specifies which network the wallet is on. Example values: - * SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, - * BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, - * LIGHTNING_REGTEST. - */ - cryptoNetwork?: string; - /** * The ID of the customer for whom to create the external account. If not provided, * the external account will be created on behalf of the platform. diff --git a/tests/api-resources/customers/external-accounts.test.ts b/tests/api-resources/customers/external-accounts.test.ts index 4a841ad..92c7c3d 100644 --- a/tests/api-resources/customers/external-accounts.test.ts +++ b/tests/api-resources/customers/external-accounts.test.ts @@ -55,7 +55,6 @@ describe('resource externalAccounts', () => { routingNumber: '123456789', }, currency: 'USD', - cryptoNetwork: 'SOLANA_MAINNET', customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001', defaultUmaDepositAccount: true, platformAccountId: 'ext_acc_123456', From 215b95269cc0fc5c614451c555558ddea48ff364 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 03:05:30 +0000 Subject: [PATCH 09/26] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index 3fbc1a7..a668e83 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-751b541681d3f29c57dd24051745521d5e0971a019d5d3f030df0cf89af7179c.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-be779b475d31923770da513831f4a7d574d501858a59934489e1f4bc4d4d63af.yml openapi_spec_hash: 0c9b03d3f97aac8e985ecd2b30c2567c config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 From 2fb820dba2d0b849fd47149d878a035e3f995153 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 16:59:58 +0000 Subject: [PATCH 10/26] fix(types): make countryOfResidence optional, phoneNumber required in beneficiary types --- .stats.yml | 4 +- packages/mcp-server/src/local-docs-search.ts | 8 +-- src/resources/shared.ts | 60 ++++++++++---------- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/.stats.yml b/.stats.yml index a668e83..abc7214 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-be779b475d31923770da513831f4a7d574d501858a59934489e1f4bc4d4d63af.yml -openapi_spec_hash: 0c9b03d3f97aac8e985ecd2b30c2567c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-9e0aa3bf262e406d1761df0bda53c8d5c654196cdfe363229ccddafea59d53b2.yml +openapi_spec_hash: 1dfca90a9edf5be5ffa3583613ad2a36 config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index f0b733e..85c030a 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -439,7 +439,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) customers.external_accounts > (method) create', qualified: 'client.customers.externalAccounts.create', params: [ - "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", + "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', 'customerId?: string;', 'defaultUmaDepositAccount?: boolean;', @@ -448,7 +448,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.customers.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/customers/external-accounts`\n\nRegister a new external bank account for a customer.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.customers.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.customers.externalAccounts.create', @@ -691,14 +691,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) platform.external_accounts > (method) create', qualified: 'client.platform.externalAccounts.create', params: [ - "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", + "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', 'platformAccountId?: string;', ], response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; address?: address; birthDate?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## create\n\n`client.platform.externalAccounts.create(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/platform/external-accounts`\n\nRegister a new external bank account for the platform.\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.platform.externalAccounts.create({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.create', diff --git a/src/resources/shared.ts b/src/resources/shared.ts index 76fdd8e..f6e546b 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -57,11 +57,6 @@ export interface AedExternalAccountCreateInfo { export interface BdtBeneficiary { beneficiaryType: 'INDIVIDUAL'; - /** - * The country of residence of the beneficiary - */ - countryOfResidence: string; - /** * The full name of the beneficiary */ @@ -74,6 +69,11 @@ export interface BdtBeneficiary { */ birthDate?: string; + /** + * The country of residence of the beneficiary + */ + countryOfResidence?: string; + /** * The email of the beneficiary */ @@ -498,11 +498,6 @@ export interface GbpExternalAccountCreateInfo { export interface GhsBeneficiary { beneficiaryType: 'INDIVIDUAL'; - /** - * The country of residence of the beneficiary - */ - countryOfResidence: string; - /** * The full name of the beneficiary */ @@ -515,6 +510,11 @@ export interface GhsBeneficiary { */ birthDate?: string; + /** + * The country of residence of the beneficiary + */ + countryOfResidence?: string; + /** * The email of the beneficiary */ @@ -560,6 +560,11 @@ export interface GtqBeneficiary { */ fullName: string; + /** + * The phone number of the beneficiary + */ + phoneNumber: string; + address?: ExternalAccountsAPI.Address; /** @@ -576,11 +581,6 @@ export interface GtqBeneficiary { * The nationality of the beneficiary */ nationality?: string; - - /** - * The phone number of the beneficiary - */ - phoneNumber?: string; } export interface GtqExternalAccountCreateInfo { @@ -623,11 +623,6 @@ export interface HkdExternalAccountCreateInfo { export interface HtgBeneficiary { beneficiaryType: 'INDIVIDUAL'; - /** - * The country of residence of the beneficiary - */ - countryOfResidence: string; - /** * The full name of the beneficiary */ @@ -640,6 +635,11 @@ export interface HtgBeneficiary { */ birthDate?: string; + /** + * The country of residence of the beneficiary + */ + countryOfResidence?: string; + /** * The email of the beneficiary */ @@ -709,11 +709,6 @@ export interface JmdBeneficiary { beneficiaryType: 'INDIVIDUAL'; - /** - * The country of residence of the beneficiary - */ - countryOfResidence: string; - /** * The full name of the beneficiary */ @@ -729,6 +724,11 @@ export interface JmdBeneficiary { */ birthDate?: string; + /** + * The country of residence of the beneficiary + */ + countryOfResidence?: string; + /** * The email of the beneficiary */ @@ -968,11 +968,6 @@ export interface PhpExternalAccountCreateInfo { export interface PkrBeneficiary { beneficiaryType: 'INDIVIDUAL'; - /** - * The country of residence of the beneficiary - */ - countryOfResidence: string; - /** * The full name of the beneficiary */ @@ -985,6 +980,11 @@ export interface PkrBeneficiary { */ birthDate?: string; + /** + * The country of residence of the beneficiary + */ + countryOfResidence?: string; + /** * The email of the beneficiary */ From 4e14ef7e1df416ac9180ae56d64008e6af86d59d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 17:56:01 +0000 Subject: [PATCH 11/26] feat(api): add agents resource, device codes, me namespace, agentId to transactions --- .stats.yml | 8 +- api.md | 105 + packages/mcp-server/src/code-tool-worker.ts | 27 + packages/mcp-server/src/local-docs-search.ts | 1062 ++++++++- packages/mcp-server/src/methods.ts | 162 ++ scripts/detect-breaking-changes | 8 + src/client.ts | 40 + src/resources/agents.ts | 3 + src/resources/agents/actions.ts | 317 +++ src/resources/agents/agents.ts | 1972 +++++++++++++++++ src/resources/agents/device-codes.ts | 279 +++ src/resources/agents/index.ts | 41 + src/resources/agents/me.ts | 3 + src/resources/agents/me/actions.ts | 302 +++ src/resources/agents/me/external-accounts.ts | 217 ++ src/resources/agents/me/index.ts | 25 + src/resources/agents/me/me.ts | 728 ++++++ src/resources/agents/me/quotes.ts | 331 +++ src/resources/agents/me/transactions.ts | 112 + src/resources/agents/transactions.ts | 5 + src/resources/index.ts | 17 + src/resources/transactions.ts | 12 + src/resources/webhooks.ts | 180 +- tests/api-resources/agents/actions.test.ts | 48 + tests/api-resources/agents/agents.test.ts | 173 ++ .../api-resources/agents/device-codes.test.ts | 47 + tests/api-resources/agents/me/actions.test.ts | 50 + .../agents/me/external-accounts.test.ts | 114 + tests/api-resources/agents/me/me.test.ts | 101 + tests/api-resources/agents/me/quotes.test.ts | 95 + .../agents/me/transactions.test.ts | 58 + 31 files changed, 6621 insertions(+), 21 deletions(-) create mode 100644 src/resources/agents.ts create mode 100644 src/resources/agents/actions.ts create mode 100644 src/resources/agents/agents.ts create mode 100644 src/resources/agents/device-codes.ts create mode 100644 src/resources/agents/index.ts create mode 100644 src/resources/agents/me.ts create mode 100644 src/resources/agents/me/actions.ts create mode 100644 src/resources/agents/me/external-accounts.ts create mode 100644 src/resources/agents/me/index.ts create mode 100644 src/resources/agents/me/me.ts create mode 100644 src/resources/agents/me/quotes.ts create mode 100644 src/resources/agents/me/transactions.ts create mode 100644 src/resources/agents/transactions.ts create mode 100644 tests/api-resources/agents/actions.test.ts create mode 100644 tests/api-resources/agents/agents.test.ts create mode 100644 tests/api-resources/agents/device-codes.test.ts create mode 100644 tests/api-resources/agents/me/actions.test.ts create mode 100644 tests/api-resources/agents/me/external-accounts.test.ts create mode 100644 tests/api-resources/agents/me/me.test.ts create mode 100644 tests/api-resources/agents/me/quotes.test.ts create mode 100644 tests/api-resources/agents/me/transactions.test.ts diff --git a/.stats.yml b/.stats.yml index abc7214..6b1fec3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 67 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-9e0aa3bf262e406d1761df0bda53c8d5c654196cdfe363229ccddafea59d53b2.yml -openapi_spec_hash: 1dfca90a9edf5be5ffa3583613ad2a36 -config_hash: 5bef3e307ef4a4c9c15194d299dac9f0 +configured_endpoints: 94 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-e2bb6cedad439a5d9902bc24fa65ec5b0800b77ba56dd5b036c948d9cc161930.yml +openapi_spec_hash: 3a1eff171c8a7e956d41460b2f437d91 +config_hash: ed09c0afe747c9c6bc0beb25176b1409 diff --git a/api.md b/api.md index ff86709..9da41b4 100644 --- a/api.md +++ b/api.md @@ -399,6 +399,7 @@ Methods: Types: +- AgentActionWebhookEvent - IncomingPaymentWebhookEvent - OutgoingPaymentWebhookEvent - TestWebhookWebhookEvent @@ -522,3 +523,107 @@ Types: Methods: - client.internalAccounts.export(id, { ...params }) -> InternalAccountExportResponse + +# Agents + +Types: + +- AgentCreateResponse +- AgentRetrieveResponse +- AgentUpdateResponse +- AgentListResponse +- AgentListApprovalsResponse +- AgentUpdatePolicyResponse + +Methods: + +- client.agents.create({ ...params }) -> AgentCreateResponse +- client.agents.retrieve(agentID) -> AgentRetrieveResponse +- client.agents.update(agentID, { ...params }) -> AgentUpdateResponse +- client.agents.list({ ...params }) -> AgentListResponsesDefaultPagination +- client.agents.delete(agentID) -> void +- client.agents.listApprovals({ ...params }) -> AgentListApprovalsResponsesDefaultPagination +- client.agents.updatePolicy(agentID, { ...params }) -> AgentUpdatePolicyResponse + +## Me + +Types: + +- MeRetrieveResponse +- MeCreateTransferInResponse +- MeCreateTransferOutResponse + +Methods: + +- client.agents.me.retrieve() -> MeRetrieveResponse +- client.agents.me.createTransferIn({ ...params }) -> MeCreateTransferInResponse +- client.agents.me.createTransferOut({ ...params }) -> MeCreateTransferOutResponse +- client.agents.me.listInternalAccounts({ ...params }) -> InternalAccountsDefaultPagination + +### Transactions + +Methods: + +- client.agents.me.transactions.retrieve(transactionID) -> Transaction +- client.agents.me.transactions.list({ ...params }) -> TransactionsDefaultPagination + +### Quotes + +Types: + +- QuoteExecuteResponse + +Methods: + +- client.agents.me.quotes.create({ ...params }) -> Quote +- client.agents.me.quotes.retrieve(quoteID) -> Quote +- client.agents.me.quotes.execute(quoteID, { ...params }) -> QuoteExecuteResponse + +### ExternalAccounts + +Methods: + +- client.agents.me.externalAccounts.retrieve(externalAccountID) -> ExternalAccount +- client.agents.me.externalAccounts.list({ ...params }) -> ExternalAccountsDefaultPagination +- client.agents.me.externalAccounts.delete(externalAccountID) -> void +- client.agents.me.externalAccounts.add({ ...params }) -> ExternalAccount + +### Actions + +Types: + +- ActionRetrieveResponse +- ActionListResponse + +Methods: + +- client.agents.me.actions.retrieve(actionID) -> ActionRetrieveResponse +- client.agents.me.actions.list({ ...params }) -> ActionListResponsesDefaultPagination + +## DeviceCodes + +Types: + +- DeviceCodeGetStatusResponse +- DeviceCodeRedeemResponse +- DeviceCodeRegenerateResponse + +Methods: + +- client.agents.deviceCodes.getStatus(code) -> DeviceCodeGetStatusResponse +- client.agents.deviceCodes.redeem(code) -> DeviceCodeRedeemResponse +- client.agents.deviceCodes.regenerate(agentID) -> DeviceCodeRegenerateResponse + +## Transactions + +## Actions + +Types: + +- ActionApproveResponse +- ActionRejectResponse + +Methods: + +- client.agents.actions.approve(actionID, { ...params }) -> ActionApproveResponse +- client.agents.actions.reject(actionID, { ...params }) -> ActionRejectResponse diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts index 45b079e..6471ab4 100644 --- a/packages/mcp-server/src/code-tool-worker.ts +++ b/packages/mcp-server/src/code-tool-worker.ts @@ -176,6 +176,33 @@ const fuse = new Fuse( 'client.auth.sessions.list', 'client.auth.sessions.revoke', 'client.internalAccounts.export', + 'client.agents.create', + 'client.agents.delete', + 'client.agents.list', + 'client.agents.listApprovals', + 'client.agents.retrieve', + 'client.agents.update', + 'client.agents.updatePolicy', + 'client.agents.me.createTransferIn', + 'client.agents.me.createTransferOut', + 'client.agents.me.listInternalAccounts', + 'client.agents.me.retrieve', + 'client.agents.me.transactions.list', + 'client.agents.me.transactions.retrieve', + 'client.agents.me.quotes.create', + 'client.agents.me.quotes.execute', + 'client.agents.me.quotes.retrieve', + 'client.agents.me.externalAccounts.add', + 'client.agents.me.externalAccounts.delete', + 'client.agents.me.externalAccounts.list', + 'client.agents.me.externalAccounts.retrieve', + 'client.agents.me.actions.list', + 'client.agents.me.actions.retrieve', + 'client.agents.deviceCodes.getStatus', + 'client.agents.deviceCodes.redeem', + 'client.agents.deviceCodes.regenerate', + 'client.agents.actions.approve', + 'client.agents.actions.reject', ], { threshold: 1, shouldSort: true }, ); diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 85c030a..7d118dc 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -805,9 +805,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'Idempotency-Key?: string;', ], response: - "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", + "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", markdown: - "## create\n\n`client.transferIn.create(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): object | object`\n\n**post** `/transfer-in`\n\nTransfer funds from an external account to an internal account for a specific customer. This endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the paymentInstructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.transferIn.create({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(transaction);\n```", + "## create\n\n`client.transferIn.create(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): object | object`\n\n**post** `/transfer-in`\n\nTransfer funds from an external account to an internal account for a specific customer. This endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the paymentInstructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.transferIn.create({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(transaction);\n```", perLanguage: { typescript: { method: 'client.transferIn.create', @@ -845,9 +845,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'Idempotency-Key?: string;', ], response: - "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", + "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", markdown: - "## create\n\n`client.transferOut.create(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): object | object`\n\n**post** `/transfer-out`\n\nTransfer funds from an internal account to an external account for a specific customer.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.transferOut.create({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(transaction);\n```", + "## create\n\n`client.transferOut.create(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): object | object`\n\n**post** `/transfer-out`\n\nTransfer funds from an internal account to an external account for a specific customer.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.transferOut.create({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(transaction);\n```", perLanguage: { typescript: { method: 'client.transferOut.create', @@ -1086,9 +1086,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ "type?: 'INCOMING' | 'OUTGOING';", ], response: - "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", + "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", markdown: - "## list\n\n`client.transactions.list(accountIdentifier?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, platformCustomerId?: string, receiverAccountIdentifier?: string, reference?: string, senderAccountIdentifier?: string, sortOrder?: 'asc' | 'desc', startDate?: string, status?: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED', type?: 'INCOMING' | 'OUTGOING'): object | object`\n\n**get** `/transactions`\n\nRetrieve a paginated list of transactions with optional filtering.\nThe transactions can be filtered by customer ID, platform customer ID, UMA address,\ndate range, status, and transaction type.\n\n\n### Parameters\n\n- `accountIdentifier?: string`\n Filter by account identifier (matches either sender or receiver)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by system customer ID. To filter to transactions made on behalf of the platform, specify the platform ID as the customer ID.\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `platformCustomerId?: string`\n Filter by platform-specific customer ID\n\n- `receiverAccountIdentifier?: string`\n Filter by receiver account identifier\n\n- `reference?: string`\n Filter by reference\n\n- `senderAccountIdentifier?: string`\n Filter by sender account identifier\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n- `status?: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n Filter by transaction status\n\n- `type?: 'INCOMING' | 'OUTGOING'`\n Filter by transaction type\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const transaction of client.transactions.list()) {\n console.log(transaction);\n}\n```", + "## list\n\n`client.transactions.list(accountIdentifier?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, platformCustomerId?: string, receiverAccountIdentifier?: string, reference?: string, senderAccountIdentifier?: string, sortOrder?: 'asc' | 'desc', startDate?: string, status?: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED', type?: 'INCOMING' | 'OUTGOING'): object | object`\n\n**get** `/transactions`\n\nRetrieve a paginated list of transactions with optional filtering.\nThe transactions can be filtered by customer ID, platform customer ID, UMA address,\ndate range, status, and transaction type.\n\n\n### Parameters\n\n- `accountIdentifier?: string`\n Filter by account identifier (matches either sender or receiver)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by system customer ID. To filter to transactions made on behalf of the platform, specify the platform ID as the customer ID.\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `platformCustomerId?: string`\n Filter by platform-specific customer ID\n\n- `receiverAccountIdentifier?: string`\n Filter by receiver account identifier\n\n- `reference?: string`\n Filter by reference\n\n- `senderAccountIdentifier?: string`\n Filter by sender account identifier\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n- `status?: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n Filter by transaction status\n\n- `type?: 'INCOMING' | 'OUTGOING'`\n Filter by transaction type\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const transaction of client.transactions.list()) {\n console.log(transaction);\n}\n```", perLanguage: { typescript: { method: 'client.transactions.list', @@ -1121,9 +1121,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.transactions.retrieve', params: ['transactionId: string;'], response: - "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", + "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", markdown: - "## retrieve\n\n`client.transactions.retrieve(transactionId: string): object | object`\n\n**get** `/transactions/{transactionId}`\n\nRetrieve detailed information about a specific transaction.\n\n### Parameters\n\n- `transactionId: string`\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.transactions.retrieve('transactionId');\n\nconsole.log(transaction);\n```", + "## retrieve\n\n`client.transactions.retrieve(transactionId: string): object | object`\n\n**get** `/transactions/{transactionId}`\n\nRetrieve detailed information about a specific transaction.\n\n### Parameters\n\n- `transactionId: string`\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.transactions.retrieve('transactionId');\n\nconsole.log(transaction);\n```", perLanguage: { typescript: { method: 'client.transactions.retrieve', @@ -1157,9 +1157,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.transactions.approve', params: ['transactionId: string;', 'receiverCustomerInfo?: object;'], response: - "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }", + "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }", markdown: - "## approve\n\n`client.transactions.approve(transactionId: string, receiverCustomerInfo?: object): { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; }`\n\n**post** `/transactions/{transactionId}/approve`\n\nApprove a pending incoming payment that was previously acknowledged with a 202 response.\nThis endpoint allows platforms to asynchronously approve payments after async processing.\n\n\n### Parameters\n\n- `transactionId: string`\n\n- `receiverCustomerInfo?: object`\n Information about the recipient, provided by the platform if requested in the original webhook via `requestedReceiverCustomerInfoFields`.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `receivedAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n - `type: 'INCOMING' | 'OUTGOING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `failureReason?: string`\n - `rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `reconciliationInstructions?: { reference: string; }`\n - `settledAt?: string`\n - `source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst incomingTransaction = await client.transactions.approve('transactionId');\n\nconsole.log(incomingTransaction);\n```", + "## approve\n\n`client.transactions.approve(transactionId: string, receiverCustomerInfo?: object): { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; }`\n\n**post** `/transactions/{transactionId}/approve`\n\nApprove a pending incoming payment that was previously acknowledged with a 202 response.\nThis endpoint allows platforms to asynchronously approve payments after async processing.\n\n\n### Parameters\n\n- `transactionId: string`\n\n- `receiverCustomerInfo?: object`\n Information about the recipient, provided by the platform if requested in the original webhook via `requestedReceiverCustomerInfoFields`.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `receivedAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n - `type: 'INCOMING' | 'OUTGOING'`\n - `agentId?: string`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `failureReason?: string`\n - `rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `reconciliationInstructions?: { reference: string; }`\n - `settledAt?: string`\n - `source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst incomingTransaction = await client.transactions.approve('transactionId');\n\nconsole.log(incomingTransaction);\n```", perLanguage: { typescript: { method: 'client.transactions.approve', @@ -1193,9 +1193,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.transactions.reject', params: ['transactionId: string;', 'reason?: string;'], response: - "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }", + "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }", markdown: - "## reject\n\n`client.transactions.reject(transactionId: string, reason?: string): { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; }`\n\n**post** `/transactions/{transactionId}/reject`\n\nReject a pending incoming payment that was previously acknowledged with a 202 response.\nThis endpoint allows platforms to asynchronously reject payments after additional processing.\n\n\n### Parameters\n\n- `transactionId: string`\n\n- `reason?: string`\n Optional reason for rejecting the payment. This is just for debugging purposes or can be used for a platform's own purposes.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `receivedAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n - `type: 'INCOMING' | 'OUTGOING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `failureReason?: string`\n - `rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `reconciliationInstructions?: { reference: string; }`\n - `settledAt?: string`\n - `source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst incomingTransaction = await client.transactions.reject('transactionId');\n\nconsole.log(incomingTransaction);\n```", + "## reject\n\n`client.transactions.reject(transactionId: string, reason?: string): { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; }`\n\n**post** `/transactions/{transactionId}/reject`\n\nReject a pending incoming payment that was previously acknowledged with a 202 response.\nThis endpoint allows platforms to asynchronously reject payments after additional processing.\n\n\n### Parameters\n\n- `transactionId: string`\n\n- `reason?: string`\n Optional reason for rejecting the payment. This is just for debugging purposes or can be used for a platform's own purposes.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `receivedAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n - `type: 'INCOMING' | 'OUTGOING'`\n - `agentId?: string`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `failureReason?: string`\n - `rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `reconciliationInstructions?: { reference: string; }`\n - `settledAt?: string`\n - `source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst incomingTransaction = await client.transactions.reject('transactionId');\n\nconsole.log(incomingTransaction);\n```", perLanguage: { typescript: { method: 'client.transactions.reject', @@ -1371,9 +1371,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.sandbox.sendFunds', params: ['currencyCode: string;', 'quoteId: string;', 'currencyAmount?: number;'], response: - "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }", + "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }", markdown: - "## send_funds\n\n`client.sandbox.sendFunds(currencyCode: string, quoteId: string, currencyAmount?: number): { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }`\n\n**post** `/sandbox/send`\n\nSimulate sending funds to the bank account as instructed in the quote.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `currencyCode: string`\n Currency code for the funds to be sent\n\n- `quoteId: string`\n The unique identifier of the quote\n\n- `currencyAmount?: number`\n The amount to send in the smallest unit of the currency (eg. cents). If not provided, the amount will be derived from the quote.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: { amount: number; currency: currency; }; source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; quoteId?: string; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; receivedAmount?: { amount: number; currency: currency; }; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `sentAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'`\n - `type: 'OUTGOING' | 'INCOMING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `exchangeRate?: number`\n - `failureReason?: string`\n - `fees?: number`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `quoteId?: string`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `receivedAmount?: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }`\n - `settledAt?: string`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst outgoingTransaction = await client.sandbox.sendFunds({ currencyCode: 'USD', quoteId: 'Quote:019542f5-b3e7-1d02-0000-000000000006' });\n\nconsole.log(outgoingTransaction);\n```", + "## send_funds\n\n`client.sandbox.sendFunds(currencyCode: string, quoteId: string, currencyAmount?: number): { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }`\n\n**post** `/sandbox/send`\n\nSimulate sending funds to the bank account as instructed in the quote.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `currencyCode: string`\n Currency code for the funds to be sent\n\n- `quoteId: string`\n The unique identifier of the quote\n\n- `currencyAmount?: number`\n The amount to send in the smallest unit of the currency (eg. cents). If not provided, the amount will be derived from the quote.\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: { amount: number; currency: currency; }; source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; quoteId?: string; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; receivedAmount?: { amount: number; currency: currency; }; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `sentAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'`\n - `type: 'OUTGOING' | 'INCOMING'`\n - `agentId?: string`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `exchangeRate?: number`\n - `failureReason?: string`\n - `fees?: number`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `quoteId?: string`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `receivedAmount?: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }`\n - `settledAt?: string`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst outgoingTransaction = await client.sandbox.sendFunds({ currencyCode: 'USD', quoteId: 'Quote:019542f5-b3e7-1d02-0000-000000000006' });\n\nconsole.log(outgoingTransaction);\n```", perLanguage: { typescript: { method: 'client.sandbox.sendFunds', @@ -1413,9 +1413,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'receiverUmaAddress?: string;', ], response: - "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }", + "{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }", markdown: - "## receive_payment\n\n`client.sandbox.uma.receivePayment(receivingCurrencyAmount: number, receivingCurrencyCode: string, senderUmaAddress: string, customerId?: string, receiverUmaAddress?: string): { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; }`\n\n**post** `/sandbox/uma/receive`\n\nSimulate sending payment from an sandbox uma address to a platform customer to test payment receive.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `receivingCurrencyAmount: number`\n The amount to be received in the smallest unit of the currency (eg. cents)\n\n- `receivingCurrencyCode: string`\n The currency code for the receiving amount\n\n- `senderUmaAddress: string`\n UMA address of the sender from the sandbox\n\n- `customerId?: string`\n System ID of the receiver (optional if receiverUmaAddress is provided)\n\n- `receiverUmaAddress?: string`\n UMA address of the receiver (optional if customerId is provided)\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `receivedAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n - `type: 'INCOMING' | 'OUTGOING'`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `failureReason?: string`\n - `rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `reconciliationInstructions?: { reference: string; }`\n - `settledAt?: string`\n - `source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst incomingTransaction = await client.sandbox.uma.receivePayment({\n receivingCurrencyAmount: 1000,\n receivingCurrencyCode: 'USD',\n senderUmaAddress: '$success.usd@sandbox.grid.uma.money',\n});\n\nconsole.log(incomingTransaction);\n```", + "## receive_payment\n\n`client.sandbox.uma.receivePayment(receivingCurrencyAmount: number, receivingCurrencyCode: string, senderUmaAddress: string, customerId?: string, receiverUmaAddress?: string): { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; }`\n\n**post** `/sandbox/uma/receive`\n\nSimulate sending payment from an sandbox uma address to a platform customer to test payment receive.\nThis endpoint is only for the sandbox environment and will fail for production platforms/keys.\n\n\n### Parameters\n\n- `receivingCurrencyAmount: number`\n The amount to be received in the smallest unit of the currency (eg. cents)\n\n- `receivingCurrencyCode: string`\n The currency code for the receiving amount\n\n- `senderUmaAddress: string`\n UMA address of the sender from the sandbox\n\n- `customerId?: string`\n System ID of the receiver (optional if receiverUmaAddress is provided)\n\n- `receiverUmaAddress?: string`\n UMA address of the receiver (optional if customerId is provided)\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: { amount: number; currency: currency; }; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; reconciliationInstructions?: { reference: string; }; settledAt?: string; source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }; updatedAt?: string; }`\n\n - `id: string`\n - `customerId: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }`\n - `platformCustomerId: string`\n - `receivedAmount: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n - `type: 'INCOMING' | 'OUTGOING'`\n - `agentId?: string`\n - `counterpartyInformation?: object`\n - `createdAt?: string`\n - `description?: string`\n - `failureReason?: string`\n - `rateDetails?: { gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n - `reconciliationInstructions?: { reference: string; }`\n - `settledAt?: string`\n - `source?: { accountId: string; sourceType: 'ACCOUNT'; } | { sourceType: 'UMA_ADDRESS'; umaAddress: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; customerId?: string; }`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst incomingTransaction = await client.sandbox.uma.receivePayment({\n receivingCurrencyAmount: 1000,\n receivingCurrencyCode: 'USD',\n senderUmaAddress: '$success.usd@sandbox.grid.uma.money',\n});\n\nconsole.log(incomingTransaction);\n```", perLanguage: { typescript: { method: 'client.sandbox.uma.receivePayment', @@ -2582,6 +2582,1036 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, }, + { + name: 'create', + endpoint: '/agents', + httpMethod: 'post', + summary: 'Create an agent', + description: + 'Create a new agent with a specified policy. Returns the created agent and a device code that must be redeemed by the agent software to complete installation.\n', + stainlessPath: '(resource) agents > (method) create', + qualified: 'client.agents.create', + params: [ + 'customerId: string;', + 'name: string;', + "policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; };", + ], + response: + "{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }", + markdown: + "## create\n\n`client.agents.create(customerId: string, name: string, policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }): { agent: object; deviceCode: object; }`\n\n**post** `/agents`\n\nCreate a new agent with a specified policy. Returns the created agent and a device code that must be redeemed by the agent software to complete installation.\n\n\n### Parameters\n\n- `customerId: string`\n The ID of the customer this agent will operate on behalf of.\n\n- `name: string`\n Human-readable name to identify the agent.\n\n- `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n Policy governing what an agent can do, how it executes actions, and its spending boundaries.\n - `defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n - `permissions: string[]`\n List of permissions granted to the agent.\n - `spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }`\n Spending limits that cap the agent's transaction amounts and frequency. All amount fields are integers in the smallest unit of the specified currency. When a transaction is denominated in a different currency, Grid converts using the exchange rate at evaluation time.\n - `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n\n### Returns\n\n- `{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }`\n Response returned when an agent is created, including the agent and a device code for installation.\n\n - `agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n - `deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n},\n});\n\nconsole.log(agent);\n```", + perLanguage: { + typescript: { + method: 'client.agents.create', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n },\n});\n\nconsole.log(agent.agent);", + }, + python: { + method: 'agents.create', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent = client.agents.create(\n customer_id="Customer:019542f5-b3e7-1d02-0000-000000000001",\n name="Payroll Automation Agent",\n policy={\n "default_execution_mode": "AUTO",\n "permissions": ["VIEW_TRANSACTIONS"],\n "spending_limits": {\n "currency": "USD",\n "per_transaction_limit": 50000,\n },\n },\n)\nprint(agent.agent)', + }, + kotlin: { + method: 'agents().create', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentCreateParams\nimport com.lightspark.grid.models.agents.AgentCreateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: AgentCreateParams = AgentCreateParams.builder()\n .customerId("Customer:019542f5-b3e7-1d02-0000-000000000001")\n .name("Payroll Automation Agent")\n .policy(AgentCreateParams.Policy.builder()\n .defaultExecutionMode(AgentCreateParams.Policy.DefaultExecutionMode.AUTO)\n .addPermission(AgentCreateParams.Policy.Permission.VIEW_TRANSACTIONS)\n .spendingLimits(AgentCreateParams.Policy.SpendingLimits.builder()\n .currency("USD")\n .perTransactionLimit(50000L)\n .build())\n .build())\n .build()\n val agent: AgentCreateResponse = client.agents().create(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",\n "name": "Payroll Automation Agent",\n "policy": {\n "defaultExecutionMode": "AUTO",\n "permissions": [\n "VIEW_TRANSACTIONS"\n ],\n "spendingLimits": {\n "currency": "USD",\n "perTransactionLimit": 50000\n }\n }\n }\'', + }, + }, + }, + { + name: 'list', + endpoint: '/agents', + httpMethod: 'get', + summary: 'List agents', + description: 'Retrieve a paginated list of agents for the authenticated platform.', + stainlessPath: '(resource) agents > (method) list', + qualified: 'client.agents.list', + params: [ + 'createdAfter?: string;', + 'createdBefore?: string;', + 'cursor?: string;', + 'customerId?: string;', + 'isConnected?: boolean;', + 'isPaused?: boolean;', + 'limit?: number;', + 'updatedAfter?: string;', + 'updatedBefore?: string;', + ], + response: + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + markdown: + "## list\n\n`client.agents.list(createdAfter?: string, createdBefore?: string, cursor?: string, customerId?: string, isConnected?: boolean, isPaused?: boolean, limit?: number, updatedAfter?: string, updatedBefore?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents`\n\nRetrieve a paginated list of agents for the authenticated platform.\n\n### Parameters\n\n- `createdAfter?: string`\n Filter agents created after this timestamp (inclusive)\n\n- `createdBefore?: string`\n Filter agents created before this timestamp (inclusive)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `isConnected?: boolean`\n Filter by connection status (whether the device code has been redeemed)\n\n- `isPaused?: boolean`\n Filter by paused status\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `updatedAfter?: string`\n Filter agents updated after this timestamp (inclusive)\n\n- `updatedBefore?: string`\n Filter agents updated before this timestamp (inclusive)\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListResponse of client.agents.list()) {\n console.log(agentListResponse);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.list', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentListResponse of client.agents.list()) {\n console.log(agentListResponse.id);\n}", + }, + python: { + method: 'agents.list', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\npage = client.agents.list()\npage = page.data[0]\nprint(page.id)', + }, + kotlin: { + method: 'agents().list', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentListPage\nimport com.lightspark.grid.models.agents.AgentListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: AgentListPage = client.agents().list()\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'list_approvals', + endpoint: '/agents/approvals', + httpMethod: 'get', + summary: 'List agent transaction approval requests', + description: + 'Retrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n', + stainlessPath: '(resource) agents > (method) list_approvals', + qualified: 'client.agents.listApprovals', + params: [ + 'agentId?: string;', + 'cursor?: string;', + 'customerId?: string;', + 'endDate?: string;', + 'limit?: number;', + "sortOrder?: 'asc' | 'desc';", + 'startDate?: string;', + ], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## list_approvals\n\n`client.agents.listApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.listApprovals', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse.id);\n}", + }, + python: { + method: 'agents.list_approvals', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\npage = client.agents.list_approvals()\npage = page.data[0]\nprint(page.id)', + }, + kotlin: { + method: 'agents().listApprovals', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentListApprovalsPage\nimport com.lightspark.grid.models.agents.AgentListApprovalsParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: AgentListApprovalsPage = client.agents().listApprovals()\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/approvals \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/{agentId}', + httpMethod: 'get', + summary: 'Get agent by ID', + description: 'Retrieve an agent by its system-generated ID.', + stainlessPath: '(resource) agents > (method) retrieve', + qualified: 'client.agents.retrieve', + params: ['agentId: string;'], + response: + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + markdown: + "## retrieve\n\n`client.agents.retrieve(agentId: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/{agentId}`\n\nRetrieve an agent by its system-generated ID.\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.retrieve('agentId');\n\nconsole.log(agent);\n```", + perLanguage: { + typescript: { + method: 'client.agents.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.retrieve('agentId');\n\nconsole.log(agent.id);", + }, + python: { + method: 'agents.retrieve', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent = client.agents.retrieve(\n "agentId",\n)\nprint(agent.id)', + }, + kotlin: { + method: 'agents().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentRetrieveParams\nimport com.lightspark.grid.models.agents.AgentRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agent: AgentRetrieveResponse = client.agents().retrieve("agentId")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'update', + endpoint: '/agents/{agentId}', + httpMethod: 'patch', + summary: 'Update agent', + description: "Update an agent's name or paused state.", + stainlessPath: '(resource) agents > (method) update', + qualified: 'client.agents.update', + params: ['agentId: string;', 'isPaused?: boolean;', 'name?: string;'], + response: + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + markdown: + "## update\n\n`client.agents.update(agentId: string, isPaused?: boolean, name?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**patch** `/agents/{agentId}`\n\nUpdate an agent's name or paused state.\n\n### Parameters\n\n- `agentId: string`\n\n- `isPaused?: boolean`\n Set to true to pause the agent or false to resume it.\n\n- `name?: string`\n Updated name for the agent.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.update('agentId');\n\nconsole.log(agent);\n```", + perLanguage: { + typescript: { + method: 'client.agents.update', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.update('agentId');\n\nconsole.log(agent.id);", + }, + python: { + method: 'agents.update', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent = client.agents.update(\n agent_id="agentId",\n)\nprint(agent.id)', + }, + kotlin: { + method: 'agents().update', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentUpdateParams\nimport com.lightspark.grid.models.agents.AgentUpdateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agent: AgentUpdateResponse = client.agents().update("agentId")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID \\\n -X PATCH \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "isPaused": true,\n "name": "Updated Payroll Agent"\n }\'', + }, + }, + }, + { + name: 'delete', + endpoint: '/agents/{agentId}', + httpMethod: 'delete', + summary: 'Delete agent', + description: 'Permanently delete an agent. Connected agent software will lose access immediately.', + stainlessPath: '(resource) agents > (method) delete', + qualified: 'client.agents.delete', + params: ['agentId: string;'], + markdown: + "## delete\n\n`client.agents.delete(agentId: string): void`\n\n**delete** `/agents/{agentId}`\n\nPermanently delete an agent. Connected agent software will lose access immediately.\n\n### Parameters\n\n- `agentId: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nawait client.agents.delete('agentId')\n```", + perLanguage: { + typescript: { + method: 'client.agents.delete', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nawait client.agents.delete('agentId');", + }, + python: { + method: 'agents.delete', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nclient.agents.delete(\n "agentId",\n)', + }, + kotlin: { + method: 'agents().delete', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentDeleteParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n client.agents().delete("agentId")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID \\\n -X DELETE \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'update_policy', + endpoint: '/agents/{agentId}/policy', + httpMethod: 'patch', + summary: 'Update agent policy', + description: + "Partially update an agent's policy. Only provided fields will be updated; omitted fields retain their current values. Policy changes take effect immediately.\n", + stainlessPath: '(resource) agents > (method) update_policy', + qualified: 'client.agents.updatePolicy', + params: [ + 'agentId: string;', + "accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; };", + 'approvalThresholds?: { amount?: number; currency?: string; };', + "defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED';", + 'permissions?: string[];', + 'spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; };', + ], + response: + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + markdown: + "## update_policy\n\n`client.agents.updatePolicy(agentId: string, accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }, approvalThresholds?: { amount?: number; currency?: string; }, defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED', permissions?: string[], spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**patch** `/agents/{agentId}/policy`\n\nPartially update an agent's policy. Only provided fields will be updated; omitted fields retain their current values. Policy changes take effect immediately.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]`\n Per-account rules that override the agent's default policy for specific accounts.\n - `allowedAccountIds?: string[]`\n If set, restricts the agent to operate only on the specified internal account IDs. Null means the agent can access all accounts.\n\n- `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n - `amount?: number`\n If set, any transaction above this amount (in the smallest unit of the specified currency) will require explicit approval even when the agent's defaultExecutionMode is AUTO. Null means no threshold override.\n - `currency?: string`\n ISO 4217 currency code that the amount threshold is denominated in. Required when amount is set.\n\n- `defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n\n- `permissions?: string[]`\n Updated list of permissions. Replaces the entire permissions list when provided.\n\n- `spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }`\n Partial update to spending limits. Only provided fields will be updated; omitted fields retain their current values.\n - `currency?: string`\n ISO 4217 currency code that all amount limits are denominated in. Updating this recasts all existing limits into the new currency denomination.\n - `dailyLimit?: number`\n Maximum daily spend. Set to null to remove the daily limit.\n - `dailyTransactionLimit?: number`\n Maximum number of transactions per day.\n - `monthlyLimit?: number`\n Maximum monthly spend. Set to null to remove the monthly limit.\n - `perTransactionLimit?: number`\n Maximum amount per transaction.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.updatePolicy('agentId');\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.updatePolicy', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.updatePolicy('agentId');\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.update_policy', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.update_policy(\n agent_id="agentId",\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().updatePolicy', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentUpdatePolicyParams\nimport com.lightspark.grid.models.agents.AgentUpdatePolicyResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: AgentUpdatePolicyResponse = client.agents().updatePolicy("agentId")\n}', + }, + http: { + example: + "curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID/policy \\\n -X PATCH \\\n -H 'Content-Type: application/json' \\\n -u \"$GRID_CLIENT_ID:GRID_CLIENT_SECRET\" \\\n -d '{}'", + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/me', + httpMethod: 'get', + summary: 'Get current agent', + description: + "Retrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n", + stainlessPath: '(resource) agents.me > (method) retrieve', + qualified: 'client.agents.me.retrieve', + response: + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + markdown: + "## retrieve\n\n`client.agents.me.retrieve(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me.id);", + }, + python: { + method: 'agents.me.retrieve', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nme = client.agents.me.retrieve()\nprint(me.id)', + }, + kotlin: { + method: 'agents().me().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeRetrieveParams\nimport com.lightspark.grid.models.agents.me.MeRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val me: MeRetrieveResponse = client.agents().me().retrieve()\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me', + }, + }, + }, + { + name: 'create_transfer_in', + endpoint: '/agents/me/transfer-in', + httpMethod: 'post', + summary: 'Create a transfer-in', + description: + "Transfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n", + stainlessPath: '(resource) agents.me > (method) create_transfer_in', + qualified: 'client.agents.me.createTransferIn', + params: [ + 'destination: { accountId: string; };', + 'source: { accountId: string; };', + 'amount?: number;', + 'Idempotency-Key?: string;', + ], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.createTransferIn', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.me.create_transfer_in', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().me().createTransferIn', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferInParams = MeCreateTransferInParams.builder()\n .destination(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .source(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val response: MeCreateTransferInResponse = client.agents().me().createTransferIn(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transfer-in \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "destination": {\n "accountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n "source": {\n "accountId": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n "amount": 12550\n }\'', + }, + }, + }, + { + name: 'create_transfer_out', + endpoint: '/agents/me/transfer-out', + httpMethod: 'post', + summary: 'Create a transfer-out', + description: + "Transfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\n", + stainlessPath: '(resource) agents.me > (method) create_transfer_out', + qualified: 'client.agents.me.createTransferOut', + params: [ + 'destination: { accountId: string; };', + 'source: { accountId: string; };', + 'amount?: number;', + 'Idempotency-Key?: string;', + ], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.createTransferOut', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.me.create_transfer_out', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().me().createTransferOut', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferOutParams = MeCreateTransferOutParams.builder()\n .destination(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .source(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .build()\n val response: MeCreateTransferOutResponse = client.agents().me().createTransferOut(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transfer-out \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "destination": {\n "accountId": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n "source": {\n "accountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n "amount": 12550\n }\'', + }, + }, + }, + { + name: 'list_internal_accounts', + endpoint: '/agents/me/internal-accounts', + httpMethod: 'get', + summary: "List agent's internal accounts", + description: + "Retrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n", + stainlessPath: '(resource) agents.me > (method) list_internal_accounts', + qualified: 'client.agents.me.listInternalAccounts', + params: [ + 'currency?: string;', + 'cursor?: string;', + 'limit?: number;', + "type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET';", + ], + response: + "{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }", + markdown: + "## list_internal_accounts\n\n`client.agents.me.listInternalAccounts(currency?: string, cursor?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**get** `/agents/me/internal-accounts`\n\nRetrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for platform-managed holding accounts.\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.listInternalAccounts', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount.id);\n}", + }, + python: { + method: 'agents.me.list_internal_accounts', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.list_internal_accounts()\npage = page.data[0]\nprint(page.id)', + }, + kotlin: { + method: 'agents().me().listInternalAccounts', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsPage\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: MeListInternalAccountsPage = client.agents().me().listInternalAccounts()\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/internal-accounts', + }, + }, + }, + { + name: 'list', + endpoint: '/agents/me/transactions', + httpMethod: 'get', + summary: 'List agent transactions', + description: + "Retrieve a paginated list of transactions for the authenticated agent's customer. Results are automatically scoped to the agent's associated customer — no customer filter is needed or accepted.\n", + stainlessPath: '(resource) agents.me.transactions > (method) list', + qualified: 'client.agents.me.transactions.list', + params: [ + 'accountIdentifier?: string;', + 'cursor?: string;', + 'endDate?: string;', + 'limit?: number;', + 'receiverAccountIdentifier?: string;', + 'reference?: string;', + 'senderAccountIdentifier?: string;', + "sortOrder?: 'asc' | 'desc';", + 'startDate?: string;', + "status?: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED';", + "type?: 'INCOMING' | 'OUTGOING';", + ], + response: + "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", + markdown: + "## list\n\n`client.agents.me.transactions.list(accountIdentifier?: string, cursor?: string, endDate?: string, limit?: number, receiverAccountIdentifier?: string, reference?: string, senderAccountIdentifier?: string, sortOrder?: 'asc' | 'desc', startDate?: string, status?: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED', type?: 'INCOMING' | 'OUTGOING'): object | object`\n\n**get** `/agents/me/transactions`\n\nRetrieve a paginated list of transactions for the authenticated agent's customer. Results are automatically scoped to the agent's associated customer — no customer filter is needed or accepted.\n\n\n### Parameters\n\n- `accountIdentifier?: string`\n Filter by account identifier (matches either sender or receiver)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `receiverAccountIdentifier?: string`\n Filter by receiver account identifier\n\n- `reference?: string`\n Filter by reference\n\n- `senderAccountIdentifier?: string`\n Filter by sender account identifier\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n- `status?: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'`\n Filter by transaction status\n\n- `type?: 'INCOMING' | 'OUTGOING'`\n Filter by transaction type\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const transaction of client.agents.me.transactions.list()) {\n console.log(transaction);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.transactions.list', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const transaction of client.agents.me.transactions.list()) {\n console.log(transaction);\n}", + }, + python: { + method: 'agents.me.transactions.list', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.transactions.list()\npage = page.data[0]\nprint(page)', + }, + kotlin: { + method: 'agents().me().transactions().list', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.transactions.TransactionListPage\nimport com.lightspark.grid.models.agents.me.transactions.TransactionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: TransactionListPage = client.agents().me().transactions().list()\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transactions', + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/me/transactions/{transactionId}', + httpMethod: 'get', + summary: 'Get agent transaction by ID', + description: + "Retrieve a specific transaction belonging to the authenticated agent's customer. Returns 404 if the transaction exists but belongs to a different customer.\n", + stainlessPath: '(resource) agents.me.transactions > (method) retrieve', + qualified: 'client.agents.me.transactions.retrieve', + params: ['transactionId: string;'], + response: + "{ id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }", + markdown: + "## retrieve\n\n`client.agents.me.transactions.retrieve(transactionId: string): object | object`\n\n**get** `/agents/me/transactions/{transactionId}`\n\nRetrieve a specific transaction belonging to the authenticated agent's customer. Returns 404 if the transaction exists but belongs to a different customer.\n\n\n### Parameters\n\n- `transactionId: string`\n\n### Returns\n\n- `{ id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.agents.me.transactions.retrieve('transactionId');\n\nconsole.log(transaction);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.transactions.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.agents.me.transactions.retrieve('transactionId');\n\nconsole.log(transaction);", + }, + python: { + method: 'agents.me.transactions.retrieve', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\ntransaction = client.agents.me.transactions.retrieve(\n "transactionId",\n)\nprint(transaction)', + }, + kotlin: { + method: 'agents().me().transactions().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.transactions.TransactionRetrieveParams\nimport com.lightspark.grid.models.transferin.Transaction\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val transaction: Transaction = client.agents().me().transactions().retrieve("transactionId")\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transactions/$TRANSACTION_ID', + }, + }, + }, + { + name: 'create', + endpoint: '/agents/me/quotes', + httpMethod: 'post', + summary: 'Create a transfer quote', + description: + "Generate a quote for a cross-currency transfer on behalf of the authenticated agent's customer. Accounts referenced in the request must belong to the agent's customer. Requires the CREATE_QUOTES permission in the agent's policy.\nIf the agent's defaultExecutionMode is APPROVAL_REQUIRED, or the quote amount exceeds the agent's approvalThresholds, the resulting transaction will require explicit approval before funds move.\n", + stainlessPath: '(resource) agents.me.quotes > (method) create', + qualified: 'client.agents.me.quotes.create', + params: [ + "destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; };", + 'lockedCurrencyAmount: number;', + "lockedCurrencySide: 'SENDING' | 'RECEIVING';", + "source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; };", + 'description?: string;', + 'immediatelyExecute?: boolean;', + 'lookupId?: string;', + 'purposeOfPayment?: string;', + 'senderCustomerInfo?: object;', + 'Idempotency-Key?: string;', + ], + response: + "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", + markdown: + "## create\n\n`client.agents.me.quotes.create(destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }, lockedCurrencyAmount: number, lockedCurrencySide: 'SENDING' | 'RECEIVING', source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }, description?: string, immediatelyExecute?: boolean, lookupId?: string, purposeOfPayment?: string, senderCustomerInfo?: object, Idempotency-Key?: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**post** `/agents/me/quotes`\n\nGenerate a quote for a cross-currency transfer on behalf of the authenticated agent's customer. Accounts referenced in the request must belong to the agent's customer. Requires the CREATE_QUOTES permission in the agent's policy.\nIf the agent's defaultExecutionMode is APPROVAL_REQUIRED, or the quote amount exceeds the agent's approvalThresholds, the resulting transaction will require explicit approval before funds move.\n\n\n### Parameters\n\n- `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n Destination account details\n\n- `lockedCurrencyAmount: number`\n The amount to send/receive in the smallest unit of the locked currency (eg. cents). See `lockedCurrencySide` for more information.\n\n- `lockedCurrencySide: 'SENDING' | 'RECEIVING'`\n The side of the quote which should be locked and specified in the `lockedCurrencyAmount`. For example, if I want to send exactly $5 MXN from my wallet, I would set this to \"sending\", and the `lockedCurrencyAmount` to 500 (in cents). If I want the receiver to receive exactly $10 USD, I would set this to \"receiving\" and the `lockedCurrencyAmount` to 10000 (in cents).\n\n- `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n Source account details\n\n- `description?: string`\n Optional description/memo for the transfer\n\n- `immediatelyExecute?: boolean`\n Whether to immediately execute the quote after creation. If true, the quote will be executed and the transaction will be created at the current exchange rate. It should only be used if you don't want to lock and view rate details before executing the quote. If you are executing a pre-existing quote, use the `/quotes/{quoteId}/execute` endpoint instead. This is false by default.\nThis can only be used for quotes with a `source` which is either an internal account, or has direct pull functionality (e.g. ACH pull with an external account).\nNot supported when the `source` is an internal account of type `EMBEDDED_WALLET`: those transfers require a `Grid-Wallet-Signature` over the `payloadToSign` returned in the quote response, which is not available in a combined create-and-execute call. Create the quote first with `immediatelyExecute: false` and then call `POST /quotes/{quoteId}/execute` with the signature header.\n\n- `lookupId?: string`\n Lookup ID from a previous receiver lookup request. If provided, this can make the quote creation more efficient by reusing cached lookup data.\nNOTE: This is required for UMA destinations due to counterparty institution requirements. See `senderCustomerInfo` for more information.\n\n- `purposeOfPayment?: string`\n The purpose of the payment. This may be required when sending to certain geographies (e.g. India).\n\n- `senderCustomerInfo?: object`\n Key-value pairs of additional information about the sender which was requested by the destination. This is relevant when the destination requires more sender info than was provided during customer creation.\nAny fields specified in `requiredPayerDataFields` from the response of the `/receiver/uma/{receiverUmaAddress}` (lookupUma) or `/receiver/external-account/{accountId}` (lookupExternalAccount) endpoints MUST be provided here if they were requested. If the destination did not request any additional information, this field can be omitted.\n\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.agents.me.quotes.create({\n destination: { accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', destinationType: 'ACCOUNT' },\n lockedCurrencyAmount: 1000,\n lockedCurrencySide: 'SENDING',\n source: { accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', sourceType: 'ACCOUNT' },\n});\n\nconsole.log(quote);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.quotes.create', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.agents.me.quotes.create({\n destination: {\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n destinationType: 'ACCOUNT',\n },\n lockedCurrencyAmount: 1000,\n lockedCurrencySide: 'SENDING',\n source: {\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n sourceType: 'ACCOUNT',\n },\n});\n\nconsole.log(quote.id);", + }, + python: { + method: 'agents.me.quotes.create', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nquote = client.agents.me.quotes.create(\n destination={\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n "destination_type": "ACCOUNT",\n },\n locked_currency_amount=1000,\n locked_currency_side="SENDING",\n source={\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n "source_type": "ACCOUNT",\n },\n)\nprint(quote.id)', + }, + kotlin: { + method: 'agents().me().quotes().create', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(1000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val quote: Quote = client.agents().me().quotes().create(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "destination": {\n "accountId": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n "destinationType": "ACCOUNT"\n },\n "lockedCurrencyAmount": 1000,\n "lockedCurrencySide": "SENDING",\n "source": {\n "accountId": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n "sourceType": "ACCOUNT"\n },\n "description": "Invoice #1234 payment",\n "lookupId": "Lookup:019542f5-b3e7-1d02-0000-000000000009",\n "senderCustomerInfo": {\n "FULL_NAME": "bar",\n "NATIONALITY": "bar"\n }\n }\'', + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/me/quotes/{quoteId}', + httpMethod: 'get', + summary: 'Get agent quote by ID', + description: + 'Retrieve a quote created by the authenticated agent. Returns 404 if the quote exists but was not created by this agent.\n', + stainlessPath: '(resource) agents.me.quotes > (method) retrieve', + qualified: 'client.agents.me.quotes.retrieve', + params: ['quoteId: string;'], + response: + "{ id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }", + markdown: + "## retrieve\n\n`client.agents.me.quotes.retrieve(quoteId: string): { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }`\n\n**get** `/agents/me/quotes/{quoteId}`\n\nRetrieve a quote created by the authenticated agent. Returns 404 if the quote exists but was not created by this agent.\n\n\n### Parameters\n\n- `quoteId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n\n - `id: string`\n - `createdAt: string`\n - `destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }`\n - `exchangeRate: number`\n - `expiresAt: string`\n - `feesIncluded: number`\n - `receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }`\n - `source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }`\n - `status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'`\n - `totalReceivingAmount: number`\n - `totalSendingAmount: number`\n - `transactionId: string`\n - `counterpartyInformation?: object`\n - `paymentInstructions?: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.agents.me.quotes.retrieve('quoteId');\n\nconsole.log(quote);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.quotes.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.agents.me.quotes.retrieve('quoteId');\n\nconsole.log(quote.id);", + }, + python: { + method: 'agents.me.quotes.retrieve', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nquote = client.agents.me.quotes.retrieve(\n "quoteId",\n)\nprint(quote.id)', + }, + kotlin: { + method: 'agents().me().quotes().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.quotes.QuoteRetrieveParams\nimport com.lightspark.grid.models.quotes.Quote\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val quote: Quote = client.agents().me().quotes().retrieve("quoteId")\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes/$QUOTE_ID', + }, + }, + }, + { + name: 'execute', + endpoint: '/agents/me/quotes/{quoteId}/execute', + httpMethod: 'post', + summary: 'Execute a quote', + description: + "Execute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n", + stainlessPath: '(resource) agents.me.quotes > (method) execute', + qualified: 'client.agents.me.quotes.execute', + params: ['quoteId: string;', 'Grid-Wallet-Signature?: string;', 'Idempotency-Key?: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## execute\n\n`client.agents.me.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/quotes/{quoteId}/execute`\n\nExecute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.quotes.execute', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute(\n 'Quote:019542f5-b3e7-1d02-0000-000000000001',\n);\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.me.quotes.execute', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.quotes.execute(\n quote_id="Quote:019542f5-b3e7-1d02-0000-000000000001",\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().me().quotes().execute', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.quotes.QuoteExecuteParams\nimport com.lightspark.grid.models.agents.me.quotes.QuoteExecuteResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: QuoteExecuteResponse = client.agents().me().quotes().execute("Quote:019542f5-b3e7-1d02-0000-000000000001")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes/$QUOTE_ID/execute \\\n -X POST', + }, + }, + }, + { + name: 'list', + endpoint: '/agents/me/external-accounts', + httpMethod: 'get', + summary: 'List agent external accounts', + description: + "Retrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n", + stainlessPath: '(resource) agents.me.external_accounts > (method) list', + qualified: 'client.agents.me.externalAccounts.list', + params: ['currency?: string;', 'cursor?: string;', 'limit?: number;'], + response: + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + markdown: + "## list\n\n`client.agents.me.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/agents/me/external-accounts`\n\nRetrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.externalAccounts.list', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount.id);\n}", + }, + python: { + method: 'agents.me.external_accounts.list', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.external_accounts.list()\npage = page.data[0]\nprint(page.id)', + }, + kotlin: { + method: 'agents().me().externalAccounts().list', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListPage\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ExternalAccountListPage = client.agents().me().externalAccounts().list()\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts', + }, + }, + }, + { + name: 'add', + endpoint: '/agents/me/external-accounts', + httpMethod: 'post', + summary: 'Add an external account', + description: + "Register a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n", + stainlessPath: '(resource) agents.me.external_accounts > (method) add', + qualified: 'client.agents.me.externalAccounts.add', + params: [ + "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", + 'currency: string;', + 'customerId?: string;', + 'defaultUmaDepositAccount?: boolean;', + 'platformAccountId?: string;', + ], + response: + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + markdown: + "## add\n\n`client.agents.me.externalAccounts.add(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/agents/me/external-accounts`\n\nRegister a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.externalAccounts.add', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountType: 'USD_ACCOUNT',\n accountNumber: '12345678901',\n routingNumber: '123456789',\n beneficiary: {\n beneficiaryType: 'INDIVIDUAL',\n fullName: 'John Doe',\n birthDate: '1990-01-15',\n nationality: 'US',\n address: {\n line1: '123 Main Street',\n city: 'San Francisco',\n state: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n },\n },\n currency: 'USD',\n});\n\nconsole.log(externalAccount.id);", + }, + python: { + method: 'agents.me.external_accounts.add', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.add(\n account_info={\n "account_type": "USD_ACCOUNT",\n "account_number": "12345678901",\n "routing_number": "123456789",\n "beneficiary": {\n "beneficiary_type": "INDIVIDUAL",\n "full_name": "John Doe",\n "birth_date": "1990-01-15",\n "nationality": "US",\n "address": {\n "line1": "123 Main Street",\n "city": "San Francisco",\n "state": "CA",\n "postal_code": "94105",\n "country": "US",\n },\n },\n },\n currency="USD",\n)\nprint(external_account.id)', + }, + kotlin: { + method: 'agents().me().externalAccounts().add', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.UsdExternalAccountCreateInfo\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreate\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ExternalAccountCreate = ExternalAccountCreate.builder()\n .accountInfo(UsdExternalAccountCreateInfo.builder()\n .accountNumber("12345678901")\n .accountType(UsdExternalAccountCreateInfo.AccountType.USD_ACCOUNT)\n .individualBeneficiary("John Doe")\n .routingNumber("123456789")\n .build())\n .currency("USD")\n .build()\n val externalAccount: ExternalAccount = client.agents().me().externalAccounts().add(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "accountInfo": {\n "accountNumber": "12345678901",\n "accountType": "USD_ACCOUNT",\n "beneficiary": {\n "beneficiaryType": "INDIVIDUAL",\n "fullName": "John Doe",\n "address": {\n "country": "US",\n "line1": "123 Main Street",\n "postalCode": "94105",\n "city": "San Francisco",\n "state": "CA"\n },\n "birthDate": "1990-01-15",\n "nationality": "US"\n },\n "routingNumber": "123456789"\n },\n "currency": "USD",\n "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",\n "platformAccountId": "ext_acc_123456"\n }\'', + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/me/external-accounts/{externalAccountId}', + httpMethod: 'get', + summary: 'Get agent external account by ID', + description: + "Retrieve an external account belonging to the authenticated agent's customer. Returns 404 if the account exists but belongs to a different customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n", + stainlessPath: '(resource) agents.me.external_accounts > (method) retrieve', + qualified: 'client.agents.me.externalAccounts.retrieve', + params: ['externalAccountId: string;'], + response: + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + markdown: + "## retrieve\n\n`client.agents.me.externalAccounts.retrieve(externalAccountId: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/agents/me/external-accounts/{externalAccountId}`\n\nRetrieve an external account belonging to the authenticated agent's customer. Returns 404 if the account exists but belongs to a different customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.externalAccounts.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount.id);", + }, + python: { + method: 'agents.me.external_accounts.retrieve', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.retrieve(\n "externalAccountId",\n)\nprint(external_account.id)', + }, + kotlin: { + method: 'agents().me().externalAccounts().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountRetrieveParams\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val externalAccount: ExternalAccount = client.agents().me().externalAccounts().retrieve("externalAccountId")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts/$EXTERNAL_ACCOUNT_ID', + }, + }, + }, + { + name: 'delete', + endpoint: '/agents/me/external-accounts/{externalAccountId}', + httpMethod: 'delete', + summary: 'Delete agent external account', + description: + "Delete an external account belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n", + stainlessPath: '(resource) agents.me.external_accounts > (method) delete', + qualified: 'client.agents.me.externalAccounts.delete', + params: ['externalAccountId: string;'], + markdown: + "## delete\n\n`client.agents.me.externalAccounts.delete(externalAccountId: string): void`\n\n**delete** `/agents/me/external-accounts/{externalAccountId}`\n\nDelete an external account belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n\n\n### Parameters\n\n- `externalAccountId: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nawait client.agents.me.externalAccounts.delete('externalAccountId')\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.externalAccounts.delete', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nawait client.agents.me.externalAccounts.delete('externalAccountId');", + }, + python: { + method: 'agents.me.external_accounts.delete', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nclient.agents.me.external_accounts.delete(\n "externalAccountId",\n)', + }, + kotlin: { + method: 'agents().me().externalAccounts().delete', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountDeleteParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n client.agents().me().externalAccounts().delete("externalAccountId")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts/$EXTERNAL_ACCOUNT_ID \\\n -X DELETE', + }, + }, + }, + { + name: 'list', + endpoint: '/agents/me/actions', + httpMethod: 'get', + summary: "List agent's own actions", + description: + 'Retrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n', + stainlessPath: '(resource) agents.me.actions > (method) list', + qualified: 'client.agents.me.actions.list', + params: [ + 'cursor?: string;', + 'limit?: number;', + "status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED';", + ], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.actions.list', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", + }, + python: { + method: 'agents.me.actions.list', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.actions.list()\npage = page.data[0]\nprint(page.id)', + }, + kotlin: { + method: 'agents().me().actions().list', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionListPage\nimport com.lightspark.grid.models.agents.me.actions.ActionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ActionListPage = client.agents().me().actions().list()\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions', + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/me/actions/{actionId}', + httpMethod: 'get', + summary: 'Get an agent action', + description: + 'Retrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n', + stainlessPath: '(resource) agents.me.actions > (method) retrieve', + qualified: 'client.agents.me.actions.retrieve', + params: ['actionId: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.actions.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", + }, + python: { + method: 'agents.me.actions.retrieve', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', + }, + kotlin: { + method: 'agents().me().actions().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val action: ActionRetrieveResponse = client.agents().me().actions().retrieve("actionId")\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions/$ACTION_ID', + }, + }, + }, + { + name: 'regenerate', + endpoint: '/agents/{agentId}/device-codes', + httpMethod: 'post', + summary: 'Regenerate a device code', + description: + 'Generate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n', + stainlessPath: '(resource) agents.device_codes > (method) regenerate', + qualified: 'client.agents.deviceCodes.regenerate', + params: ['agentId: string;'], + response: '{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }', + markdown: + "## regenerate\n\n`client.agents.deviceCodes.regenerate(agentId: string): { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n**post** `/agents/{agentId}/device-codes`\n\nGenerate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n - `agentId: string`\n - `code: string`\n - `expiresAt: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.deviceCodes.regenerate', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response.agentId);", + }, + python: { + method: 'agents.device_codes.regenerate', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.regenerate(\n "agentId",\n)\nprint(response.agent_id)', + }, + kotlin: { + method: 'agents().deviceCodes().regenerate', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRegenerateResponse = client.agents().deviceCodes().regenerate("agentId")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID/device-codes \\\n -X POST \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'get_status', + endpoint: '/agents/device-codes/{code}/status', + httpMethod: 'get', + summary: 'Get device code status', + description: + 'Check whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n', + stainlessPath: '(resource) agents.device_codes > (method) get_status', + qualified: 'client.agents.deviceCodes.getStatus', + params: ['code: string;'], + response: '{ code: string; redeemed: boolean; }', + markdown: + "## get_status\n\n`client.agents.deviceCodes.getStatus(code: string): { code: string; redeemed: boolean; }`\n\n**get** `/agents/device-codes/{code}/status`\n\nCheck whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ code: string; redeemed: boolean; }`\n\n - `code: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.deviceCodes.getStatus', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response.code);", + }, + python: { + method: 'agents.device_codes.get_status', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.get_status(\n "code",\n)\nprint(response.code)', + }, + kotlin: { + method: 'agents().deviceCodes().getStatus', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeGetStatusResponse = client.agents().deviceCodes().getStatus("code")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/device-codes/$CODE/status \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'redeem', + endpoint: '/agents/device-codes/{code}/redeem', + httpMethod: 'post', + summary: 'Redeem device code', + description: + 'Redeem a device code to obtain agent credentials. This endpoint is called by the agent software during installation. On success, returns a Bearer access token that the agent uses for all subsequent API calls. The token is returned only once and must be stored securely.\nThis endpoint does not require platform authentication — the device code itself serves as proof of authorization.\n', + stainlessPath: '(resource) agents.device_codes > (method) redeem', + qualified: 'client.agents.deviceCodes.redeem', + params: ['code: string;'], + response: + "{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; }", + markdown: + "## redeem\n\n`client.agents.deviceCodes.redeem(code: string): { accessToken: string; agentId: string; agentName: string; policy: object; }`\n\n**post** `/agents/device-codes/{code}/redeem`\n\nRedeem a device code to obtain agent credentials. This endpoint is called by the agent software during installation. On success, returns a Bearer access token that the agent uses for all subsequent API calls. The token is returned only once and must be stored securely.\nThis endpoint does not require platform authentication — the device code itself serves as proof of authorization.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; }`\n\n - `accessToken: string`\n - `agentId: string`\n - `agentName: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.deviceCodes.redeem', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(response.accessToken);", + }, + python: { + method: 'agents.device_codes.redeem', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.device_codes.redeem(\n "code",\n)\nprint(response.access_token)', + }, + kotlin: { + method: 'agents().deviceCodes().redeem', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRedeemParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRedeemResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRedeemResponse = client.agents().deviceCodes().redeem("code")\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/device-codes/$CODE/redeem \\\n -X POST \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'approve', + endpoint: '/agents/{agentId}/actions/{actionId}/approve', + httpMethod: 'post', + summary: 'Approve an agent action', + description: + "Approve a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n", + stainlessPath: '(resource) agents.actions > (method) approve', + qualified: 'client.agents.actions.approve', + params: ['agentId: string;', 'actionId: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## approve\n\n`client.agents.actions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.actions.approve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.actions.approve', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.actions.approve(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().actions().approve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.actions.ActionApproveParams\nimport com.lightspark.grid.models.agents.actions.ActionApproveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ActionApproveParams = ActionApproveParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: ActionApproveResponse = client.agents().actions().approve(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID/actions/$ACTION_ID/approve \\\n -X POST \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'reject', + endpoint: '/agents/{agentId}/actions/{actionId}/reject', + httpMethod: 'post', + summary: 'Reject an agent action', + description: + "Reject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n", + stainlessPath: '(resource) agents.actions > (method) reject', + qualified: 'client.agents.actions.reject', + params: ['agentId: string;', 'actionId: string;', 'reason?: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## reject\n\n`client.agents.actions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.actions.reject', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.actions.reject', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.actions.reject(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().actions().reject', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.actions.ActionRejectParams\nimport com.lightspark.grid.models.agents.actions.ActionRejectResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ActionRejectParams = ActionRejectParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: ActionRejectResponse = client.agents().actions().reject(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID/actions/$ACTION_ID/reject \\\n -X POST \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, ]; const EMBEDDED_READMES: { language: string; content: string }[] = [ diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts index 5a118d8..95baf12 100644 --- a/packages/mcp-server/src/methods.ts +++ b/packages/mcp-server/src/methods.ts @@ -413,6 +413,168 @@ export const sdkMethods: SdkMethod[] = [ httpMethod: 'post', httpPath: '/internal-accounts/{id}/export', }, + { + clientCallName: 'client.agents.create', + fullyQualifiedName: 'agents.create', + httpMethod: 'post', + httpPath: '/agents', + }, + { + clientCallName: 'client.agents.retrieve', + fullyQualifiedName: 'agents.retrieve', + httpMethod: 'get', + httpPath: '/agents/{agentId}', + }, + { + clientCallName: 'client.agents.update', + fullyQualifiedName: 'agents.update', + httpMethod: 'patch', + httpPath: '/agents/{agentId}', + }, + { + clientCallName: 'client.agents.list', + fullyQualifiedName: 'agents.list', + httpMethod: 'get', + httpPath: '/agents', + }, + { + clientCallName: 'client.agents.delete', + fullyQualifiedName: 'agents.delete', + httpMethod: 'delete', + httpPath: '/agents/{agentId}', + }, + { + clientCallName: 'client.agents.listApprovals', + fullyQualifiedName: 'agents.listApprovals', + httpMethod: 'get', + httpPath: '/agents/approvals', + }, + { + clientCallName: 'client.agents.updatePolicy', + fullyQualifiedName: 'agents.updatePolicy', + httpMethod: 'patch', + httpPath: '/agents/{agentId}/policy', + }, + { + clientCallName: 'client.agents.me.retrieve', + fullyQualifiedName: 'agents.me.retrieve', + httpMethod: 'get', + httpPath: '/agents/me', + }, + { + clientCallName: 'client.agents.me.createTransferIn', + fullyQualifiedName: 'agents.me.createTransferIn', + httpMethod: 'post', + httpPath: '/agents/me/transfer-in', + }, + { + clientCallName: 'client.agents.me.createTransferOut', + fullyQualifiedName: 'agents.me.createTransferOut', + httpMethod: 'post', + httpPath: '/agents/me/transfer-out', + }, + { + clientCallName: 'client.agents.me.listInternalAccounts', + fullyQualifiedName: 'agents.me.listInternalAccounts', + httpMethod: 'get', + httpPath: '/agents/me/internal-accounts', + }, + { + clientCallName: 'client.agents.me.transactions.retrieve', + fullyQualifiedName: 'agents.me.transactions.retrieve', + httpMethod: 'get', + httpPath: '/agents/me/transactions/{transactionId}', + }, + { + clientCallName: 'client.agents.me.transactions.list', + fullyQualifiedName: 'agents.me.transactions.list', + httpMethod: 'get', + httpPath: '/agents/me/transactions', + }, + { + clientCallName: 'client.agents.me.quotes.create', + fullyQualifiedName: 'agents.me.quotes.create', + httpMethod: 'post', + httpPath: '/agents/me/quotes', + }, + { + clientCallName: 'client.agents.me.quotes.retrieve', + fullyQualifiedName: 'agents.me.quotes.retrieve', + httpMethod: 'get', + httpPath: '/agents/me/quotes/{quoteId}', + }, + { + clientCallName: 'client.agents.me.quotes.execute', + fullyQualifiedName: 'agents.me.quotes.execute', + httpMethod: 'post', + httpPath: '/agents/me/quotes/{quoteId}/execute', + }, + { + clientCallName: 'client.agents.me.externalAccounts.retrieve', + fullyQualifiedName: 'agents.me.externalAccounts.retrieve', + httpMethod: 'get', + httpPath: '/agents/me/external-accounts/{externalAccountId}', + }, + { + clientCallName: 'client.agents.me.externalAccounts.list', + fullyQualifiedName: 'agents.me.externalAccounts.list', + httpMethod: 'get', + httpPath: '/agents/me/external-accounts', + }, + { + clientCallName: 'client.agents.me.externalAccounts.delete', + fullyQualifiedName: 'agents.me.externalAccounts.delete', + httpMethod: 'delete', + httpPath: '/agents/me/external-accounts/{externalAccountId}', + }, + { + clientCallName: 'client.agents.me.externalAccounts.add', + fullyQualifiedName: 'agents.me.externalAccounts.add', + httpMethod: 'post', + httpPath: '/agents/me/external-accounts', + }, + { + clientCallName: 'client.agents.me.actions.retrieve', + fullyQualifiedName: 'agents.me.actions.retrieve', + httpMethod: 'get', + httpPath: '/agents/me/actions/{actionId}', + }, + { + clientCallName: 'client.agents.me.actions.list', + fullyQualifiedName: 'agents.me.actions.list', + httpMethod: 'get', + httpPath: '/agents/me/actions', + }, + { + clientCallName: 'client.agents.deviceCodes.getStatus', + fullyQualifiedName: 'agents.deviceCodes.getStatus', + httpMethod: 'get', + httpPath: '/agents/device-codes/{code}/status', + }, + { + clientCallName: 'client.agents.deviceCodes.redeem', + fullyQualifiedName: 'agents.deviceCodes.redeem', + httpMethod: 'post', + httpPath: '/agents/device-codes/{code}/redeem', + }, + { + clientCallName: 'client.agents.deviceCodes.regenerate', + fullyQualifiedName: 'agents.deviceCodes.regenerate', + httpMethod: 'post', + httpPath: '/agents/{agentId}/device-codes', + }, + { + clientCallName: 'client.agents.actions.approve', + fullyQualifiedName: 'agents.actions.approve', + httpMethod: 'post', + httpPath: '/agents/{agentId}/actions/{actionId}/approve', + }, + { + clientCallName: 'client.agents.actions.reject', + fullyQualifiedName: 'agents.actions.reject', + httpMethod: 'post', + httpPath: '/agents/{agentId}/actions/{actionId}/reject', + }, ]; function allowedMethodsForCodeTool(options: McpOptions | undefined): SdkMethod[] | undefined { diff --git a/scripts/detect-breaking-changes b/scripts/detect-breaking-changes index b6ada66..8e36678 100755 --- a/scripts/detect-breaking-changes +++ b/scripts/detect-breaking-changes @@ -35,6 +35,14 @@ TEST_PATHS=( tests/api-resources/auth/credentials.test.ts tests/api-resources/auth/sessions.test.ts tests/api-resources/internal-accounts.test.ts + tests/api-resources/agents/agents.test.ts + tests/api-resources/agents/me/me.test.ts + tests/api-resources/agents/me/transactions.test.ts + tests/api-resources/agents/me/quotes.test.ts + tests/api-resources/agents/me/external-accounts.test.ts + tests/api-resources/agents/me/actions.test.ts + tests/api-resources/agents/device-codes.test.ts + tests/api-resources/agents/actions.test.ts tests/index.test.ts ) diff --git a/src/client.ts b/src/client.ts index d21a0d7..e1fdbb4 100644 --- a/src/client.ts +++ b/src/client.ts @@ -138,6 +138,7 @@ import { Verifications, } from './resources/verifications'; import { + AgentActionWebhookEvent, BulkUploadWebhookEvent, CustomerUpdateWebhookEvent, IncomingPaymentWebhookEvent, @@ -149,6 +150,22 @@ import { VerificationUpdateWebhookEvent, Webhooks, } from './resources/webhooks'; +import { + AgentCreateParams, + AgentCreateResponse, + AgentListApprovalsParams, + AgentListApprovalsResponse, + AgentListApprovalsResponsesDefaultPagination, + AgentListParams, + AgentListResponse, + AgentListResponsesDefaultPagination, + AgentRetrieveResponse, + AgentUpdateParams, + AgentUpdatePolicyParams, + AgentUpdatePolicyResponse, + AgentUpdateResponse, + Agents, +} from './resources/agents/agents'; import { Auth } from './resources/auth/auth'; import { BusinessCustomerFields, @@ -1037,6 +1054,10 @@ export class LightsparkGrid { * Internal account management endpoints for creating and managing internal accounts */ internalAccounts: API.InternalAccounts = new API.InternalAccounts(this); + /** + * Endpoints for creating and managing agents (experimental), called by the partner's backend using platform credentials. Covers the full agent lifecycle: creation, policy configuration, pausing, deletion, the device code installation flow, and approving or rejecting transactions initiated by agents. + */ + agents: API.Agents = new API.Agents(this); } LightsparkGrid.Config = Config; @@ -1060,6 +1081,7 @@ LightsparkGrid.Verifications = Verifications; LightsparkGrid.Discoveries = Discoveries; LightsparkGrid.Auth = Auth; LightsparkGrid.InternalAccounts = InternalAccounts; +LightsparkGrid.Agents = Agents; export declare namespace LightsparkGrid { export type RequestOptions = Opts.RequestOptions; @@ -1188,6 +1210,7 @@ export declare namespace LightsparkGrid { export { Webhooks as Webhooks, + type AgentActionWebhookEvent as AgentActionWebhookEvent, type IncomingPaymentWebhookEvent as IncomingPaymentWebhookEvent, type OutgoingPaymentWebhookEvent as OutgoingPaymentWebhookEvent, type TestWebhookWebhookEvent as TestWebhookWebhookEvent, @@ -1254,6 +1277,23 @@ export declare namespace LightsparkGrid { type InternalAccountExportParams as InternalAccountExportParams, }; + export { + Agents as Agents, + type AgentCreateResponse as AgentCreateResponse, + type AgentRetrieveResponse as AgentRetrieveResponse, + type AgentUpdateResponse as AgentUpdateResponse, + type AgentListResponse as AgentListResponse, + type AgentListApprovalsResponse as AgentListApprovalsResponse, + type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, + type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, + type AgentCreateParams as AgentCreateParams, + type AgentUpdateParams as AgentUpdateParams, + type AgentListParams as AgentListParams, + type AgentListApprovalsParams as AgentListApprovalsParams, + type AgentUpdatePolicyParams as AgentUpdatePolicyParams, + }; + export type AedBeneficiary = API.AedBeneficiary; export type AedExternalAccountCreateInfo = API.AedExternalAccountCreateInfo; export type BdtBeneficiary = API.BdtBeneficiary; diff --git a/src/resources/agents.ts b/src/resources/agents.ts new file mode 100644 index 0000000..0c43db0 --- /dev/null +++ b/src/resources/agents.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './agents/index'; diff --git a/src/resources/agents/actions.ts b/src/resources/agents/actions.ts new file mode 100644 index 0000000..9682735 --- /dev/null +++ b/src/resources/agents/actions.ts @@ -0,0 +1,317 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; +import * as QuotesAPI from '../quotes'; +import * as TransferInAPI from '../transfer-in'; +import { APIPromise } from '../../core/api-promise'; +import { RequestOptions } from '../../internal/request-options'; +import { path } from '../../internal/utils/path'; + +/** + * Endpoints for creating and managing agents (experimental), called by the partner's backend using platform credentials. Covers the full agent lifecycle: creation, policy configuration, pausing, deletion, the device code installation flow, and approving or rejecting transactions initiated by agents. + */ +export class Actions extends APIResource { + /** + * Approve a pending agent action, allowing Grid to proceed with execution. The + * action must have status `PENDING_APPROVAL`. Once approved, Grid executes the + * underlying operation (quote execution or transfer) and the action transitions to + * `APPROVED`. For `EXECUTE_QUOTE` actions, note that the underlying quote may have + * expired between submission and approval — in that case the action will + * transition to `FAILED` instead. This endpoint is called by the platform's + * backend using platform credentials, not by the agent itself. + * + * @example + * ```ts + * const response = await client.agents.actions.approve( + * 'actionId', + * { agentId: 'agentId' }, + * ); + * ``` + */ + approve( + actionID: string, + params: ActionApproveParams, + options?: RequestOptions, + ): APIPromise { + const { agentId } = params; + return this._client.post(path`/agents/${agentId}/actions/${actionID}/approve`, options); + } + + /** + * Reject a pending agent action, preventing execution. The action must have status + * `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the + * underlying operation is not executed. This endpoint is called by the platform's + * backend using platform credentials, not by the agent itself. + * + * @example + * ```ts + * const response = await client.agents.actions.reject( + * 'actionId', + * { agentId: 'agentId' }, + * ); + * ``` + */ + reject( + actionID: string, + params: ActionRejectParams, + options?: RequestOptions, + ): APIPromise { + const { agentId, ...body } = params; + return this._client.post(path`/agents/${agentId}/actions/${actionID}/reject`, { body, ...options }); + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface ActionApproveResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: ActionApproveResponse.TransferDetails; +} + +export namespace ActionApproveResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface ActionRejectResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: ActionRejectResponse.TransferDetails; +} + +export namespace ActionRejectResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +export interface ActionApproveParams { + /** + * System-generated unique agent identifier + */ + agentId: string; +} + +export interface ActionRejectParams { + /** + * Path param: System-generated unique agent identifier + */ + agentId: string; + + /** + * Body param: Optional human-readable reason for the rejection, stored on the + * action and visible to the platform. + */ + reason?: string; +} + +export declare namespace Actions { + export { + type ActionApproveResponse as ActionApproveResponse, + type ActionRejectResponse as ActionRejectResponse, + type ActionApproveParams as ActionApproveParams, + type ActionRejectParams as ActionRejectParams, + }; +} diff --git a/src/resources/agents/agents.ts b/src/resources/agents/agents.ts new file mode 100644 index 0000000..3b88d8a --- /dev/null +++ b/src/resources/agents/agents.ts @@ -0,0 +1,1972 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; +import * as QuotesAPI from '../quotes'; +import * as TransferInAPI from '../transfer-in'; +import * as ActionsAPI from './actions'; +import { + ActionApproveParams, + ActionApproveResponse, + ActionRejectParams, + ActionRejectResponse, + Actions, +} from './actions'; +import * as DeviceCodesAPI from './device-codes'; +import { + DeviceCodeGetStatusResponse, + DeviceCodeRedeemResponse, + DeviceCodeRegenerateResponse, + DeviceCodes, +} from './device-codes'; +import * as TransactionsAPI from './transactions'; +import { Transactions } from './transactions'; +import * as MeAPI from './me/me'; +import { + Me, + MeCreateTransferInParams, + MeCreateTransferInResponse, + MeCreateTransferOutParams, + MeCreateTransferOutResponse, + MeListInternalAccountsParams, + MeRetrieveResponse, +} from './me/me'; +import { APIPromise } from '../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../core/pagination'; +import { buildHeaders } from '../../internal/headers'; +import { RequestOptions } from '../../internal/request-options'; +import { path } from '../../internal/utils/path'; + +/** + * Endpoints for creating and managing agents (experimental), called by the partner's backend using platform credentials. Covers the full agent lifecycle: creation, policy configuration, pausing, deletion, the device code installation flow, and approving or rejecting transactions initiated by agents. + */ +export class Agents extends APIResource { + me: MeAPI.Me = new MeAPI.Me(this._client); + deviceCodes: DeviceCodesAPI.DeviceCodes = new DeviceCodesAPI.DeviceCodes(this._client); + transactions: TransactionsAPI.Transactions = new TransactionsAPI.Transactions(this._client); + actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); + + /** + * Create a new agent with a specified policy. Returns the created agent and a + * device code that must be redeemed by the agent software to complete + * installation. + * + * @example + * ```ts + * const agent = await client.agents.create({ + * customerId: + * 'Customer:019542f5-b3e7-1d02-0000-000000000001', + * name: 'Payroll Automation Agent', + * policy: { + * defaultExecutionMode: 'AUTO', + * permissions: ['VIEW_TRANSACTIONS'], + * spendingLimits: { + * currency: 'USD', + * perTransactionLimit: 50000, + * }, + * }, + * }); + * ``` + */ + create(body: AgentCreateParams, options?: RequestOptions): APIPromise { + return this._client.post('/agents', { body, ...options }); + } + + /** + * Retrieve an agent by its system-generated ID. + * + * @example + * ```ts + * const agent = await client.agents.retrieve('agentId'); + * ``` + */ + retrieve(agentID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/agents/${agentID}`, options); + } + + /** + * Update an agent's name or paused state. + * + * @example + * ```ts + * const agent = await client.agents.update('agentId'); + * ``` + */ + update( + agentID: string, + body: AgentUpdateParams, + options?: RequestOptions, + ): APIPromise { + return this._client.patch(path`/agents/${agentID}`, { body, ...options }); + } + + /** + * Retrieve a paginated list of agents for the authenticated platform. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const agentListResponse of client.agents.list()) { + * // ... + * } + * ``` + */ + list( + query: AgentListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/agents', DefaultPagination, { query, ...options }); + } + + /** + * Permanently delete an agent. Connected agent software will lose access + * immediately. + * + * @example + * ```ts + * await client.agents.delete('agentId'); + * ``` + */ + delete(agentID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/agents/${agentID}`, { + ...options, + headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + }); + } + + /** + * Retrieve a paginated list of agent actions that require platform approval. + * Filter by `agentId` or `customerId` to scope results to a specific agent or + * customer. Approve or reject individual actions via + * `POST /agents/{agentId}/actions/{actionId}/approve` or + * `POST /agents/{agentId}/actions/{actionId}/reject`. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const agentListApprovalsResponse of client.agents.listApprovals()) { + * // ... + * } + * ``` + */ + listApprovals( + query: AgentListApprovalsParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/agents/approvals', DefaultPagination, { + query, + ...options, + }); + } + + /** + * Partially update an agent's policy. Only provided fields will be updated; + * omitted fields retain their current values. Policy changes take effect + * immediately. + * + * @example + * ```ts + * const response = await client.agents.updatePolicy( + * 'agentId', + * ); + * ``` + */ + updatePolicy( + agentID: string, + body: AgentUpdatePolicyParams, + options?: RequestOptions, + ): APIPromise { + return this._client.patch(path`/agents/${agentID}/policy`, { body, ...options }); + } +} + +export type AgentListResponsesDefaultPagination = DefaultPagination; + +export type AgentListApprovalsResponsesDefaultPagination = DefaultPagination; + +/** + * Response returned when an agent is created, including the agent and a device + * code for installation. + */ +export interface AgentCreateResponse { + /** + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. + */ + agent: AgentCreateResponse.Agent; + + deviceCode: AgentCreateResponse.DeviceCode; +} + +export namespace AgentCreateResponse { + /** + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. + */ + export interface Agent { + /** + * System-generated unique identifier for the agent. + */ + id: string; + + /** + * Creation timestamp. + */ + createdAt: string; + + /** + * The ID of the customer this agent operates on behalf of. + */ + customerId: string; + + /** + * Whether the agent has been installed and connected (i.e., its device code has + * been redeemed). + */ + isConnected: boolean; + + /** + * Whether the agent is currently paused. Paused agents cannot initiate any + * actions. + */ + isPaused: boolean; + + /** + * Human-readable name for the agent. + */ + name: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: Agent.Policy; + + /** + * Last update timestamp. + */ + updatedAt: string; + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: Agent.Usage; + } + + export namespace Agent { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + export interface Usage { + /** + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + dailySpend: number; + + /** + * Number of transactions initiated by the agent today. + */ + dailyTransactionCount: number; + + /** + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + monthlySpend: number; + + /** + * The date when daily usage counters will reset. + */ + dailyResetDate?: string; + + /** + * The year-month (YYYY-MM) when monthly usage counters will reset. + */ + monthlyResetMonth?: string; + } + } + + export interface DeviceCode { + /** + * The agent this device code belongs to. + */ + agentId: string; + + /** + * Human-readable device code used to install and connect the agent software. + */ + code: string; + + /** + * Timestamp when this device code expires. + */ + expiresAt: string; + + /** + * Whether this device code has already been redeemed by the agent. + */ + redeemed: boolean; + } +} + +/** + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. + */ +export interface AgentRetrieveResponse { + /** + * System-generated unique identifier for the agent. + */ + id: string; + + /** + * Creation timestamp. + */ + createdAt: string; + + /** + * The ID of the customer this agent operates on behalf of. + */ + customerId: string; + + /** + * Whether the agent has been installed and connected (i.e., its device code has + * been redeemed). + */ + isConnected: boolean; + + /** + * Whether the agent is currently paused. Paused agents cannot initiate any + * actions. + */ + isPaused: boolean; + + /** + * Human-readable name for the agent. + */ + name: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: AgentRetrieveResponse.Policy; + + /** + * Last update timestamp. + */ + updatedAt: string; + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: AgentRetrieveResponse.Usage; +} + +export namespace AgentRetrieveResponse { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + export interface Usage { + /** + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + dailySpend: number; + + /** + * Number of transactions initiated by the agent today. + */ + dailyTransactionCount: number; + + /** + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + monthlySpend: number; + + /** + * The date when daily usage counters will reset. + */ + dailyResetDate?: string; + + /** + * The year-month (YYYY-MM) when monthly usage counters will reset. + */ + monthlyResetMonth?: string; + } +} + +/** + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. + */ +export interface AgentUpdateResponse { + /** + * System-generated unique identifier for the agent. + */ + id: string; + + /** + * Creation timestamp. + */ + createdAt: string; + + /** + * The ID of the customer this agent operates on behalf of. + */ + customerId: string; + + /** + * Whether the agent has been installed and connected (i.e., its device code has + * been redeemed). + */ + isConnected: boolean; + + /** + * Whether the agent is currently paused. Paused agents cannot initiate any + * actions. + */ + isPaused: boolean; + + /** + * Human-readable name for the agent. + */ + name: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: AgentUpdateResponse.Policy; + + /** + * Last update timestamp. + */ + updatedAt: string; + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: AgentUpdateResponse.Usage; +} + +export namespace AgentUpdateResponse { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + export interface Usage { + /** + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + dailySpend: number; + + /** + * Number of transactions initiated by the agent today. + */ + dailyTransactionCount: number; + + /** + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + monthlySpend: number; + + /** + * The date when daily usage counters will reset. + */ + dailyResetDate?: string; + + /** + * The year-month (YYYY-MM) when monthly usage counters will reset. + */ + monthlyResetMonth?: string; + } +} + +/** + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. + */ +export interface AgentListResponse { + /** + * System-generated unique identifier for the agent. + */ + id: string; + + /** + * Creation timestamp. + */ + createdAt: string; + + /** + * The ID of the customer this agent operates on behalf of. + */ + customerId: string; + + /** + * Whether the agent has been installed and connected (i.e., its device code has + * been redeemed). + */ + isConnected: boolean; + + /** + * Whether the agent is currently paused. Paused agents cannot initiate any + * actions. + */ + isPaused: boolean; + + /** + * Human-readable name for the agent. + */ + name: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: AgentListResponse.Policy; + + /** + * Last update timestamp. + */ + updatedAt: string; + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: AgentListResponse.Usage; +} + +export namespace AgentListResponse { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + export interface Usage { + /** + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + dailySpend: number; + + /** + * Number of transactions initiated by the agent today. + */ + dailyTransactionCount: number; + + /** + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + monthlySpend: number; + + /** + * The date when daily usage counters will reset. + */ + dailyResetDate?: string; + + /** + * The year-month (YYYY-MM) when monthly usage counters will reset. + */ + monthlyResetMonth?: string; + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface AgentListApprovalsResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: AgentListApprovalsResponse.TransferDetails; +} + +export namespace AgentListApprovalsResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +/** + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. + */ +export interface AgentUpdatePolicyResponse { + /** + * System-generated unique identifier for the agent. + */ + id: string; + + /** + * Creation timestamp. + */ + createdAt: string; + + /** + * The ID of the customer this agent operates on behalf of. + */ + customerId: string; + + /** + * Whether the agent has been installed and connected (i.e., its device code has + * been redeemed). + */ + isConnected: boolean; + + /** + * Whether the agent is currently paused. Paused agents cannot initiate any + * actions. + */ + isPaused: boolean; + + /** + * Human-readable name for the agent. + */ + name: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: AgentUpdatePolicyResponse.Policy; + + /** + * Last update timestamp. + */ + updatedAt: string; + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: AgentUpdatePolicyResponse.Usage; +} + +export namespace AgentUpdatePolicyResponse { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + export interface Usage { + /** + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + dailySpend: number; + + /** + * Number of transactions initiated by the agent today. + */ + dailyTransactionCount: number; + + /** + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + monthlySpend: number; + + /** + * The date when daily usage counters will reset. + */ + dailyResetDate?: string; + + /** + * The year-month (YYYY-MM) when monthly usage counters will reset. + */ + monthlyResetMonth?: string; + } +} + +export interface AgentCreateParams { + /** + * The ID of the customer this agent will operate on behalf of. + */ + customerId: string; + + /** + * Human-readable name to identify the agent. + */ + name: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: AgentCreateParams.Policy; +} + +export namespace AgentCreateParams { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } +} + +export interface AgentUpdateParams { + /** + * Set to true to pause the agent or false to resume it. + */ + isPaused?: boolean; + + /** + * Updated name for the agent. + */ + name?: string; +} + +export interface AgentListParams extends DefaultPaginationParams { + /** + * Filter agents created after this timestamp (inclusive) + */ + createdAfter?: string; + + /** + * Filter agents created before this timestamp (inclusive) + */ + createdBefore?: string; + + /** + * Filter by customer ID + */ + customerId?: string; + + /** + * Filter by connection status (whether the device code has been redeemed) + */ + isConnected?: boolean; + + /** + * Filter by paused status + */ + isPaused?: boolean; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; + + /** + * Filter agents updated after this timestamp (inclusive) + */ + updatedAfter?: string; + + /** + * Filter agents updated before this timestamp (inclusive) + */ + updatedBefore?: string; +} + +export interface AgentListApprovalsParams extends DefaultPaginationParams { + /** + * Filter by agent ID + */ + agentId?: string; + + /** + * Filter by customer ID + */ + customerId?: string; + + /** + * Filter by end date (inclusive) in ISO 8601 format + */ + endDate?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; + + /** + * Order to sort results in + */ + sortOrder?: 'asc' | 'desc'; + + /** + * Filter by start date (inclusive) in ISO 8601 format + */ + startDate?: string; +} + +export interface AgentUpdatePolicyParams { + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: AgentUpdatePolicyParams.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: AgentUpdatePolicyParams.ApprovalThresholds; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Updated list of permissions. Replaces the entire permissions list when provided. + */ + permissions?: Array< + 'VIEW_TRANSACTIONS' | 'CREATE_TRANSFERS' | 'CREATE_QUOTES' | 'EXECUTE_QUOTES' | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Partial update to spending limits. Only provided fields will be updated; omitted + * fields retain their current values. + */ + spendingLimits?: AgentUpdatePolicyParams.SpendingLimits; +} + +export namespace AgentUpdatePolicyParams { + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + + /** + * Partial update to spending limits. Only provided fields will be updated; omitted + * fields retain their current values. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. Updating this + * recasts all existing limits into the new currency denomination. + */ + currency?: string; + + /** + * Maximum daily spend. Set to null to remove the daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum monthly spend. Set to null to remove the monthly limit. + */ + monthlyLimit?: number | null; + + /** + * Maximum amount per transaction. + */ + perTransactionLimit?: number; + } +} + +Agents.Me = Me; +Agents.DeviceCodes = DeviceCodes; +Agents.Transactions = Transactions; +Agents.Actions = Actions; + +export declare namespace Agents { + export { + type AgentCreateResponse as AgentCreateResponse, + type AgentRetrieveResponse as AgentRetrieveResponse, + type AgentUpdateResponse as AgentUpdateResponse, + type AgentListResponse as AgentListResponse, + type AgentListApprovalsResponse as AgentListApprovalsResponse, + type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, + type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, + type AgentCreateParams as AgentCreateParams, + type AgentUpdateParams as AgentUpdateParams, + type AgentListParams as AgentListParams, + type AgentListApprovalsParams as AgentListApprovalsParams, + type AgentUpdatePolicyParams as AgentUpdatePolicyParams, + }; + + export { + Me as Me, + type MeRetrieveResponse as MeRetrieveResponse, + type MeCreateTransferInResponse as MeCreateTransferInResponse, + type MeCreateTransferOutResponse as MeCreateTransferOutResponse, + type MeCreateTransferInParams as MeCreateTransferInParams, + type MeCreateTransferOutParams as MeCreateTransferOutParams, + type MeListInternalAccountsParams as MeListInternalAccountsParams, + }; + + export { + DeviceCodes as DeviceCodes, + type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, + type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, + type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, + }; + + export { Transactions as Transactions }; + + export { + Actions as Actions, + type ActionApproveResponse as ActionApproveResponse, + type ActionRejectResponse as ActionRejectResponse, + type ActionApproveParams as ActionApproveParams, + type ActionRejectParams as ActionRejectParams, + }; +} diff --git a/src/resources/agents/device-codes.ts b/src/resources/agents/device-codes.ts new file mode 100644 index 0000000..8b65cae --- /dev/null +++ b/src/resources/agents/device-codes.ts @@ -0,0 +1,279 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; +import { APIPromise } from '../../core/api-promise'; +import { RequestOptions } from '../../internal/request-options'; +import { path } from '../../internal/utils/path'; + +/** + * Endpoints for creating and managing agents (experimental), called by the partner's backend using platform credentials. Covers the full agent lifecycle: creation, policy configuration, pausing, deletion, the device code installation flow, and approving or rejecting transactions initiated by agents. + */ +export class DeviceCodes extends APIResource { + /** + * Check whether a device code has been redeemed. Use this to poll for agent + * installation completion after creating an agent. + * + * @example + * ```ts + * const response = await client.agents.deviceCodes.getStatus( + * 'code', + * ); + * ``` + */ + getStatus(code: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/agents/device-codes/${code}/status`, options); + } + + /** + * Redeem a device code to obtain agent credentials. This endpoint is called by the + * agent software during installation. On success, returns a Bearer access token + * that the agent uses for all subsequent API calls. The token is returned only + * once and must be stored securely. This endpoint does not require platform + * authentication — the device code itself serves as proof of authorization. + * + * @example + * ```ts + * const response = await client.agents.deviceCodes.redeem( + * 'code', + * ); + * ``` + */ + redeem(code: string, options?: RequestOptions): APIPromise { + return this._client.post(path`/agents/device-codes/${code}/redeem`, options); + } + + /** + * Generate a new device code for an existing agent. Use this when the original + * device code has expired before being redeemed, or when the agent software needs + * to be reinstalled. Any previously issued unredeemed device codes for this agent + * are invalidated. + * + * @example + * ```ts + * const response = await client.agents.deviceCodes.regenerate( + * 'agentId', + * ); + * ``` + */ + regenerate(agentID: string, options?: RequestOptions): APIPromise { + return this._client.post(path`/agents/${agentID}/device-codes`, options); + } +} + +export interface DeviceCodeGetStatusResponse { + /** + * The device code. + */ + code: string; + + /** + * Whether this device code has been redeemed. + */ + redeemed: boolean; +} + +export interface DeviceCodeRedeemResponse { + /** + * Bearer token used to authenticate all subsequent API calls as this agent. Pass + * as `Authorization: Bearer `. This token is returned only once and + * must be stored securely — it cannot be retrieved again. + */ + accessToken: string; + + /** + * The agent's system-generated ID. + */ + agentId: string; + + /** + * The agent's name. + */ + agentName: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: DeviceCodeRedeemResponse.Policy; +} + +export namespace DeviceCodeRedeemResponse { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } +} + +export interface DeviceCodeRegenerateResponse { + /** + * The agent this device code belongs to. + */ + agentId: string; + + /** + * Human-readable device code used to install and connect the agent software. + */ + code: string; + + /** + * Timestamp when this device code expires. + */ + expiresAt: string; + + /** + * Whether this device code has already been redeemed by the agent. + */ + redeemed: boolean; +} + +export declare namespace DeviceCodes { + export { + type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, + type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, + type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, + }; +} diff --git a/src/resources/agents/index.ts b/src/resources/agents/index.ts new file mode 100644 index 0000000..1b99113 --- /dev/null +++ b/src/resources/agents/index.ts @@ -0,0 +1,41 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Actions, + type ActionApproveResponse, + type ActionRejectResponse, + type ActionApproveParams, + type ActionRejectParams, +} from './actions'; +export { + Agents, + type AgentCreateResponse, + type AgentRetrieveResponse, + type AgentUpdateResponse, + type AgentListResponse, + type AgentListApprovalsResponse, + type AgentUpdatePolicyResponse, + type AgentCreateParams, + type AgentUpdateParams, + type AgentListParams, + type AgentListApprovalsParams, + type AgentUpdatePolicyParams, + type AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination, +} from './agents'; +export { + DeviceCodes, + type DeviceCodeGetStatusResponse, + type DeviceCodeRedeemResponse, + type DeviceCodeRegenerateResponse, +} from './device-codes'; +export { + Me, + type MeRetrieveResponse, + type MeCreateTransferInResponse, + type MeCreateTransferOutResponse, + type MeCreateTransferInParams, + type MeCreateTransferOutParams, + type MeListInternalAccountsParams, +} from './me/index'; +export { Transactions } from './transactions'; diff --git a/src/resources/agents/me.ts b/src/resources/agents/me.ts new file mode 100644 index 0000000..54b12df --- /dev/null +++ b/src/resources/agents/me.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './me/index'; diff --git a/src/resources/agents/me/actions.ts b/src/resources/agents/me/actions.ts new file mode 100644 index 0000000..5665c9a --- /dev/null +++ b/src/resources/agents/me/actions.ts @@ -0,0 +1,302 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as QuotesAPI from '../../quotes'; +import * as TransferInAPI from '../../transfer-in'; +import { APIPromise } from '../../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +/** + * Endpoints called by the agent itself using its own credentials (obtained via device code redemption). Scoped to the agent's associated customer — all requests automatically operate on behalf of that customer and are subject to the agent's policy. When an action requires approval, the resulting transaction enters a pending state and must be approved by the platform via `POST /transactions/{transactionId}/approve`. + */ +export class Actions extends APIResource { + /** + * Retrieve a specific action submitted by the authenticated agent. Poll this + * endpoint after submitting an action that requires approval to check whether it + * has been approved, rejected, or has failed. + * + * @example + * ```ts + * const action = await client.agents.me.actions.retrieve( + * 'actionId', + * ); + * ``` + */ + retrieve(actionID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/agents/me/actions/${actionID}`, options); + } + + /** + * Retrieve a paginated list of actions submitted by the authenticated agent. Use + * this to poll for approval decisions after submitting an action that requires + * approval. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const actionListResponse of client.agents.me.actions.list()) { + * // ... + * } + * ``` + */ + list( + query: ActionListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/agents/me/actions', DefaultPagination, { + query, + ...options, + }); + } +} + +export type ActionListResponsesDefaultPagination = DefaultPagination; + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface ActionRetrieveResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: ActionRetrieveResponse.TransferDetails; +} + +export namespace ActionRetrieveResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface ActionListResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: ActionListResponse.TransferDetails; +} + +export namespace ActionListResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +export interface ActionListParams extends DefaultPaginationParams { + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; + + /** + * Filter by action status + */ + status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; +} + +export declare namespace Actions { + export { + type ActionRetrieveResponse as ActionRetrieveResponse, + type ActionListResponse as ActionListResponse, + type ActionListResponsesDefaultPagination as ActionListResponsesDefaultPagination, + type ActionListParams as ActionListParams, + }; +} diff --git a/src/resources/agents/me/external-accounts.ts b/src/resources/agents/me/external-accounts.ts new file mode 100644 index 0000000..52ba746 --- /dev/null +++ b/src/resources/agents/me/external-accounts.ts @@ -0,0 +1,217 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as Shared from '../../shared'; +import * as ExternalAccountsAPI from '../../customers/external-accounts'; +import { ExternalAccountsDefaultPagination } from '../../customers/external-accounts'; +import { APIPromise } from '../../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; +import { buildHeaders } from '../../../internal/headers'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +/** + * Endpoints called by the agent itself using its own credentials (obtained via device code redemption). Scoped to the agent's associated customer — all requests automatically operate on behalf of that customer and are subject to the agent's policy. When an action requires approval, the resulting transaction enters a pending state and must be approved by the platform via `POST /transactions/{transactionId}/approve`. + */ +export class ExternalAccounts extends APIResource { + /** + * Retrieve an external account belonging to the authenticated agent's customer. + * Returns 404 if the account exists but belongs to a different customer. Requires + * the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. + * + * @example + * ```ts + * const externalAccount = + * await client.agents.me.externalAccounts.retrieve( + * 'externalAccountId', + * ); + * ``` + */ + retrieve( + externalAccountID: string, + options?: RequestOptions, + ): APIPromise { + return this._client.get(path`/agents/me/external-accounts/${externalAccountID}`, options); + } + + /** + * Retrieve a paginated list of external accounts belonging to the authenticated + * agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the + * agent's policy. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const externalAccount of client.agents.me.externalAccounts.list()) { + * // ... + * } + * ``` + */ + list( + query: ExternalAccountListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + '/agents/me/external-accounts', + DefaultPagination, + { query, ...options }, + ); + } + + /** + * Delete an external account belonging to the authenticated agent's customer. + * Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. + * + * @example + * ```ts + * await client.agents.me.externalAccounts.delete( + * 'externalAccountId', + * ); + * ``` + */ + delete(externalAccountID: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/agents/me/external-accounts/${externalAccountID}`, { + ...options, + headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + }); + } + + /** + * Register a new external bank account or wallet for the authenticated agent's + * customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's + * policy. The `customerId` field is optional and will be inferred from the agent's + * associated customer if omitted. + * + * @example + * ```ts + * const externalAccount = + * await client.agents.me.externalAccounts.add({ + * accountInfo: { + * accountType: 'USD_ACCOUNT', + * accountNumber: '12345678901', + * routingNumber: '123456789', + * beneficiary: { + * beneficiaryType: 'INDIVIDUAL', + * fullName: 'John Doe', + * birthDate: '1990-01-15', + * nationality: 'US', + * address: { + * line1: '123 Main Street', + * city: 'San Francisco', + * state: 'CA', + * postalCode: '94105', + * country: 'US', + * }, + * }, + * }, + * currency: 'USD', + * }); + * ``` + */ + add( + body: ExternalAccountAddParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post('/agents/me/external-accounts', { body, ...options }); + } +} + +export interface ExternalAccountListParams extends DefaultPaginationParams { + /** + * Filter by currency code + */ + currency?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; +} + +export interface ExternalAccountAddParams { + /** + * Lightning payment destination. Exactly one of `invoice`, `bolt12`, or + * `lightningAddress` must be provided. + */ + accountInfo: + | Shared.AedExternalAccountCreateInfo + | Shared.BrlExternalAccountCreateInfo + | Shared.BwpExternalAccountCreateInfo + | Shared.CadExternalAccountCreateInfo + | Shared.DkkExternalAccountCreateInfo + | Shared.EurExternalAccountCreateInfo + | Shared.GbpExternalAccountCreateInfo + | Shared.HkdExternalAccountCreateInfo + | Shared.IdrExternalAccountCreateInfo + | Shared.InrExternalAccountCreateInfo + | Shared.KesExternalAccountCreateInfo + | Shared.MwkExternalAccountCreateInfo + | Shared.MxnExternalAccountCreateInfo + | Shared.MyrExternalAccountCreateInfo + | Shared.NgnExternalAccountCreateInfo + | Shared.PhpExternalAccountCreateInfo + | Shared.RwfExternalAccountCreateInfo + | Shared.SgdExternalAccountCreateInfo + | Shared.ThbExternalAccountCreateInfo + | Shared.TzsExternalAccountCreateInfo + | Shared.UgxExternalAccountCreateInfo + | Shared.UsdExternalAccountCreateInfo + | Shared.VndExternalAccountCreateInfo + | Shared.XafExternalAccountCreateInfo + | Shared.XofExternalAccountCreateInfo + | Shared.ZarExternalAccountCreateInfo + | Shared.ZmwExternalAccountCreateInfo + | Shared.BdtExternalAccountCreateInfo + | Shared.CopExternalAccountCreateInfo + | Shared.EgpExternalAccountCreateInfo + | Shared.GhsExternalAccountCreateInfo + | Shared.GtqExternalAccountCreateInfo + | Shared.HtgExternalAccountCreateInfo + | Shared.JmdExternalAccountCreateInfo + | Shared.PkrExternalAccountCreateInfo + | ExternalAccountsAPI.SparkWalletInfo + | ExternalAccountsAPI.LightningWalletInfo + | ExternalAccountsAPI.SolanaWalletInfo + | ExternalAccountsAPI.TronWalletInfo + | ExternalAccountsAPI.PolygonWalletInfo + | ExternalAccountsAPI.BaseWalletInfo + | Shared.EthereumWalletExternalAccountInfo; + + /** + * The ISO 4217 currency code + */ + currency: string; + + /** + * The ID of the customer for whom to create the external account. If not provided, + * the external account will be created on behalf of the platform. + */ + customerId?: string; + + /** + * Whether to set the external account as the default UMA deposit account. When set + * to true, incoming payments to this customer's UMA address will be automatically + * deposited into this external account. False if not provided. Note that only one + * external account can be set as the default UMA deposit account for a customer, + * so if there is already a default UMA deposit account, this will override the + * existing default UMA deposit account. If there is no default UMA deposit + * account, incoming UMA payments will be deposited into the primary internal + * account for the customer. + */ + defaultUmaDepositAccount?: boolean; + + /** + * Your platform's identifier for the account in your system. This can be used to + * reference the account by your own identifier. + */ + platformAccountId?: string; +} + +export declare namespace ExternalAccounts { + export { + type ExternalAccountListParams as ExternalAccountListParams, + type ExternalAccountAddParams as ExternalAccountAddParams, + }; +} + +export { type ExternalAccountsDefaultPagination }; diff --git a/src/resources/agents/me/index.ts b/src/resources/agents/me/index.ts new file mode 100644 index 0000000..3767ec8 --- /dev/null +++ b/src/resources/agents/me/index.ts @@ -0,0 +1,25 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Actions, + type ActionRetrieveResponse, + type ActionListResponse, + type ActionListParams, + type ActionListResponsesDefaultPagination, +} from './actions'; +export { + ExternalAccounts, + type ExternalAccountListParams, + type ExternalAccountAddParams, +} from './external-accounts'; +export { + Me, + type MeRetrieveResponse, + type MeCreateTransferInResponse, + type MeCreateTransferOutResponse, + type MeCreateTransferInParams, + type MeCreateTransferOutParams, + type MeListInternalAccountsParams, +} from './me'; +export { Quotes, type QuoteExecuteResponse, type QuoteCreateParams, type QuoteExecuteParams } from './quotes'; +export { Transactions, type TransactionListParams } from './transactions'; diff --git a/src/resources/agents/me/me.ts b/src/resources/agents/me/me.ts new file mode 100644 index 0000000..8ec828d --- /dev/null +++ b/src/resources/agents/me/me.ts @@ -0,0 +1,728 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as QuotesAPI from '../../quotes'; +import * as TransferInAPI from '../../transfer-in'; +import * as InternalAccountsAPI from '../../sandbox/internal-accounts'; +import { InternalAccountsDefaultPagination } from '../../sandbox/internal-accounts'; +import * as ActionsAPI from './actions'; +import { + ActionListParams, + ActionListResponse, + ActionListResponsesDefaultPagination, + ActionRetrieveResponse, + Actions, +} from './actions'; +import * as ExternalAccountsAPI from './external-accounts'; +import { ExternalAccountAddParams, ExternalAccountListParams, ExternalAccounts } from './external-accounts'; +import * as MeQuotesAPI from './quotes'; +import { QuoteCreateParams, QuoteExecuteParams, QuoteExecuteResponse, Quotes } from './quotes'; +import * as TransactionsAPI from './transactions'; +import { TransactionListParams, Transactions } from './transactions'; +import { APIPromise } from '../../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; +import { buildHeaders } from '../../../internal/headers'; +import { RequestOptions } from '../../../internal/request-options'; + +/** + * Endpoints called by the agent itself using its own credentials (obtained via device code redemption). Scoped to the agent's associated customer — all requests automatically operate on behalf of that customer and are subject to the agent's policy. When an action requires approval, the resulting transaction enters a pending state and must be approved by the platform via `POST /transactions/{transactionId}/approve`. + */ +export class Me extends APIResource { + transactions: TransactionsAPI.Transactions = new TransactionsAPI.Transactions(this._client); + quotes: MeQuotesAPI.Quotes = new MeQuotesAPI.Quotes(this._client); + externalAccounts: ExternalAccountsAPI.ExternalAccounts = new ExternalAccountsAPI.ExternalAccounts( + this._client, + ); + actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); + + /** + * Retrieve the authenticated agent's own profile, policy, and current usage. This + * endpoint is called by the agent software itself using its own credentials + * (obtained via device code redemption) rather than platform credentials. + * + * @example + * ```ts + * const me = await client.agents.me.retrieve(); + * ``` + */ + retrieve(options?: RequestOptions): APIPromise { + return this._client.get('/agents/me', options); + } + + /** + * Transfer funds from an external account to an internal account for the + * authenticated agent's customer. Accounts must belong to the agent's customer. + * Requires the CREATE_TRANSFERS permission in the agent's policy. If the agent's + * policy requires approval for this amount, the transaction will be created in a + * pending state and must be approved by the platform via + * `POST /agents/{agentId}/transactions/{transactionId}/approve`. This endpoint + * should only be used for external account sources with pull functionality (e.g. + * ACH Pull). Otherwise, use the payment instructions on the internal account to + * deposit funds. + * + * @example + * ```ts + * const response = await client.agents.me.createTransferIn({ + * destination: { + * accountId: + * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + * }, + * source: { + * accountId: + * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', + * }, + * amount: 12550, + * }); + * ``` + */ + createTransferIn( + params: MeCreateTransferInParams, + options?: RequestOptions, + ): APIPromise { + const { 'Idempotency-Key': idempotencyKey, ...body } = params; + return this._client.post('/agents/me/transfer-in', { + body, + ...options, + headers: buildHeaders([ + { ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined) }, + options?.headers, + ]), + }); + } + + /** + * Transfer funds from an internal account to an external account for the + * authenticated agent's customer. Accounts must belong to the agent's customer. + * Requires the CREATE_TRANSFERS permission in the agent's policy. If the agent's + * policy requires approval for this amount, the transaction will be created in a + * pending state and must be approved by the platform via + * `POST /agents/{agentId}/transactions/{transactionId}/approve`. + * + * @example + * ```ts + * const response = await client.agents.me.createTransferOut({ + * destination: { + * accountId: + * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', + * }, + * source: { + * accountId: + * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + * }, + * amount: 12550, + * }); + * ``` + */ + createTransferOut( + params: MeCreateTransferOutParams, + options?: RequestOptions, + ): APIPromise { + const { 'Idempotency-Key': idempotencyKey, ...body } = params; + return this._client.post('/agents/me/transfer-out', { + body, + ...options, + headers: buildHeaders([ + { ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined) }, + options?.headers, + ]), + }); + } + + /** + * Retrieve the internal accounts belonging to the customer this agent operates on + * behalf of. Use this to discover available source accounts for transfers and + * quotes, and to verify which accounts are accessible under the agent's + * `accountRestrictions` policy. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const internalAccount of client.agents.me.listInternalAccounts()) { + * // ... + * } + * ``` + */ + listInternalAccounts( + query: MeListInternalAccountsParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + '/agents/me/internal-accounts', + DefaultPagination, + { query, ...options }, + ); + } +} + +/** + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. + */ +export interface MeRetrieveResponse { + /** + * System-generated unique identifier for the agent. + */ + id: string; + + /** + * Creation timestamp. + */ + createdAt: string; + + /** + * The ID of the customer this agent operates on behalf of. + */ + customerId: string; + + /** + * Whether the agent has been installed and connected (i.e., its device code has + * been redeemed). + */ + isConnected: boolean; + + /** + * Whether the agent is currently paused. Paused agents cannot initiate any + * actions. + */ + isPaused: boolean; + + /** + * Human-readable name for the agent. + */ + name: string; + + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + policy: MeRetrieveResponse.Policy; + + /** + * Last update timestamp. + */ + updatedAt: string; + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: MeRetrieveResponse.Usage; +} + +export namespace MeRetrieveResponse { + /** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ + export interface Policy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + | 'VIEW_TRANSACTIONS' + | 'CREATE_TRANSFERS' + | 'CREATE_QUOTES' + | 'EXECUTE_QUOTES' + | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: Policy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: Policy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: Policy.ApprovalThresholds; + } + + export namespace Policy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } + } + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + export interface Usage { + /** + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + dailySpend: number; + + /** + * Number of transactions initiated by the agent today. + */ + dailyTransactionCount: number; + + /** + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + monthlySpend: number; + + /** + * The date when daily usage counters will reset. + */ + dailyResetDate?: string; + + /** + * The year-month (YYYY-MM) when monthly usage counters will reset. + */ + monthlyResetMonth?: string; + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface MeCreateTransferInResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: MeCreateTransferInResponse.TransferDetails; +} + +export namespace MeCreateTransferInResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface MeCreateTransferOutResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: MeCreateTransferOutResponse.TransferDetails; +} + +export namespace MeCreateTransferOutResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +export interface MeCreateTransferInParams { + /** + * Body param: Destination internal account details + */ + destination: TransferInAPI.InternalAccountReference; + + /** + * Body param: Source external account details + */ + source: TransferInAPI.ExternalAccountReference; + + /** + * Body param: Amount in the smallest unit of the currency (e.g., cents for + * USD/EUR, satoshis for BTC) + */ + amount?: number; + + /** + * Header param: A unique identifier for the request. If the same key is sent + * multiple times, the server will return the same response as the first request. + */ + 'Idempotency-Key'?: string; +} + +export interface MeCreateTransferOutParams { + /** + * Body param: Destination external account details + */ + destination: TransferInAPI.ExternalAccountReference; + + /** + * Body param: Source internal account details + */ + source: TransferInAPI.InternalAccountReference; + + /** + * Body param: Amount in the smallest unit of the currency (e.g., cents for + * USD/EUR, satoshis for BTC) + */ + amount?: number; + + /** + * Header param: A unique identifier for the request. If the same key is sent + * multiple times, the server will return the same response as the first request. + */ + 'Idempotency-Key'?: string; +} + +export interface MeListInternalAccountsParams extends DefaultPaginationParams { + /** + * Filter by currency code + */ + currency?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; + + /** + * Filter by internal account type. Use `EMBEDDED_WALLET` to find the + * self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / + * `INTERNAL_CRYPTO` for platform-managed holding accounts. + */ + type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; +} + +Me.Transactions = Transactions; +Me.Quotes = Quotes; +Me.ExternalAccounts = ExternalAccounts; +Me.Actions = Actions; + +export declare namespace Me { + export { + type MeRetrieveResponse as MeRetrieveResponse, + type MeCreateTransferInResponse as MeCreateTransferInResponse, + type MeCreateTransferOutResponse as MeCreateTransferOutResponse, + type MeCreateTransferInParams as MeCreateTransferInParams, + type MeCreateTransferOutParams as MeCreateTransferOutParams, + type MeListInternalAccountsParams as MeListInternalAccountsParams, + }; + + export { Transactions as Transactions, type TransactionListParams as TransactionListParams }; + + export { + Quotes as Quotes, + type QuoteExecuteResponse as QuoteExecuteResponse, + type QuoteCreateParams as QuoteCreateParams, + type QuoteExecuteParams as QuoteExecuteParams, + }; + + export { + ExternalAccounts as ExternalAccounts, + type ExternalAccountListParams as ExternalAccountListParams, + type ExternalAccountAddParams as ExternalAccountAddParams, + }; + + export { + Actions as Actions, + type ActionRetrieveResponse as ActionRetrieveResponse, + type ActionListResponse as ActionListResponse, + type ActionListResponsesDefaultPagination as ActionListResponsesDefaultPagination, + type ActionListParams as ActionListParams, + }; +} + +export { type InternalAccountsDefaultPagination }; diff --git a/src/resources/agents/me/quotes.ts b/src/resources/agents/me/quotes.ts new file mode 100644 index 0000000..64d8cf3 --- /dev/null +++ b/src/resources/agents/me/quotes.ts @@ -0,0 +1,331 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as QuotesAPI from '../../quotes'; +import * as TransferInAPI from '../../transfer-in'; +import { APIPromise } from '../../../core/api-promise'; +import { buildHeaders } from '../../../internal/headers'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +/** + * Endpoints called by the agent itself using its own credentials (obtained via device code redemption). Scoped to the agent's associated customer — all requests automatically operate on behalf of that customer and are subject to the agent's policy. When an action requires approval, the resulting transaction enters a pending state and must be approved by the platform via `POST /transactions/{transactionId}/approve`. + */ +export class Quotes extends APIResource { + /** + * Generate a quote for a cross-currency transfer on behalf of the authenticated + * agent's customer. Accounts referenced in the request must belong to the agent's + * customer. Requires the CREATE_QUOTES permission in the agent's policy. If the + * agent's defaultExecutionMode is APPROVAL_REQUIRED, or the quote amount exceeds + * the agent's approvalThresholds, the resulting transaction will require explicit + * approval before funds move. + * + * @example + * ```ts + * const quote = await client.agents.me.quotes.create({ + * destination: { + * accountId: + * 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + * destinationType: 'ACCOUNT', + * }, + * lockedCurrencyAmount: 1000, + * lockedCurrencySide: 'SENDING', + * source: { + * accountId: + * 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', + * sourceType: 'ACCOUNT', + * }, + * }); + * ``` + */ + create(params: QuoteCreateParams, options?: RequestOptions): APIPromise { + const { 'Idempotency-Key': idempotencyKey, ...body } = params; + return this._client.post('/agents/me/quotes', { + body, + ...options, + headers: buildHeaders([ + { ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined) }, + options?.headers, + ]), + }); + } + + /** + * Retrieve a quote created by the authenticated agent. Returns 404 if the quote + * exists but was not created by this agent. + * + * @example + * ```ts + * const quote = await client.agents.me.quotes.retrieve( + * 'quoteId', + * ); + * ``` + */ + retrieve(quoteID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/agents/me/quotes/${quoteID}`, options); + } + + /** + * Execute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES + * permission in the agent's policy. If the agent's policy requires approval for + * this amount (based on execution mode or approval thresholds), the transaction + * will be created in a pending state and must be approved by the platform via + * `POST /agents/{agentId}/transactions/{transactionId}/approve`. Once executed, + * the quote cannot be cancelled. + * + * @example + * ```ts + * const response = await client.agents.me.quotes.execute( + * 'Quote:019542f5-b3e7-1d02-0000-000000000001', + * ); + * ``` + */ + execute( + quoteID: string, + params: QuoteExecuteParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + const { 'Grid-Wallet-Signature': gridWalletSignature, 'Idempotency-Key': idempotencyKey } = params ?? {}; + return this._client.post(path`/agents/me/quotes/${quoteID}/execute`, { + ...options, + headers: buildHeaders([ + { + ...(gridWalletSignature != null ? { 'Grid-Wallet-Signature': gridWalletSignature } : undefined), + ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined), + }, + options?.headers, + ]), + }); + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface QuoteExecuteResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: QuoteExecuteResponse.TransferDetails; +} + +export namespace QuoteExecuteResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +export interface QuoteCreateParams { + /** + * Body param: Destination account details + */ + destination: QuotesAPI.QuoteDestinationOneOf; + + /** + * Body param: The amount to send/receive in the smallest unit of the locked + * currency (eg. cents). See `lockedCurrencySide` for more information. + */ + lockedCurrencyAmount: number; + + /** + * Body param: The side of the quote which should be locked and specified in the + * `lockedCurrencyAmount`. For example, if I want to send exactly $5 MXN from my + * wallet, I would set this to "sending", and the `lockedCurrencyAmount` to 500 (in + * cents). If I want the receiver to receive exactly $10 USD, I would set this to + * "receiving" and the `lockedCurrencyAmount` to 10000 (in cents). + */ + lockedCurrencySide: 'SENDING' | 'RECEIVING'; + + /** + * Body param: Source account details + */ + source: QuotesAPI.QuoteSourceOneOf; + + /** + * Body param: Optional description/memo for the transfer + */ + description?: string; + + /** + * Body param: Whether to immediately execute the quote after creation. If true, + * the quote will be executed and the transaction will be created at the current + * exchange rate. It should only be used if you don't want to lock and view rate + * details before executing the quote. If you are executing a pre-existing quote, + * use the `/quotes/{quoteId}/execute` endpoint instead. This is false by default. + * This can only be used for quotes with a `source` which is either an internal + * account, or has direct pull functionality (e.g. ACH pull with an external + * account). Not supported when the `source` is an internal account of type + * `EMBEDDED_WALLET`: those transfers require a `Grid-Wallet-Signature` over the + * `payloadToSign` returned in the quote response, which is not available in a + * combined create-and-execute call. Create the quote first with + * `immediatelyExecute: false` and then call `POST /quotes/{quoteId}/execute` with + * the signature header. + */ + immediatelyExecute?: boolean; + + /** + * Body param: Lookup ID from a previous receiver lookup request. If provided, this + * can make the quote creation more efficient by reusing cached lookup data. NOTE: + * This is required for UMA destinations due to counterparty institution + * requirements. See `senderCustomerInfo` for more information. + */ + lookupId?: string; + + /** + * Body param: The purpose of the payment. This may be required when sending to + * certain geographies (e.g. India). + */ + purposeOfPayment?: + | 'GIFT' + | 'SELF' + | 'GOODS_OR_SERVICES' + | 'EDUCATION' + | 'HEALTH_OR_MEDICAL' + | 'REAL_ESTATE_PURCHASE' + | 'TAX_PAYMENT' + | 'LOAN_PAYMENT' + | 'UTILITY_BILL' + | 'DONATION' + | 'TRAVEL' + | 'OTHER'; + + /** + * Body param: Key-value pairs of additional information about the sender which was + * requested by the destination. This is relevant when the destination requires + * more sender info than was provided during customer creation. Any fields + * specified in `requiredPayerDataFields` from the response of the + * `/receiver/uma/{receiverUmaAddress}` (lookupUma) or + * `/receiver/external-account/{accountId}` (lookupExternalAccount) endpoints MUST + * be provided here if they were requested. If the destination did not request any + * additional information, this field can be omitted. + */ + senderCustomerInfo?: { [key: string]: unknown }; + + /** + * Header param: A unique identifier for the request. If the same key is sent + * multiple times, the server will return the same response as the first request. + */ + 'Idempotency-Key'?: string; +} + +export interface QuoteExecuteParams { + /** + * Signature over the `payloadToSign` returned in the quote's + * `paymentInstructions[].accountOrWalletInfo` entry, produced with the session + * private key of a verified authentication credential on the source Embedded + * Wallet and base64-encoded. Required when the quote's source is an internal + * account of type `EMBEDDED_WALLET`; ignored for other source types. + */ + 'Grid-Wallet-Signature'?: string; + + /** + * A unique identifier for the request. If the same key is sent multiple times, the + * server will return the same response as the first request. + */ + 'Idempotency-Key'?: string; +} + +export declare namespace Quotes { + export { + type QuoteExecuteResponse as QuoteExecuteResponse, + type QuoteCreateParams as QuoteCreateParams, + type QuoteExecuteParams as QuoteExecuteParams, + }; +} diff --git a/src/resources/agents/me/transactions.ts b/src/resources/agents/me/transactions.ts new file mode 100644 index 0000000..ac6bcbd --- /dev/null +++ b/src/resources/agents/me/transactions.ts @@ -0,0 +1,112 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../../core/resource'; +import * as TransactionsAPI from '../../transactions'; +import * as TransferInAPI from '../../transfer-in'; +import { TransactionsDefaultPagination } from '../../transfer-in'; +import { APIPromise } from '../../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; +import { RequestOptions } from '../../../internal/request-options'; +import { path } from '../../../internal/utils/path'; + +/** + * Endpoints called by the agent itself using its own credentials (obtained via device code redemption). Scoped to the agent's associated customer — all requests automatically operate on behalf of that customer and are subject to the agent's policy. When an action requires approval, the resulting transaction enters a pending state and must be approved by the platform via `POST /transactions/{transactionId}/approve`. + */ +export class Transactions extends APIResource { + /** + * Retrieve a specific transaction belonging to the authenticated agent's customer. + * Returns 404 if the transaction exists but belongs to a different customer. + * + * @example + * ```ts + * const transaction = + * await client.agents.me.transactions.retrieve( + * 'transactionId', + * ); + * ``` + */ + retrieve(transactionID: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/agents/me/transactions/${transactionID}`, options); + } + + /** + * Retrieve a paginated list of transactions for the authenticated agent's + * customer. Results are automatically scoped to the agent's associated customer — + * no customer filter is needed or accepted. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const transaction of client.agents.me.transactions.list()) { + * // ... + * } + * ``` + */ + list( + query: TransactionListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/agents/me/transactions', DefaultPagination, { + query, + ...options, + }); + } +} + +export interface TransactionListParams extends DefaultPaginationParams { + /** + * Filter by account identifier (matches either sender or receiver) + */ + accountIdentifier?: string; + + /** + * Filter by end date (inclusive) in ISO 8601 format + */ + endDate?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; + + /** + * Filter by receiver account identifier + */ + receiverAccountIdentifier?: string; + + /** + * Filter by reference + */ + reference?: string; + + /** + * Filter by sender account identifier + */ + senderAccountIdentifier?: string; + + /** + * Order to sort results in + */ + sortOrder?: 'asc' | 'desc'; + + /** + * Filter by start date (inclusive) in ISO 8601 format + */ + startDate?: string; + + /** + * Filter by transaction status + */ + status?: TransactionsAPI.TransactionStatus; + + /** + * Filter by transaction type + */ + type?: TransactionsAPI.TransactionType; +} + +export declare namespace Transactions { + export { type TransactionListParams as TransactionListParams }; +} + +export { type TransactionsDefaultPagination }; diff --git a/src/resources/agents/transactions.ts b/src/resources/agents/transactions.ts new file mode 100644 index 0000000..cd0f18b --- /dev/null +++ b/src/resources/agents/transactions.ts @@ -0,0 +1,5 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; + +export class Transactions extends APIResource {} diff --git a/src/resources/index.ts b/src/resources/index.ts index b73cf02..78c756c 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -1,6 +1,22 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. export * from './shared'; +export { + Agents, + type AgentCreateResponse, + type AgentRetrieveResponse, + type AgentUpdateResponse, + type AgentListResponse, + type AgentListApprovalsResponse, + type AgentUpdatePolicyResponse, + type AgentCreateParams, + type AgentUpdateParams, + type AgentListParams, + type AgentListApprovalsParams, + type AgentUpdatePolicyParams, + type AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination, +} from './agents/agents'; export { Auth } from './auth/auth'; export { BeneficialOwners, @@ -147,6 +163,7 @@ export { } from './verifications'; export { Webhooks, + type AgentActionWebhookEvent, type IncomingPaymentWebhookEvent, type OutgoingPaymentWebhookEvent, type TestWebhookWebhookEvent, diff --git a/src/resources/transactions.ts b/src/resources/transactions.ts index 8e86124..f64ca0f 100644 --- a/src/resources/transactions.ts +++ b/src/resources/transactions.ts @@ -174,6 +174,12 @@ export interface IncomingTransaction { type: 'INCOMING' | 'OUTGOING'; + /** + * If this transaction was initiated by an agent, the system-generated ID of that + * agent. Absent for platform-initiated transactions. + */ + agentId?: string; + /** * Additional information about the counterparty, if available and relevant to the * transaction and platform. @@ -304,6 +310,12 @@ export interface OutgoingTransaction { type: 'OUTGOING' | 'INCOMING'; + /** + * If this transaction was initiated by an agent, the system-generated ID of that + * agent. Absent for platform-initiated transactions. + */ + agentId?: string; + /** * Additional information about the counterparty, if available and relevant to the * transaction and platform. diff --git a/src/resources/webhooks.ts b/src/resources/webhooks.ts index 26a1a15..74943b2 100644 --- a/src/resources/webhooks.ts +++ b/src/resources/webhooks.ts @@ -2,9 +2,11 @@ import { APIResource } from '../core/resource'; import * as InvitationsAPI from './invitations'; +import * as QuotesAPI from './quotes'; import * as ReceiverAPI from './receiver'; import * as Shared from './shared'; import * as TransactionsAPI from './transactions'; +import * as TransferInAPI from './transfer-in'; import * as CustomersAPI from './customers/customers'; import * as InternalAccountsAPI from './sandbox/internal-accounts'; @@ -14,6 +16,172 @@ export class Webhooks extends APIResource { } } +export interface AgentActionWebhookEvent { + /** + * Unique identifier for this webhook delivery (can be used for idempotency) + */ + id: string; + + /** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ + data: AgentActionWebhookEvent.Data; + + /** + * ISO 8601 timestamp of when the webhook was sent + */ + timestamp: string; + + type: + | 'AGENT_ACTION.PENDING_APPROVAL' + | 'OUTGOING_PAYMENT.PENDING' + | 'OUTGOING_PAYMENT.PROCESSING' + | 'OUTGOING_PAYMENT.COMPLETED' + | 'OUTGOING_PAYMENT.FAILED' + | 'OUTGOING_PAYMENT.EXPIRED' + | 'OUTGOING_PAYMENT.REFUND_PENDING' + | 'OUTGOING_PAYMENT.REFUND_COMPLETED' + | 'OUTGOING_PAYMENT.REFUND_FAILED' + | 'INCOMING_PAYMENT.PENDING' + | 'INCOMING_PAYMENT.COMPLETED' + | 'INCOMING_PAYMENT.FAILED' + | 'CUSTOMER.KYC_APPROVED' + | 'CUSTOMER.KYC_REJECTED' + | 'CUSTOMER.KYC_PENDING' + | 'CUSTOMER.KYB_APPROVED' + | 'CUSTOMER.KYB_REJECTED' + | 'CUSTOMER.KYB_PENDING' + | 'VERIFICATION.APPROVED' + | 'VERIFICATION.REJECTED' + | 'VERIFICATION.RESOLVE_ERRORS' + | 'VERIFICATION.IN_PROGRESS' + | 'VERIFICATION.PENDING_MANUAL_REVIEW' + | 'VERIFICATION.READY_FOR_VERIFICATION' + | 'INTERNAL_ACCOUNT.BALANCE_UPDATED' + | 'INVITATION.CLAIMED' + | 'BULK_UPLOAD.COMPLETED' + | 'BULK_UPLOAD.FAILED' + | 'TEST'; +} + +export namespace AgentActionWebhookEvent { + /** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ + export interface Data { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: Data.TransferDetails; + } + + export namespace Data { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } + } +} + export interface IncomingPaymentWebhookEvent { /** * Unique identifier for this webhook delivery (can be used for idempotency) @@ -55,6 +223,7 @@ export interface IncomingPaymentWebhookEvent { | 'INVITATION.CLAIMED' | 'BULK_UPLOAD.COMPLETED' | 'BULK_UPLOAD.FAILED' + | 'AGENT_ACTION.PENDING_APPROVAL' | 'TEST'; } @@ -110,6 +279,7 @@ export interface OutgoingPaymentWebhookEvent { | 'INVITATION.CLAIMED' | 'BULK_UPLOAD.COMPLETED' | 'BULK_UPLOAD.FAILED' + | 'AGENT_ACTION.PENDING_APPROVAL' | 'TEST'; } @@ -152,7 +322,8 @@ export interface TestWebhookWebhookEvent { | 'INTERNAL_ACCOUNT.BALANCE_UPDATED' | 'INVITATION.CLAIMED' | 'BULK_UPLOAD.COMPLETED' - | 'BULK_UPLOAD.FAILED'; + | 'BULK_UPLOAD.FAILED' + | 'AGENT_ACTION.PENDING_APPROVAL'; } export interface BulkUploadWebhookEvent { @@ -196,6 +367,7 @@ export interface BulkUploadWebhookEvent { | 'VERIFICATION.READY_FOR_VERIFICATION' | 'INTERNAL_ACCOUNT.BALANCE_UPDATED' | 'INVITATION.CLAIMED' + | 'AGENT_ACTION.PENDING_APPROVAL' | 'TEST'; } @@ -290,6 +462,7 @@ export interface InvitationClaimedWebhookEvent { | 'INTERNAL_ACCOUNT.BALANCE_UPDATED' | 'BULK_UPLOAD.COMPLETED' | 'BULK_UPLOAD.FAILED' + | 'AGENT_ACTION.PENDING_APPROVAL' | 'TEST'; } @@ -334,6 +507,7 @@ export interface CustomerUpdateWebhookEvent { | 'INVITATION.CLAIMED' | 'BULK_UPLOAD.COMPLETED' | 'BULK_UPLOAD.FAILED' + | 'AGENT_ACTION.PENDING_APPROVAL' | 'TEST'; } @@ -378,6 +552,7 @@ export interface InternalAccountStatusWebhookEvent { | 'INVITATION.CLAIMED' | 'BULK_UPLOAD.COMPLETED' | 'BULK_UPLOAD.FAILED' + | 'AGENT_ACTION.PENDING_APPROVAL' | 'TEST'; } @@ -422,6 +597,7 @@ export interface VerificationUpdateWebhookEvent { | 'INVITATION.CLAIMED' | 'BULK_UPLOAD.COMPLETED' | 'BULK_UPLOAD.FAILED' + | 'AGENT_ACTION.PENDING_APPROVAL' | 'TEST'; } @@ -467,6 +643,7 @@ export namespace VerificationUpdateWebhookEvent { } export type UnwrapWebhookEvent = + | AgentActionWebhookEvent | IncomingPaymentWebhookEvent | OutgoingPaymentWebhookEvent | TestWebhookWebhookEvent @@ -478,6 +655,7 @@ export type UnwrapWebhookEvent = export declare namespace Webhooks { export { + type AgentActionWebhookEvent as AgentActionWebhookEvent, type IncomingPaymentWebhookEvent as IncomingPaymentWebhookEvent, type OutgoingPaymentWebhookEvent as OutgoingPaymentWebhookEvent, type TestWebhookWebhookEvent as TestWebhookWebhookEvent, diff --git a/tests/api-resources/agents/actions.test.ts b/tests/api-resources/agents/actions.test.ts new file mode 100644 index 0000000..05b7a29 --- /dev/null +++ b/tests/api-resources/agents/actions.test.ts @@ -0,0 +1,48 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource actions', () => { + // Mock server tests are disabled + test.skip('approve: only required params', async () => { + const responsePromise = client.agents.actions.approve('actionId', { agentId: 'agentId' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('approve: required and optional params', async () => { + const response = await client.agents.actions.approve('actionId', { agentId: 'agentId' }); + }); + + // Mock server tests are disabled + test.skip('reject: only required params', async () => { + const responsePromise = client.agents.actions.reject('actionId', { agentId: 'agentId' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('reject: required and optional params', async () => { + const response = await client.agents.actions.reject('actionId', { + agentId: 'agentId', + reason: "Transaction amount exceeds customer's current risk limit.", + }); + }); +}); diff --git a/tests/api-resources/agents/agents.test.ts b/tests/api-resources/agents/agents.test.ts new file mode 100644 index 0000000..492778d --- /dev/null +++ b/tests/api-resources/agents/agents.test.ts @@ -0,0 +1,173 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource agents', () => { + // Mock server tests are disabled + test.skip('create: only required params', async () => { + const responsePromise = client.agents.create({ + customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001', + name: 'Payroll Automation Agent', + policy: { + defaultExecutionMode: 'AUTO', + permissions: ['VIEW_TRANSACTIONS'], + spendingLimits: { currency: 'USD', perTransactionLimit: 50000 }, + }, + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('create: required and optional params', async () => { + const response = await client.agents.create({ + customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001', + name: 'Payroll Automation Agent', + policy: { + defaultExecutionMode: 'AUTO', + permissions: ['VIEW_TRANSACTIONS'], + spendingLimits: { + currency: 'USD', + perTransactionLimit: 50000, + dailyLimit: 500000, + dailyTransactionLimit: 10, + monthlyLimit: 5000000, + }, + accountRestrictions: { + accountRules: [ + { + accountId: 'Account:019542f5-b3e7-1d02-0000-000000000001', + executionMode: 'AUTO', + perTransactionLimit: 10000, + }, + ], + allowedAccountIds: ['Account:019542f5-b3e7-1d02-0000-000000000001'], + }, + approvalThresholds: { amount: 100000, currency: 'USD' }, + }, + }); + }); + + // Mock server tests are disabled + test.skip('retrieve', async () => { + const responsePromise = client.agents.retrieve('agentId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('update', async () => { + const responsePromise = client.agents.update('agentId', {}); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list', async () => { + const responsePromise = client.agents.list(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.list( + { + createdAfter: '2019-12-27T18:11:19.117Z', + createdBefore: '2019-12-27T18:11:19.117Z', + cursor: 'cursor', + customerId: 'customerId', + isConnected: true, + isPaused: true, + limit: 1, + updatedAfter: '2019-12-27T18:11:19.117Z', + updatedBefore: '2019-12-27T18:11:19.117Z', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); + + // Mock server tests are disabled + test.skip('delete', async () => { + const responsePromise = client.agents.delete('agentId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('listApprovals', async () => { + const responsePromise = client.agents.listApprovals(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('listApprovals: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.listApprovals( + { + agentId: 'agentId', + cursor: 'cursor', + customerId: 'customerId', + endDate: '2019-12-27T18:11:19.117Z', + limit: 1, + sortOrder: 'asc', + startDate: '2019-12-27T18:11:19.117Z', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); + + // Mock server tests are disabled + test.skip('updatePolicy', async () => { + const responsePromise = client.agents.updatePolicy('agentId', {}); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); +}); diff --git a/tests/api-resources/agents/device-codes.test.ts b/tests/api-resources/agents/device-codes.test.ts new file mode 100644 index 0000000..4edf0cc --- /dev/null +++ b/tests/api-resources/agents/device-codes.test.ts @@ -0,0 +1,47 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource deviceCodes', () => { + // Mock server tests are disabled + test.skip('getStatus', async () => { + const responsePromise = client.agents.deviceCodes.getStatus('code'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('redeem', async () => { + const responsePromise = client.agents.deviceCodes.redeem('code'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('regenerate', async () => { + const responsePromise = client.agents.deviceCodes.regenerate('agentId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); +}); diff --git a/tests/api-resources/agents/me/actions.test.ts b/tests/api-resources/agents/me/actions.test.ts new file mode 100644 index 0000000..92c98bf --- /dev/null +++ b/tests/api-resources/agents/me/actions.test.ts @@ -0,0 +1,50 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource actions', () => { + // Mock server tests are disabled + test.skip('retrieve', async () => { + const responsePromise = client.agents.me.actions.retrieve('actionId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list', async () => { + const responsePromise = client.agents.me.actions.list(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.actions.list( + { + cursor: 'cursor', + limit: 1, + status: 'PENDING_APPROVAL', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); +}); diff --git a/tests/api-resources/agents/me/external-accounts.test.ts b/tests/api-resources/agents/me/external-accounts.test.ts new file mode 100644 index 0000000..3cde53b --- /dev/null +++ b/tests/api-resources/agents/me/external-accounts.test.ts @@ -0,0 +1,114 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource externalAccounts', () => { + // Mock server tests are disabled + test.skip('retrieve', async () => { + const responsePromise = client.agents.me.externalAccounts.retrieve('externalAccountId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list', async () => { + const responsePromise = client.agents.me.externalAccounts.list(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.externalAccounts.list( + { + currency: 'currency', + cursor: 'cursor', + limit: 1, + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); + + // Mock server tests are disabled + test.skip('delete', async () => { + const responsePromise = client.agents.me.externalAccounts.delete('externalAccountId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('add: only required params', async () => { + const responsePromise = client.agents.me.externalAccounts.add({ + accountInfo: { + accountNumber: '12345678901', + accountType: 'USD_ACCOUNT', + beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' }, + routingNumber: '123456789', + }, + currency: 'USD', + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('add: required and optional params', async () => { + const response = await client.agents.me.externalAccounts.add({ + accountInfo: { + accountNumber: '12345678901', + accountType: 'USD_ACCOUNT', + beneficiary: { + beneficiaryType: 'INDIVIDUAL', + fullName: 'John Doe', + address: { + country: 'US', + line1: '123 Main Street', + postalCode: '94105', + city: 'San Francisco', + line2: 'Apt 4B', + state: 'CA', + }, + birthDate: '1990-01-15', + countryOfResidence: 'countryOfResidence', + email: 'email', + nationality: 'US', + phoneNumber: 'phoneNumber', + }, + routingNumber: '123456789', + }, + currency: 'USD', + customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001', + defaultUmaDepositAccount: true, + platformAccountId: 'ext_acc_123456', + }); + }); +}); diff --git a/tests/api-resources/agents/me/me.test.ts b/tests/api-resources/agents/me/me.test.ts new file mode 100644 index 0000000..1db676d --- /dev/null +++ b/tests/api-resources/agents/me/me.test.ts @@ -0,0 +1,101 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource me', () => { + // Mock server tests are disabled + test.skip('retrieve', async () => { + const responsePromise = client.agents.me.retrieve(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('createTransferIn: only required params', async () => { + const responsePromise = client.agents.me.createTransferIn({ + destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('createTransferIn: required and optional params', async () => { + const response = await client.agents.me.createTransferIn({ + destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + amount: 12550, + 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', + }); + }); + + // Mock server tests are disabled + test.skip('createTransferOut: only required params', async () => { + const responsePromise = client.agents.me.createTransferOut({ + destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('createTransferOut: required and optional params', async () => { + const response = await client.agents.me.createTransferOut({ + destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + amount: 12550, + 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', + }); + }); + + // Mock server tests are disabled + test.skip('listInternalAccounts', async () => { + const responsePromise = client.agents.me.listInternalAccounts(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('listInternalAccounts: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.listInternalAccounts( + { + currency: 'currency', + cursor: 'cursor', + limit: 1, + type: 'INTERNAL_FIAT', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); +}); diff --git a/tests/api-resources/agents/me/quotes.test.ts b/tests/api-resources/agents/me/quotes.test.ts new file mode 100644 index 0000000..c8c3171 --- /dev/null +++ b/tests/api-resources/agents/me/quotes.test.ts @@ -0,0 +1,95 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource quotes', () => { + // Mock server tests are disabled + test.skip('create: only required params', async () => { + const responsePromise = client.agents.me.quotes.create({ + destination: { + accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + destinationType: 'ACCOUNT', + }, + lockedCurrencyAmount: 1000, + lockedCurrencySide: 'SENDING', + source: { accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', sourceType: 'ACCOUNT' }, + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('create: required and optional params', async () => { + const response = await client.agents.me.quotes.create({ + destination: { + accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + destinationType: 'ACCOUNT', + paymentRail: 'ACH', + }, + lockedCurrencyAmount: 1000, + lockedCurrencySide: 'SENDING', + source: { + accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', + sourceType: 'ACCOUNT', + customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001', + }, + description: 'Invoice #1234 payment', + immediatelyExecute: false, + lookupId: 'Lookup:019542f5-b3e7-1d02-0000-000000000009', + purposeOfPayment: 'GIFT', + senderCustomerInfo: { FULL_NAME: 'bar', NATIONALITY: 'bar' }, + 'Idempotency-Key': '', + }); + }); + + // Mock server tests are disabled + test.skip('retrieve', async () => { + const responsePromise = client.agents.me.quotes.retrieve('quoteId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('execute', async () => { + const responsePromise = client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('execute: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.quotes.execute( + 'Quote:019542f5-b3e7-1d02-0000-000000000001', + { + 'Grid-Wallet-Signature': + 'MEUCIQDx7k2N0aK4p8f3vR9J6yT5wL1mB0sXnG2hQ4vJ8zYkCgIgZ4rP9dT7eWfU3oM6KjR1qSpNvBwL0tXyA2iG8fH5dE=', + 'Idempotency-Key': '', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); +}); diff --git a/tests/api-resources/agents/me/transactions.test.ts b/tests/api-resources/agents/me/transactions.test.ts new file mode 100644 index 0000000..5c2c622 --- /dev/null +++ b/tests/api-resources/agents/me/transactions.test.ts @@ -0,0 +1,58 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource transactions', () => { + // Mock server tests are disabled + test.skip('retrieve', async () => { + const responsePromise = client.agents.me.transactions.retrieve('transactionId'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list', async () => { + const responsePromise = client.agents.me.transactions.list(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.transactions.list( + { + accountIdentifier: 'accountIdentifier', + cursor: 'cursor', + endDate: '2019-12-27T18:11:19.117Z', + limit: 1, + receiverAccountIdentifier: 'receiverAccountIdentifier', + reference: 'reference', + senderAccountIdentifier: 'senderAccountIdentifier', + sortOrder: 'asc', + startDate: '2019-12-27T18:11:19.117Z', + status: 'CREATED', + type: 'INCOMING', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); +}); From 8b4243825baa545d8402b0b9b9a9d4d2e273d488 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 19:00:53 +0000 Subject: [PATCH 12/26] docs(api): update endpoint references in agents.me transfer and quote methods --- .stats.yml | 4 ++-- packages/mcp-server/src/local-docs-search.ts | 12 ++++++------ src/resources/agents/me/me.ts | 10 +++++----- src/resources/agents/me/quotes.ts | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.stats.yml b/.stats.yml index 6b1fec3..198d462 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-e2bb6cedad439a5d9902bc24fa65ec5b0800b77ba56dd5b036c948d9cc161930.yml -openapi_spec_hash: 3a1eff171c8a7e956d41460b2f437d91 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-72552acf71ca5c3c686cfffa307c2a579aba31f68511d3a8d8882af00e79baaa.yml +openapi_spec_hash: d559102646ba15537b261230b81e712c config_hash: ed09c0afe747c9c6bc0beb25176b1409 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 7d118dc..f398639 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -2897,7 +2897,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ httpMethod: 'post', summary: 'Create a transfer-in', description: - "Transfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n", + "Transfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n", stainlessPath: '(resource) agents.me > (method) create_transfer_in', qualified: 'client.agents.me.createTransferIn', params: [ @@ -2909,7 +2909,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.me.createTransferIn', @@ -2938,7 +2938,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ httpMethod: 'post', summary: 'Create a transfer-out', description: - "Transfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\n", + "Transfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n", stainlessPath: '(resource) agents.me > (method) create_transfer_out', qualified: 'client.agents.me.createTransferOut', params: [ @@ -2950,7 +2950,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.me.createTransferOut', @@ -3183,14 +3183,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ httpMethod: 'post', summary: 'Execute a quote', description: - "Execute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n", + "Execute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n", stainlessPath: '(resource) agents.me.quotes > (method) execute', qualified: 'client.agents.me.quotes.execute', params: ['quoteId: string;', 'Grid-Wallet-Signature?: string;', 'Idempotency-Key?: string;'], response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## execute\n\n`client.agents.me.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/quotes/{quoteId}/execute`\n\nExecute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/transactions/{transactionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(response);\n```", + "## execute\n\n`client.agents.me.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/quotes/{quoteId}/execute`\n\nExecute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.me.quotes.execute', diff --git a/src/resources/agents/me/me.ts b/src/resources/agents/me/me.ts index 8ec828d..e319eb1 100644 --- a/src/resources/agents/me/me.ts +++ b/src/resources/agents/me/me.ts @@ -55,10 +55,10 @@ export class Me extends APIResource { * Requires the CREATE_TRANSFERS permission in the agent's policy. If the agent's * policy requires approval for this amount, the transaction will be created in a * pending state and must be approved by the platform via - * `POST /agents/{agentId}/transactions/{transactionId}/approve`. This endpoint - * should only be used for external account sources with pull functionality (e.g. - * ACH Pull). Otherwise, use the payment instructions on the internal account to - * deposit funds. + * `POST /agents/{agentId}/actions/{actionId}/approve`. This endpoint should only + * be used for external account sources with pull functionality (e.g. ACH Pull). + * Otherwise, use the payment instructions on the internal account to deposit + * funds. * * @example * ```ts @@ -96,7 +96,7 @@ export class Me extends APIResource { * Requires the CREATE_TRANSFERS permission in the agent's policy. If the agent's * policy requires approval for this amount, the transaction will be created in a * pending state and must be approved by the platform via - * `POST /agents/{agentId}/transactions/{transactionId}/approve`. + * `POST /agents/{agentId}/actions/{actionId}/approve`. * * @example * ```ts diff --git a/src/resources/agents/me/quotes.ts b/src/resources/agents/me/quotes.ts index 64d8cf3..6ea4ea6 100644 --- a/src/resources/agents/me/quotes.ts +++ b/src/resources/agents/me/quotes.ts @@ -70,8 +70,8 @@ export class Quotes extends APIResource { * permission in the agent's policy. If the agent's policy requires approval for * this amount (based on execution mode or approval thresholds), the transaction * will be created in a pending state and must be approved by the platform via - * `POST /agents/{agentId}/transactions/{transactionId}/approve`. Once executed, - * the quote cannot be cancelled. + * `POST /agents/{agentId}/actions/{actionId}/approve`. Once executed, the quote + * cannot be cancelled. * * @example * ```ts From 6908f84f91dafb07202d0f29a9bac290aed89924 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 23:40:19 +0000 Subject: [PATCH 13/26] feat: Update cryptoNetwork values --- .stats.yml | 4 ++-- packages/mcp-server/src/local-docs-search.ts | 10 +++++----- src/resources/crypto.ts | 7 +++---- src/resources/quotes.ts | 6 ++---- tests/api-resources/crypto.test.ts | 4 ++-- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/.stats.yml b/.stats.yml index 198d462..330cf25 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-72552acf71ca5c3c686cfffa307c2a579aba31f68511d3a8d8882af00e79baaa.yml -openapi_spec_hash: d559102646ba15537b261230b81e712c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-2f7ff3f07f68c1c371335b62bf086d9cea5b9c89c970de728863c32d34a3f866.yml +openapi_spec_hash: cbcdb26824936adbf4c07ea120328908 config_hash: ed09c0afe747c9c6bc0beb25176b1409 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index f398639..a95d985 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -1777,26 +1777,26 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: '{ applicationFee: number; netAmount: number; networkFee: number; networkFeeAsset: string; totalFee: number; }', markdown: - "## estimate_withdrawal_fee\n\n`client.crypto.estimateWithdrawalFee(amount: number, cryptoNetwork: string, currency: string, destinationAddress: string, internalAccountId: string): { applicationFee: number; netAmount: number; networkFee: number; networkFeeAsset: string; totalFee: number; }`\n\n**post** `/crypto/estimate-withdrawal-fee`\n\nEstimate the network and application fees for a cryptocurrency withdrawal from a crypto internal account to an external blockchain address. Use this to show fee information to customers before they initiate a withdrawal.\n\n\n### Parameters\n\n- `amount: number`\n The amount to withdraw in the smallest unit of the currency.\n\n- `cryptoNetwork: string`\n The blockchain network for the withdrawal. Example values: SOLANA_MAINNET, SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST.\n\n- `currency: string`\n The currency code of the asset to withdraw (e.g. USDC).\n\n- `destinationAddress: string`\n The blockchain address to withdraw funds to.\n\n- `internalAccountId: string`\n The ID of the crypto internal account to withdraw from.\n\n### Returns\n\n- `{ applicationFee: number; netAmount: number; networkFee: number; networkFeeAsset: string; totalFee: number; }`\n\n - `applicationFee: number`\n - `netAmount: number`\n - `networkFee: number`\n - `networkFeeAsset: string`\n - `totalFee: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.crypto.estimateWithdrawalFee({\n amount: 1000000,\n cryptoNetwork: 'SOLANA_MAINNET',\n currency: 'USDC',\n destinationAddress: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',\n internalAccountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n});\n\nconsole.log(response);\n```", + "## estimate_withdrawal_fee\n\n`client.crypto.estimateWithdrawalFee(amount: number, cryptoNetwork: string, currency: string, destinationAddress: string, internalAccountId: string): { applicationFee: number; netAmount: number; networkFee: number; networkFeeAsset: string; totalFee: number; }`\n\n**post** `/crypto/estimate-withdrawal-fee`\n\nEstimate the network and application fees for a cryptocurrency withdrawal from a crypto internal account to an external blockchain address. Use this to show fee information to customers before they initiate a withdrawal.\n\n\n### Parameters\n\n- `amount: number`\n The amount to withdraw in the smallest unit of the currency.\n\n- `cryptoNetwork: string`\n The blockchain network for the withdrawal. Example values: SOLANA, ETHEREUM, BASE, POLYGON, SPARK, LIGHTNING, BITCOIN.\n\n- `currency: string`\n The currency code of the asset to withdraw (e.g. USDC).\n\n- `destinationAddress: string`\n The blockchain address to withdraw funds to.\n\n- `internalAccountId: string`\n The ID of the crypto internal account to withdraw from.\n\n### Returns\n\n- `{ applicationFee: number; netAmount: number; networkFee: number; networkFeeAsset: string; totalFee: number; }`\n\n - `applicationFee: number`\n - `netAmount: number`\n - `networkFee: number`\n - `networkFeeAsset: string`\n - `totalFee: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.crypto.estimateWithdrawalFee({\n amount: 1000000,\n cryptoNetwork: 'SOLANA',\n currency: 'USDC',\n destinationAddress: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',\n internalAccountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.crypto.estimateWithdrawalFee', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.crypto.estimateWithdrawalFee({\n amount: 1000000,\n cryptoNetwork: 'SOLANA_MAINNET',\n currency: 'USDC',\n destinationAddress: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',\n internalAccountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n});\n\nconsole.log(response.applicationFee);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.crypto.estimateWithdrawalFee({\n amount: 1000000,\n cryptoNetwork: 'SOLANA',\n currency: 'USDC',\n destinationAddress: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',\n internalAccountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n});\n\nconsole.log(response.applicationFee);", }, python: { method: 'crypto.estimate_withdrawal_fee', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.crypto.estimate_withdrawal_fee(\n amount=1000000,\n crypto_network="SOLANA_MAINNET",\n currency="USDC",\n destination_address="7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",\n internal_account_id="InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n)\nprint(response.application_fee)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.crypto.estimate_withdrawal_fee(\n amount=1000000,\n crypto_network="SOLANA",\n currency="USDC",\n destination_address="7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",\n internal_account_id="InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n)\nprint(response.application_fee)', }, kotlin: { method: 'crypto().estimateWithdrawalFee', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.crypto.CryptoEstimateWithdrawalFeeParams\nimport com.lightspark.grid.models.crypto.CryptoEstimateWithdrawalFeeResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CryptoEstimateWithdrawalFeeParams = CryptoEstimateWithdrawalFeeParams.builder()\n .amount(1000000L)\n .cryptoNetwork("SOLANA_MAINNET")\n .currency("USDC")\n .destinationAddress("7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU")\n .internalAccountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build()\n val response: CryptoEstimateWithdrawalFeeResponse = client.crypto().estimateWithdrawalFee(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.crypto.CryptoEstimateWithdrawalFeeParams\nimport com.lightspark.grid.models.crypto.CryptoEstimateWithdrawalFeeResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CryptoEstimateWithdrawalFeeParams = CryptoEstimateWithdrawalFeeParams.builder()\n .amount(1000000L)\n .cryptoNetwork("SOLANA")\n .currency("USDC")\n .destinationAddress("7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU")\n .internalAccountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build()\n val response: CryptoEstimateWithdrawalFeeResponse = client.crypto().estimateWithdrawalFee(params)\n}', }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/crypto/estimate-withdrawal-fee \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "amount": 1000000,\n "cryptoNetwork": "SOLANA_MAINNET",\n "currency": "USDC",\n "destinationAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",\n "internalAccountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n }\'', + 'curl https://api.lightspark.com/grid/2025-10-13/crypto/estimate-withdrawal-fee \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "amount": 1000000,\n "cryptoNetwork": "SOLANA",\n "currency": "USDC",\n "destinationAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",\n "internalAccountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n }\'', }, }, }, diff --git a/src/resources/crypto.ts b/src/resources/crypto.ts index 2fbde66..78bd7c3 100644 --- a/src/resources/crypto.ts +++ b/src/resources/crypto.ts @@ -17,7 +17,7 @@ export class Crypto extends APIResource { * ```ts * const response = await client.crypto.estimateWithdrawalFee({ * amount: 1000000, - * cryptoNetwork: 'SOLANA_MAINNET', + * cryptoNetwork: 'SOLANA', * currency: 'USDC', * destinationAddress: * '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU', @@ -77,9 +77,8 @@ export interface CryptoEstimateWithdrawalFeeParams { amount: number; /** - * The blockchain network for the withdrawal. Example values: SOLANA_MAINNET, - * SOLANA_DEVNET, ETHEREUM_MAINNET, ETHEREUM_TESTNET, BASE_MAINNET, BASE_TESTNET, - * SPARK_MAINNET, SPARK_TESTNET, LIGHTNING_MAINNET, LIGHTNING_REGTEST. + * The blockchain network for the withdrawal. Example values: SOLANA, ETHEREUM, + * BASE, POLYGON, SPARK, LIGHTNING, BITCOIN. */ cryptoNetwork: string; diff --git a/src/resources/quotes.ts b/src/resources/quotes.ts index d0061a3..7eec3cd 100644 --- a/src/resources/quotes.ts +++ b/src/resources/quotes.ts @@ -654,10 +654,8 @@ export namespace QuoteSourceOneOf { /** * The crypto network to use for the funding source. Required when `currency` is a * stablecoin (e.g. USDC, USDT). Specifies which network the customer will deposit - * on, so the correct deposit address can be generated. Example values: - * `SOLANA_MAINNET`, `SOLANA_DEVNET`, `ETHEREUM_MAINNET`, `ETHEREUM_TESTNET`, - * `BASE_MAINNET`, `BASE_TESTNET`, `SPARK_MAINNET`, `SPARK_TESTNET`, - * `LIGHTNING_MAINNET`, `LIGHTNING_REGTEST`. + * on, so the correct deposit address can be generated. Example values: `SOLANA`, + * `ETHEREUM`, `BASE`, `POLYGON`, `SPARK`, `LIGHTNING`, `BITCOIN`. */ cryptoNetwork?: string; diff --git a/tests/api-resources/crypto.test.ts b/tests/api-resources/crypto.test.ts index 9e3e5ae..6c32834 100644 --- a/tests/api-resources/crypto.test.ts +++ b/tests/api-resources/crypto.test.ts @@ -13,7 +13,7 @@ describe('resource crypto', () => { test.skip('estimateWithdrawalFee: only required params', async () => { const responsePromise = client.crypto.estimateWithdrawalFee({ amount: 1000000, - cryptoNetwork: 'SOLANA_MAINNET', + cryptoNetwork: 'SOLANA', currency: 'USDC', destinationAddress: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU', internalAccountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', @@ -31,7 +31,7 @@ describe('resource crypto', () => { test.skip('estimateWithdrawalFee: required and optional params', async () => { const response = await client.crypto.estimateWithdrawalFee({ amount: 1000000, - cryptoNetwork: 'SOLANA_MAINNET', + cryptoNetwork: 'SOLANA', currency: 'USDC', destinationAddress: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU', internalAccountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', From e379a52c805d530c1c1950594548a00ebb04438a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 06:02:20 +0000 Subject: [PATCH 14/26] docs: clarify forwards compat behavior --- packages/mcp-server/src/local-docs-search.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index a95d985..4cb933d 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -3618,7 +3618,7 @@ const EMBEDDED_READMES: { language: string; content: string }[] = [ { language: 'kotlin', content: - '# Lightspark Grid Kotlin API Library\n\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.lightspark.grid/lightspark-grid-kotlin)](https://central.sonatype.com/artifact/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n[![javadoc](https://javadoc.io/badge2/com.lightspark.grid/lightspark-grid-kotlin/0.0.1/javadoc.svg)](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n\n\nThe Lightspark Grid Kotlin SDK provides convenient access to the [Lightspark Grid REST API](grid.lightspark.com) from applications written in Kotlin.\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n\n\nKDocs are available on [javadoc.io](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1).\n\n\n\n## Installation\n\n\n\n### Gradle\n\n~~~kotlin\nimplementation("com.lightspark.grid:lightspark-grid-kotlin:0.0.1")\n~~~\n\n### Maven\n\n~~~xml\n\n com.lightspark.grid\n lightspark-grid-kotlin\n 0.0.1\n\n~~~\n\n\n\n## Requirements\n\nThis library requires Java 8 or later.\n\n## Usage\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\n## Client configuration\n\nConfigure the client using system properties or environment variables:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n```\n\nOr manually:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .username("My Username")\n .password("My Password")\n .build()\n```\n\nOr using a combination of the two approaches:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n // Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n // Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\n .fromEnv()\n .username("My Username")\n .build()\n```\n\nSee this table for the available options:\n\n| Setter | System property | Environment variable | Required | Default value |\n| ------------------ | ---------------------------------- | -------------------------- | -------- | ---------------------------------------------- |\n| `username` | `lightsparkgrid.gridClientId` | `GRID_CLIENT_ID` | true | - |\n| `password` | `lightsparkgrid.gridClientSecret` | `GRID_CLIENT_SECRET` | true | - |\n| `webhookSignature` | `lightsparkgrid.gridWebhookPubkey` | `GRID_WEBHOOK_PUBKEY` | false | - |\n| `baseUrl` | `lightsparkgrid.baseUrl` | `LIGHTSPARK_GRID_BASE_URL` | true | `"https://api.lightspark.com/grid/2025-10-13"` |\n\nSystem properties take precedence over environment variables.\n\n> [!TIP]\n> Don\'t create more than one client in the same application. Each client has a connection pool and\n> thread pools, which are more efficient to share between requests.\n\n### Modifying configuration\n\nTo temporarily use a modified client configuration, while reusing the same connection and thread pools, call `withOptions()` on any client or service:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\n\nval clientWithOptions: LightsparkGridClient = client.withOptions {\n it.baseUrl("https://example.com")\n it.maxRetries(42)\n}\n```\n\nThe `withOptions()` method does not affect the original client or service.\n\n## Requests and responses\n\nTo send a request to the Lightspark Grid API, build an instance of some `Params` class and pass it to the corresponding client method. When the response is received, it will be deserialized into an instance of a Kotlin class.\n\nFor example, `client.quotes().create(...)` should be called with an instance of `QuoteCreateParams`, and it will return an instance of `Quote`.\n\n## Immutability\n\nEach class in the SDK has an associated [builder](https://blogs.oracle.com/javamagazine/post/exploring-joshua-blochs-builder-design-pattern-in-java) or factory method for constructing it.\n\nEach class is [immutable](https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html) once constructed. If the class has an associated builder, then it has a `toBuilder()` method, which can be used to convert it back to a builder for making a modified copy.\n\nBecause each class is immutable, builder modification will _never_ affect already built class instances.\n\n## Asynchronous execution\n\nThe default client is synchronous. To switch to asynchronous execution, call the `async()` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.async().quotes().create(params)\n```\n\nOr create an asynchronous client from the beginning:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClientAsync\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClientAsync\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClientAsync = LightsparkGridOkHttpClientAsync.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\nThe asynchronous client supports the same options as the synchronous one, except most methods are [suspending](https://kotlinlang.org/docs/coroutines-guide.html).\n\n\n\n## File uploads\n\nThe SDK defines methods that accept files.\n\nTo upload a file, pass a [`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.nio.file.Paths\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(Paths.get("/path/to/file"))\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr an arbitrary [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(URL("https://example.com//path/to/file").openStream())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr a `ByteArray`:\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file("content".toByteArray())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nNote that when passing a non-`Path` its filename is unknown so it will not be included in the request. To manually set a filename, pass a [`MultipartField`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.MultipartField\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.io.InputStream\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(MultipartField.builder()\n .value(URL("https://example.com//path/to/file").openStream())\n .filename("/path/to/file")\n .build())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\n\n\n## Raw responses\n\nThe SDK defines methods that deserialize responses into instances of Kotlin classes. However, these methods don\'t provide access to the response headers, status code, or the raw response body.\n\nTo access this data, prefix any HTTP method call on a client or service with `withRawResponse()`:\n\n```kotlin\nimport com.lightspark.grid.core.http.Headers\nimport com.lightspark.grid.core.http.HttpResponseFor\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: HttpResponseFor = client.quotes().withRawResponse().create(params)\n\nval statusCode: Int = quote.statusCode()\nval headers: Headers = quote.headers()\n```\n\nYou can still deserialize the response into an instance of a Kotlin class if needed:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval parsedQuote: Quote = quote.parse()\n```\n\n## Error handling\n\nThe SDK throws custom unchecked exception types:\n\n- [`LightsparkGridServiceException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridServiceException.kt): Base class for HTTP errors. See this table for which exception subclass is thrown for each HTTP status code:\n\n | Status | Exception |\n | ------ | -------------------------------------------------- |\n | 400 | [`BadRequestException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/BadRequestException.kt) |\n | 401 | [`UnauthorizedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnauthorizedException.kt) |\n | 403 | [`PermissionDeniedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/PermissionDeniedException.kt) |\n | 404 | [`NotFoundException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/NotFoundException.kt) |\n | 422 | [`UnprocessableEntityException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnprocessableEntityException.kt) |\n | 429 | [`RateLimitException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/RateLimitException.kt) |\n | 5xx | [`InternalServerException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/InternalServerException.kt) |\n | others | [`UnexpectedStatusCodeException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnexpectedStatusCodeException.kt) |\n\n- [`LightsparkGridIoException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridIoException.kt): I/O networking errors.\n\n- [`LightsparkGridRetryableException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridRetryableException.kt): Generic error indicating a failure that could be retried by the client.\n\n- [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt): Failure to interpret successfully parsed data. For example, when accessing a property that\'s supposed to be required, but the API unexpectedly omitted it from the response.\n\n- [`LightsparkGridException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridException.kt): Base class for all exceptions. Most errors will result in one of the previously mentioned ones, but completely generic errors may be thrown using the base class.\n\n## Pagination\n\nThe SDK defines methods that return a paginated lists of results. It provides convenient ways to access the results either one page at a time or item-by-item across all pages.\n\n### Auto-pagination\n\nTo iterate through all results across all pages, use the `autoPager()` method, which automatically fetches more pages as needed.\n\nWhen using the synchronous client, the method returns a [`Sequence`](https://kotlinlang.org/docs/sequences.html)\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\n\nval page: CustomerListPage = client.customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\nWhen using the asynchronous client, the method returns a [`Flow`](https://kotlinlang.org/docs/flow.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPageAsync\n\nval page: CustomerListPageAsync = client.async().customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\n### Manual pagination\n\nTo access individual page items and manually request the next page, use the `items()`,\n`hasNextPage()`, and `nextPage()` methods:\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\nimport com.lightspark.grid.models.customers.CustomerOneOf\n\nval page: CustomerListPage = client.customers().list()\nwhile (true) {\n for (customer in page.items()) {\n println(customer)\n }\n\n if (!page.hasNextPage()) {\n break\n }\n\n page = page.nextPage()\n}\n```\n\n## Logging\n\nThe SDK uses the standard [OkHttp logging interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor).\n\nEnable logging by setting the `LIGHTSPARK_GRID_LOG` environment variable to `info`:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=debug\n```\n\n## ProGuard and R8\n\nAlthough the SDK uses reflection, it is still usable with [ProGuard](https://github.com/Guardsquare/proguard) and [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization) because `lightspark-grid-kotlin-core` is published with a [configuration file](lightspark-grid-kotlin-core/src/main/resources/META-INF/proguard/lightspark-grid-kotlin-core.pro) containing [keep rules](https://www.guardsquare.com/manual/configuration/usage).\n\nProGuard and R8 should automatically detect and use the published rules, but you can also manually copy the keep rules if necessary.\n\n\n\n\n\n## Jackson\n\nThe SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.18.2 by default.\n\nThe SDK throws an exception if it detects an incompatible Jackson version at runtime (e.g. if the default version was overridden in your Maven or Gradle config).\n\nIf the SDK threw an exception, but you\'re _certain_ the version is compatible, then disable the version check using the `checkJacksonVersionCompatibility` on [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt).\n\n> [!CAUTION]\n> We make no guarantee that the SDK works correctly when the Jackson version check is disabled.\n\nAlso note that there are bugs in older Jackson versions that can affect the SDK. We don\'t work around all Jackson bugs ([example](https://github.com/FasterXML/jackson-databind/issues/3240)) and expect users to upgrade Jackson for those instead.\n\n## Network options\n\n### Retries\n\nThe SDK automatically retries 2 times by default, with a short exponential backoff between requests.\n\nOnly the following error types are retried:\n- Connection errors (for example, due to a network connectivity problem)\n- 408 Request Timeout\n- 409 Conflict\n- 429 Rate Limit\n- 5xx Internal\n\nThe API may also explicitly instruct the SDK to retry or not retry a request.\n\nTo set a custom number of retries, configure the client using the `maxRetries` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .maxRetries(4)\n .build()\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default.\n\nTo set a custom timeout, configure the method call using the `timeout` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().timeout(Duration.ofSeconds(30)).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .timeout(Duration.ofSeconds(30))\n .build()\n```\n\n### Proxies\n\nTo route requests through a proxy, configure the client using the `proxy` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.net.InetSocketAddress\nimport java.net.Proxy\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(Proxy(\n Proxy.Type.HTTP, InetSocketAddress(\n "https://example.com", 8080\n )\n ))\n .build()\n```\n\n### Connection pooling\n\nTo customize the underlying OkHttp connection pool, configure the client using the `maxIdleConnections` and `keepAliveDuration` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `maxIdleConnections` is set, then `keepAliveDuration` must be set, and vice versa.\n .maxIdleConnections(10)\n .keepAliveDuration(Duration.ofMinutes(2))\n .build()\n```\n\nIf both options are unset, OkHttp\'s default connection pool settings are used.\n\n### HTTPS\n\n> [!NOTE]\n> Most applications should not call these methods, and instead use the system defaults. The defaults include\n> special optimizations that can be lost if the implementations are modified.\n\nTo configure how HTTPS connections are secured, configure the client using the `sslSocketFactory`, `trustManager`, and `hostnameVerifier` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `sslSocketFactory` is set, then `trustManager` must be set, and vice versa.\n .sslSocketFactory(yourSSLSocketFactory)\n .trustManager(yourTrustManager)\n .hostnameVerifier(yourHostnameVerifier)\n .build()\n```\n\n\n\n### Custom HTTP client\n\nThe SDK consists of three artifacts:\n- `lightspark-grid-kotlin-core`\n - Contains core SDK logic\n - Does not depend on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClient.kt), [`LightsparkGridClientAsync`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsync.kt), [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt), and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), all of which can work with any HTTP client\n- `lightspark-grid-kotlin-client-okhttp`\n - Depends on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) and [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), which provide a way to construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), respectively, using OkHttp\n- `lightspark-grid-kotlin`\n - Depends on and exposes the APIs of both `lightspark-grid-kotlin-core` and `lightspark-grid-kotlin-client-okhttp`\n - Does not have its own logic\n\nThis structure allows replacing the SDK\'s default HTTP client without pulling in unnecessary dependencies.\n\n#### Customized [`OkHttpClient`](https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html)\n\n> [!TIP]\n> Try the available [network options](#network-options) before replacing the default client.\n\nTo use a customized `OkHttpClient`:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Copy `lightspark-grid-kotlin-client-okhttp`\'s [`OkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/OkHttpClient.kt) class into your code and customize it\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your customized client\n\n### Completely custom HTTP client\n\nTo use a completely custom HTTP client:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Write a class that implements the [`HttpClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/http/HttpClient.kt) interface\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your new client class\n\n## Undocumented API functionality\n\nThe SDK is typed for convenient usage of the documented API. However, it also supports working with undocumented or not yet supported parts of the API.\n\n### Parameters\n\nTo set undocumented parameters, call the `putAdditionalHeader`, `putAdditionalQueryParam`, or `putAdditionalBodyProperty` methods on any `Params` class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .putAdditionalHeader("Secret-Header", "42")\n .putAdditionalQueryParam("secret_query_param", "42")\n .putAdditionalBodyProperty("secretProperty", JsonValue.from("42"))\n .build()\n```\n\nThese can be accessed on the built object later using the `_additionalHeaders()`, `_additionalQueryParams()`, and `_additionalBodyProperties()` methods.\n\nTo set undocumented parameters on _nested_ headers, query params, or body classes, call the `putAdditionalProperty` method on the nested class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.transferin.InternalAccountReference\nimport com.lightspark.grid.models.transferin.TransferInCreateParams\n\nval params: TransferInCreateParams = TransferInCreateParams.builder()\n .destination(InternalAccountReference.builder()\n .putAdditionalProperty("secretProperty", JsonValue.from("42"))\n .build())\n .build()\n```\n\nThese properties can be accessed on the nested built object later using the `_additionalProperties()` method.\n\nTo set a documented parameter or property to an undocumented or not yet supported _value_, pass a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) object to its setter:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(JsonValue.from(42))\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n```\n\nThe most straightforward way to create a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) is using its `from(...)` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\n\n// Create primitive JSON values\nval nullValue: JsonValue = JsonValue.from(null)\nval booleanValue: JsonValue = JsonValue.from(true)\nval numberValue: JsonValue = JsonValue.from(42)\nval stringValue: JsonValue = JsonValue.from("Hello World!")\n\n// Create a JSON array value equivalent to `["Hello", "World"]`\nval arrayValue: JsonValue = JsonValue.from(listOf(\n "Hello", "World"\n))\n\n// Create a JSON object value equivalent to `{ "a": 1, "b": 2 }`\nval objectValue: JsonValue = JsonValue.from(mapOf(\n "a" to 1, "b" to 2\n))\n\n// Create an arbitrarily nested JSON equivalent to:\n// {\n// "a": [1, 2],\n// "b": [3, 4]\n// }\nval complexValue: JsonValue = JsonValue.from(mapOf(\n "a" to listOf(\n 1, 2\n ), "b" to listOf(\n 3, 4\n )\n))\n```\n\nNormally a `Builder` class\'s `build` method will throw [`IllegalStateException`](https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html) if any required parameter or property is unset.\n\nTo forcibly omit a required parameter or property, pass [`JsonMissing`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.JsonMissing\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .destination(JsonMissing.of())\n .build()\n```\n\n### Response properties\n\nTo access undocumented response properties, call the `_additionalProperties()` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonBoolean\nimport com.lightspark.grid.core.JsonNull\nimport com.lightspark.grid.core.JsonNumber\nimport com.lightspark.grid.core.JsonValue\n\nval additionalProperties: Map = client.quotes().create(params)._additionalProperties()\nval secretPropertyValue: JsonValue = additionalProperties.get("secretProperty")\n\nval result = when (secretPropertyValue) {\n is JsonNull -> "It\'s null!"\n is JsonBoolean -> "It\'s a boolean!"\n is JsonNumber -> "It\'s a number!"\n // Other types include `JsonMissing`, `JsonString`, `JsonArray`, and `JsonObject`\n else -> "It\'s something else!"\n}\n```\n\nTo access a property\'s raw JSON value, which may be undocumented, call its `_` prefixed method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonField\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\n\nval destination: JsonField = client.quotes().create(params)._destination()\n\nif (destination.isMissing()) {\n // The property is absent from the JSON response\n} else if (destination.isNull()) {\n // The property was set to literal null\n} else {\n // Check if value was provided as a string\n // Other methods include `asNumber()`, `asBoolean()`, etc.\n val jsonString: String? = destination.asString();\n\n // Try to deserialize into a custom type\n val myObject: MyClass = destination.asUnknown()!!.convert(MyClass::class.java)\n}\n```\n\n### Response validation\n\nIn rare cases, the API may return a response that doesn\'t match the expected type. For example, the SDK may expect a property to contain a `String`, but the API could return something else.\n\nBy default, the SDK will not throw an exception in this case. It will throw [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt) only if you directly access the property.\n\nIf you would prefer to check that the response is completely well-typed upfront, then either call `validate()`:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(params).validate()\n```\n\nOr configure the method call to validate the response using the `responseValidation` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().responseValidation(true).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .responseValidation(true)\n .build()\n```\n\n## FAQ\n\n### Why don\'t you use plain `enum` classes?\n\nKotlin `enum` classes are not trivially [forwards compatible](https://www.stainless.com/blog/making-java-enums-forwards-compatible). Using them in the SDK could cause runtime exceptions if the API is updated to respond with a new enum value.\n\n### Why do you represent fields using `JsonField` instead of just plain `T`?\n\nUsing `JsonField` enables a few features:\n\n- Allowing usage of [undocumented API functionality](#undocumented-api-functionality)\n- Lazily [validating the API response against the expected shape](#response-validation)\n- Representing absent vs explicitly null values\n\n### Why don\'t you use [`data` classes](https://kotlinlang.org/docs/data-classes.html)?\n\nIt is not [backwards compatible to add new fields to a data class](https://kotlinlang.org/docs/api-guidelines-backward-compatibility.html#avoid-using-data-classes-in-your-api) and we don\'t want to introduce a breaking change every time we add a field to a class.\n\n### Why don\'t you use checked exceptions?\n\nChecked exceptions are widely considered a mistake in the Java programming language. In fact, they were omitted from Kotlin for this reason.\n\nChecked exceptions:\n\n- Are verbose to handle\n- Encourage error handling at the wrong level of abstraction, where nothing can be done about the error\n- Are tedious to propagate due to the [function coloring problem](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function)\n- Don\'t play well with lambdas (also due to the function coloring problem)\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-kotlin-sdk/issues) with questions, bugs, or suggestions.\n', + '# Lightspark Grid Kotlin API Library\n\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.lightspark.grid/lightspark-grid-kotlin)](https://central.sonatype.com/artifact/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n[![javadoc](https://javadoc.io/badge2/com.lightspark.grid/lightspark-grid-kotlin/0.0.1/javadoc.svg)](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n\n\nThe Lightspark Grid Kotlin SDK provides convenient access to the [Lightspark Grid REST API](grid.lightspark.com) from applications written in Kotlin.\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n\n\nKDocs are available on [javadoc.io](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1).\n\n\n\n## Installation\n\n\n\n### Gradle\n\n~~~kotlin\nimplementation("com.lightspark.grid:lightspark-grid-kotlin:0.0.1")\n~~~\n\n### Maven\n\n~~~xml\n\n com.lightspark.grid\n lightspark-grid-kotlin\n 0.0.1\n\n~~~\n\n\n\n## Requirements\n\nThis library requires Java 8 or later.\n\n## Usage\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\n## Client configuration\n\nConfigure the client using system properties or environment variables:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n```\n\nOr manually:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .username("My Username")\n .password("My Password")\n .build()\n```\n\nOr using a combination of the two approaches:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n // Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n // Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\n .fromEnv()\n .username("My Username")\n .build()\n```\n\nSee this table for the available options:\n\n| Setter | System property | Environment variable | Required | Default value |\n| ------------------ | ---------------------------------- | -------------------------- | -------- | ---------------------------------------------- |\n| `username` | `lightsparkgrid.gridClientId` | `GRID_CLIENT_ID` | true | - |\n| `password` | `lightsparkgrid.gridClientSecret` | `GRID_CLIENT_SECRET` | true | - |\n| `webhookSignature` | `lightsparkgrid.gridWebhookPubkey` | `GRID_WEBHOOK_PUBKEY` | false | - |\n| `baseUrl` | `lightsparkgrid.baseUrl` | `LIGHTSPARK_GRID_BASE_URL` | true | `"https://api.lightspark.com/grid/2025-10-13"` |\n\nSystem properties take precedence over environment variables.\n\n> [!TIP]\n> Don\'t create more than one client in the same application. Each client has a connection pool and\n> thread pools, which are more efficient to share between requests.\n\n### Modifying configuration\n\nTo temporarily use a modified client configuration, while reusing the same connection and thread pools, call `withOptions()` on any client or service:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\n\nval clientWithOptions: LightsparkGridClient = client.withOptions {\n it.baseUrl("https://example.com")\n it.maxRetries(42)\n}\n```\n\nThe `withOptions()` method does not affect the original client or service.\n\n## Requests and responses\n\nTo send a request to the Lightspark Grid API, build an instance of some `Params` class and pass it to the corresponding client method. When the response is received, it will be deserialized into an instance of a Kotlin class.\n\nFor example, `client.quotes().create(...)` should be called with an instance of `QuoteCreateParams`, and it will return an instance of `Quote`.\n\n## Immutability\n\nEach class in the SDK has an associated [builder](https://blogs.oracle.com/javamagazine/post/exploring-joshua-blochs-builder-design-pattern-in-java) or factory method for constructing it.\n\nEach class is [immutable](https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html) once constructed. If the class has an associated builder, then it has a `toBuilder()` method, which can be used to convert it back to a builder for making a modified copy.\n\nBecause each class is immutable, builder modification will _never_ affect already built class instances.\n\n## Asynchronous execution\n\nThe default client is synchronous. To switch to asynchronous execution, call the `async()` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.async().quotes().create(params)\n```\n\nOr create an asynchronous client from the beginning:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClientAsync\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClientAsync\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClientAsync = LightsparkGridOkHttpClientAsync.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\nThe asynchronous client supports the same options as the synchronous one, except most methods are [suspending](https://kotlinlang.org/docs/coroutines-guide.html).\n\n\n\n## File uploads\n\nThe SDK defines methods that accept files.\n\nTo upload a file, pass a [`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.nio.file.Paths\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(Paths.get("/path/to/file"))\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr an arbitrary [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(URL("https://example.com//path/to/file").openStream())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr a `ByteArray`:\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file("content".toByteArray())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nNote that when passing a non-`Path` its filename is unknown so it will not be included in the request. To manually set a filename, pass a [`MultipartField`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.MultipartField\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.io.InputStream\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(MultipartField.builder()\n .value(URL("https://example.com//path/to/file").openStream())\n .filename("/path/to/file")\n .build())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\n\n\n## Raw responses\n\nThe SDK defines methods that deserialize responses into instances of Kotlin classes. However, these methods don\'t provide access to the response headers, status code, or the raw response body.\n\nTo access this data, prefix any HTTP method call on a client or service with `withRawResponse()`:\n\n```kotlin\nimport com.lightspark.grid.core.http.Headers\nimport com.lightspark.grid.core.http.HttpResponseFor\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: HttpResponseFor = client.quotes().withRawResponse().create(params)\n\nval statusCode: Int = quote.statusCode()\nval headers: Headers = quote.headers()\n```\n\nYou can still deserialize the response into an instance of a Kotlin class if needed:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval parsedQuote: Quote = quote.parse()\n```\n\n## Error handling\n\nThe SDK throws custom unchecked exception types:\n\n- [`LightsparkGridServiceException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridServiceException.kt): Base class for HTTP errors. See this table for which exception subclass is thrown for each HTTP status code:\n\n | Status | Exception |\n | ------ | -------------------------------------------------- |\n | 400 | [`BadRequestException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/BadRequestException.kt) |\n | 401 | [`UnauthorizedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnauthorizedException.kt) |\n | 403 | [`PermissionDeniedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/PermissionDeniedException.kt) |\n | 404 | [`NotFoundException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/NotFoundException.kt) |\n | 422 | [`UnprocessableEntityException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnprocessableEntityException.kt) |\n | 429 | [`RateLimitException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/RateLimitException.kt) |\n | 5xx | [`InternalServerException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/InternalServerException.kt) |\n | others | [`UnexpectedStatusCodeException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnexpectedStatusCodeException.kt) |\n\n- [`LightsparkGridIoException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridIoException.kt): I/O networking errors.\n\n- [`LightsparkGridRetryableException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridRetryableException.kt): Generic error indicating a failure that could be retried by the client.\n\n- [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt): Failure to interpret successfully parsed data. For example, when accessing a property that\'s supposed to be required, but the API unexpectedly omitted it from the response.\n\n- [`LightsparkGridException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridException.kt): Base class for all exceptions. Most errors will result in one of the previously mentioned ones, but completely generic errors may be thrown using the base class.\n\n## Pagination\n\nThe SDK defines methods that return a paginated lists of results. It provides convenient ways to access the results either one page at a time or item-by-item across all pages.\n\n### Auto-pagination\n\nTo iterate through all results across all pages, use the `autoPager()` method, which automatically fetches more pages as needed.\n\nWhen using the synchronous client, the method returns a [`Sequence`](https://kotlinlang.org/docs/sequences.html)\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\n\nval page: CustomerListPage = client.customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\nWhen using the asynchronous client, the method returns a [`Flow`](https://kotlinlang.org/docs/flow.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPageAsync\n\nval page: CustomerListPageAsync = client.async().customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\n### Manual pagination\n\nTo access individual page items and manually request the next page, use the `items()`,\n`hasNextPage()`, and `nextPage()` methods:\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\nimport com.lightspark.grid.models.customers.CustomerOneOf\n\nval page: CustomerListPage = client.customers().list()\nwhile (true) {\n for (customer in page.items()) {\n println(customer)\n }\n\n if (!page.hasNextPage()) {\n break\n }\n\n page = page.nextPage()\n}\n```\n\n## Logging\n\nThe SDK uses the standard [OkHttp logging interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor).\n\nEnable logging by setting the `LIGHTSPARK_GRID_LOG` environment variable to `info`:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=debug\n```\n\n## ProGuard and R8\n\nAlthough the SDK uses reflection, it is still usable with [ProGuard](https://github.com/Guardsquare/proguard) and [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization) because `lightspark-grid-kotlin-core` is published with a [configuration file](lightspark-grid-kotlin-core/src/main/resources/META-INF/proguard/lightspark-grid-kotlin-core.pro) containing [keep rules](https://www.guardsquare.com/manual/configuration/usage).\n\nProGuard and R8 should automatically detect and use the published rules, but you can also manually copy the keep rules if necessary.\n\n\n\n\n\n## Jackson\n\nThe SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.18.2 by default.\n\nThe SDK throws an exception if it detects an incompatible Jackson version at runtime (e.g. if the default version was overridden in your Maven or Gradle config).\n\nIf the SDK threw an exception, but you\'re _certain_ the version is compatible, then disable the version check using the `checkJacksonVersionCompatibility` on [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt).\n\n> [!CAUTION]\n> We make no guarantee that the SDK works correctly when the Jackson version check is disabled.\n\nAlso note that there are bugs in older Jackson versions that can affect the SDK. We don\'t work around all Jackson bugs ([example](https://github.com/FasterXML/jackson-databind/issues/3240)) and expect users to upgrade Jackson for those instead.\n\n## Network options\n\n### Retries\n\nThe SDK automatically retries 2 times by default, with a short exponential backoff between requests.\n\nOnly the following error types are retried:\n- Connection errors (for example, due to a network connectivity problem)\n- 408 Request Timeout\n- 409 Conflict\n- 429 Rate Limit\n- 5xx Internal\n\nThe API may also explicitly instruct the SDK to retry or not retry a request.\n\nTo set a custom number of retries, configure the client using the `maxRetries` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .maxRetries(4)\n .build()\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default.\n\nTo set a custom timeout, configure the method call using the `timeout` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().timeout(Duration.ofSeconds(30)).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .timeout(Duration.ofSeconds(30))\n .build()\n```\n\n### Proxies\n\nTo route requests through a proxy, configure the client using the `proxy` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.net.InetSocketAddress\nimport java.net.Proxy\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(Proxy(\n Proxy.Type.HTTP, InetSocketAddress(\n "https://example.com", 8080\n )\n ))\n .build()\n```\n\n### Connection pooling\n\nTo customize the underlying OkHttp connection pool, configure the client using the `maxIdleConnections` and `keepAliveDuration` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `maxIdleConnections` is set, then `keepAliveDuration` must be set, and vice versa.\n .maxIdleConnections(10)\n .keepAliveDuration(Duration.ofMinutes(2))\n .build()\n```\n\nIf both options are unset, OkHttp\'s default connection pool settings are used.\n\n### HTTPS\n\n> [!NOTE]\n> Most applications should not call these methods, and instead use the system defaults. The defaults include\n> special optimizations that can be lost if the implementations are modified.\n\nTo configure how HTTPS connections are secured, configure the client using the `sslSocketFactory`, `trustManager`, and `hostnameVerifier` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `sslSocketFactory` is set, then `trustManager` must be set, and vice versa.\n .sslSocketFactory(yourSSLSocketFactory)\n .trustManager(yourTrustManager)\n .hostnameVerifier(yourHostnameVerifier)\n .build()\n```\n\n\n\n### Custom HTTP client\n\nThe SDK consists of three artifacts:\n- `lightspark-grid-kotlin-core`\n - Contains core SDK logic\n - Does not depend on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClient.kt), [`LightsparkGridClientAsync`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsync.kt), [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt), and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), all of which can work with any HTTP client\n- `lightspark-grid-kotlin-client-okhttp`\n - Depends on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) and [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), which provide a way to construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), respectively, using OkHttp\n- `lightspark-grid-kotlin`\n - Depends on and exposes the APIs of both `lightspark-grid-kotlin-core` and `lightspark-grid-kotlin-client-okhttp`\n - Does not have its own logic\n\nThis structure allows replacing the SDK\'s default HTTP client without pulling in unnecessary dependencies.\n\n#### Customized [`OkHttpClient`](https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html)\n\n> [!TIP]\n> Try the available [network options](#network-options) before replacing the default client.\n\nTo use a customized `OkHttpClient`:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Copy `lightspark-grid-kotlin-client-okhttp`\'s [`OkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/OkHttpClient.kt) class into your code and customize it\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your customized client\n\n### Completely custom HTTP client\n\nTo use a completely custom HTTP client:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Write a class that implements the [`HttpClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/http/HttpClient.kt) interface\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your new client class\n\n## Undocumented API functionality\n\nThe SDK is typed for convenient usage of the documented API. However, it also supports working with undocumented or not yet supported parts of the API.\n\n### Parameters\n\nTo set undocumented parameters, call the `putAdditionalHeader`, `putAdditionalQueryParam`, or `putAdditionalBodyProperty` methods on any `Params` class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .putAdditionalHeader("Secret-Header", "42")\n .putAdditionalQueryParam("secret_query_param", "42")\n .putAdditionalBodyProperty("secretProperty", JsonValue.from("42"))\n .build()\n```\n\nThese can be accessed on the built object later using the `_additionalHeaders()`, `_additionalQueryParams()`, and `_additionalBodyProperties()` methods.\n\nTo set undocumented parameters on _nested_ headers, query params, or body classes, call the `putAdditionalProperty` method on the nested class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.transferin.InternalAccountReference\nimport com.lightspark.grid.models.transferin.TransferInCreateParams\n\nval params: TransferInCreateParams = TransferInCreateParams.builder()\n .destination(InternalAccountReference.builder()\n .putAdditionalProperty("secretProperty", JsonValue.from("42"))\n .build())\n .build()\n```\n\nThese properties can be accessed on the nested built object later using the `_additionalProperties()` method.\n\nTo set a documented parameter or property to an undocumented or not yet supported _value_, pass a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) object to its setter:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(JsonValue.from(42))\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n```\n\nThe most straightforward way to create a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) is using its `from(...)` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\n\n// Create primitive JSON values\nval nullValue: JsonValue = JsonValue.from(null)\nval booleanValue: JsonValue = JsonValue.from(true)\nval numberValue: JsonValue = JsonValue.from(42)\nval stringValue: JsonValue = JsonValue.from("Hello World!")\n\n// Create a JSON array value equivalent to `["Hello", "World"]`\nval arrayValue: JsonValue = JsonValue.from(listOf(\n "Hello", "World"\n))\n\n// Create a JSON object value equivalent to `{ "a": 1, "b": 2 }`\nval objectValue: JsonValue = JsonValue.from(mapOf(\n "a" to 1, "b" to 2\n))\n\n// Create an arbitrarily nested JSON equivalent to:\n// {\n// "a": [1, 2],\n// "b": [3, 4]\n// }\nval complexValue: JsonValue = JsonValue.from(mapOf(\n "a" to listOf(\n 1, 2\n ), "b" to listOf(\n 3, 4\n )\n))\n```\n\nNormally a `Builder` class\'s `build` method will throw [`IllegalStateException`](https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html) if any required parameter or property is unset.\n\nTo forcibly omit a required parameter or property, pass [`JsonMissing`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.JsonMissing\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .destination(JsonMissing.of())\n .build()\n```\n\n### Response properties\n\nTo access undocumented response properties, call the `_additionalProperties()` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonBoolean\nimport com.lightspark.grid.core.JsonNull\nimport com.lightspark.grid.core.JsonNumber\nimport com.lightspark.grid.core.JsonValue\n\nval additionalProperties: Map = client.quotes().create(params)._additionalProperties()\nval secretPropertyValue: JsonValue = additionalProperties.get("secretProperty")\n\nval result = when (secretPropertyValue) {\n is JsonNull -> "It\'s null!"\n is JsonBoolean -> "It\'s a boolean!"\n is JsonNumber -> "It\'s a number!"\n // Other types include `JsonMissing`, `JsonString`, `JsonArray`, and `JsonObject`\n else -> "It\'s something else!"\n}\n```\n\nTo access a property\'s raw JSON value, which may be undocumented, call its `_` prefixed method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonField\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\n\nval destination: JsonField = client.quotes().create(params)._destination()\n\nif (destination.isMissing()) {\n // The property is absent from the JSON response\n} else if (destination.isNull()) {\n // The property was set to literal null\n} else {\n // Check if value was provided as a string\n // Other methods include `asNumber()`, `asBoolean()`, etc.\n val jsonString: String? = destination.asString();\n\n // Try to deserialize into a custom type\n val myObject: MyClass = destination.asUnknown()!!.convert(MyClass::class.java)\n}\n```\n\n### Response validation\n\nIn rare cases, the API may return a response that doesn\'t match the expected type. For example, the SDK may expect a property to contain a `String`, but the API could return something else.\n\nBy default, the SDK will not throw an exception in this case. It will throw [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt) only if you directly access the property.\n\nValidating the response is _not_ forwards compatible with new types from the API for existing fields.\n\nIf you would still prefer to check that the response is completely well-typed upfront, then either call `validate()`:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(params).validate()\n```\n\nOr configure the method call to validate the response using the `responseValidation` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().responseValidation(true).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .responseValidation(true)\n .build()\n```\n\n## FAQ\n\n### Why don\'t you use plain `enum` classes?\n\nKotlin `enum` classes are not trivially [forwards compatible](https://www.stainless.com/blog/making-java-enums-forwards-compatible). Using them in the SDK could cause runtime exceptions if the API is updated to respond with a new enum value.\n\n### Why do you represent fields using `JsonField` instead of just plain `T`?\n\nUsing `JsonField` enables a few features:\n\n- Allowing usage of [undocumented API functionality](#undocumented-api-functionality)\n- Lazily [validating the API response against the expected shape](#response-validation)\n- Representing absent vs explicitly null values\n\n### Why don\'t you use [`data` classes](https://kotlinlang.org/docs/data-classes.html)?\n\nIt is not [backwards compatible to add new fields to a data class](https://kotlinlang.org/docs/api-guidelines-backward-compatibility.html#avoid-using-data-classes-in-your-api) and we don\'t want to introduce a breaking change every time we add a field to a class.\n\n### Why don\'t you use checked exceptions?\n\nChecked exceptions are widely considered a mistake in the Java programming language. In fact, they were omitted from Kotlin for this reason.\n\nChecked exceptions:\n\n- Are verbose to handle\n- Encourage error handling at the wrong level of abstraction, where nothing can be done about the error\n- Are tedious to propagate due to the [function coloring problem](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function)\n- Don\'t play well with lambdas (also due to the function coloring problem)\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-kotlin-sdk/issues) with questions, bugs, or suggestions.\n', }, { language: 'python', From 709cf53cf6c8e4224698fdbe12227aaa26564662 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 17:18:00 +0000 Subject: [PATCH 15/26] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 330cf25..c49f5fa 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-2f7ff3f07f68c1c371335b62bf086d9cea5b9c89c970de728863c32d34a3f866.yml -openapi_spec_hash: cbcdb26824936adbf4c07ea120328908 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-89c2756a9ad8f88bba7ea1ceb7af8474839bb63075a94ecd0ec59e3768bbb620.yml +openapi_spec_hash: a64b2dd20132dcf509d340f3d07a6e60 config_hash: ed09c0afe747c9c6bc0beb25176b1409 From 1eedd88be81fa1bbf8defcba7479d29afc6d430c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 17:24:28 +0000 Subject: [PATCH 16/26] docs(api): clarify nickname validation in auth credentials --- .stats.yml | 6 +- api.md | 51 +-- packages/mcp-server/src/code-tool-worker.ts | 22 +- packages/mcp-server/src/local-docs-search.ts | 332 +++++++++--------- packages/mcp-server/src/methods.ts | 78 ++-- scripts/detect-breaking-changes | 2 +- src/client.ts | 10 +- src/resources/agents/agents.ts | 248 +++++++------ src/resources/agents/device-codes.ts | 66 ++-- src/resources/agents/index.ts | 23 +- src/resources/agents/me/external-accounts.ts | 96 +++-- src/resources/agents/me/index.ts | 18 +- src/resources/agents/me/me.ts | 192 +++++----- src/resources/agents/transactions.ts | 5 - src/resources/auth/credentials.ts | 8 +- src/resources/index.ts | 5 +- tests/api-resources/agents/agents.test.ts | 8 +- .../api-resources/agents/device-codes.test.ts | 8 +- .../agents/me/external-accounts.test.ts | 62 ++-- tests/api-resources/agents/me/me.test.ts | 74 ++-- 20 files changed, 681 insertions(+), 633 deletions(-) delete mode 100644 src/resources/agents/transactions.ts diff --git a/.stats.yml b/.stats.yml index c49f5fa..44cbbd5 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-89c2756a9ad8f88bba7ea1ceb7af8474839bb63075a94ecd0ec59e3768bbb620.yml -openapi_spec_hash: a64b2dd20132dcf509d340f3d07a6e60 -config_hash: ed09c0afe747c9c6bc0beb25176b1409 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-cc69557abbd885ca6d1051cc1814e429e87c0150608e8c87447aaa38f5bb8d58.yml +openapi_spec_hash: a8ea5774318217dcf62b7b415e1315ca +config_hash: 45b0e0c4ce3cd07831ec238d208eddc5 diff --git a/api.md b/api.md index 9da41b4..4b20e34 100644 --- a/api.md +++ b/api.md @@ -532,7 +532,7 @@ Types: - AgentRetrieveResponse - AgentUpdateResponse - AgentListResponse -- AgentListApprovalsResponse +- AgentRetrieveApprovalsResponse - AgentUpdatePolicyResponse Methods: @@ -542,23 +542,24 @@ Methods: - client.agents.update(agentID, { ...params }) -> AgentUpdateResponse - client.agents.list({ ...params }) -> AgentListResponsesDefaultPagination - client.agents.delete(agentID) -> void -- client.agents.listApprovals({ ...params }) -> AgentListApprovalsResponsesDefaultPagination +- client.agents.retrieveApprovals({ ...params }) -> AgentRetrieveApprovalsResponse - client.agents.updatePolicy(agentID, { ...params }) -> AgentUpdatePolicyResponse ## Me Types: -- MeRetrieveResponse -- MeCreateTransferInResponse -- MeCreateTransferOutResponse +- MeListResponse +- MeRetrieveInternalAccountsResponse +- MeTransferInResponse +- MeTransferOutResponse Methods: -- client.agents.me.retrieve() -> MeRetrieveResponse -- client.agents.me.createTransferIn({ ...params }) -> MeCreateTransferInResponse -- client.agents.me.createTransferOut({ ...params }) -> MeCreateTransferOutResponse -- client.agents.me.listInternalAccounts({ ...params }) -> InternalAccountsDefaultPagination +- client.agents.me.list() -> MeListResponse +- client.agents.me.retrieveInternalAccounts({ ...params }) -> MeRetrieveInternalAccountsResponse +- client.agents.me.transferIn({ ...params }) -> MeTransferInResponse +- client.agents.me.transferOut({ ...params }) -> MeTransferOutResponse ### Transactions @@ -579,15 +580,6 @@ Methods: - client.agents.me.quotes.retrieve(quoteID) -> Quote - client.agents.me.quotes.execute(quoteID, { ...params }) -> QuoteExecuteResponse -### ExternalAccounts - -Methods: - -- client.agents.me.externalAccounts.retrieve(externalAccountID) -> ExternalAccount -- client.agents.me.externalAccounts.list({ ...params }) -> ExternalAccountsDefaultPagination -- client.agents.me.externalAccounts.delete(externalAccountID) -> void -- client.agents.me.externalAccounts.add({ ...params }) -> ExternalAccount - ### Actions Types: @@ -600,21 +592,32 @@ Methods: - client.agents.me.actions.retrieve(actionID) -> ActionRetrieveResponse - client.agents.me.actions.list({ ...params }) -> ActionListResponsesDefaultPagination +### ExternalAccounts + +Types: + +- ExternalAccountRetrieveExternalAccountsResponse + +Methods: + +- client.agents.me.externalAccounts.retrieve(externalAccountID) -> ExternalAccount +- client.agents.me.externalAccounts.delete(externalAccountID) -> void +- client.agents.me.externalAccounts.externalAccounts({ ...params }) -> ExternalAccount +- client.agents.me.externalAccounts.retrieveExternalAccounts({ ...params }) -> ExternalAccountRetrieveExternalAccountsResponse + ## DeviceCodes Types: -- DeviceCodeGetStatusResponse +- DeviceCodeDeviceCodesResponse - DeviceCodeRedeemResponse -- DeviceCodeRegenerateResponse +- DeviceCodeRetrieveStatusResponse Methods: -- client.agents.deviceCodes.getStatus(code) -> DeviceCodeGetStatusResponse +- client.agents.deviceCodes.deviceCodes(agentID) -> DeviceCodeDeviceCodesResponse - client.agents.deviceCodes.redeem(code) -> DeviceCodeRedeemResponse -- client.agents.deviceCodes.regenerate(agentID) -> DeviceCodeRegenerateResponse - -## Transactions +- client.agents.deviceCodes.retrieveStatus(code) -> DeviceCodeRetrieveStatusResponse ## Actions diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts index 6471ab4..57b1dc2 100644 --- a/packages/mcp-server/src/code-tool-worker.ts +++ b/packages/mcp-server/src/code-tool-worker.ts @@ -179,28 +179,28 @@ const fuse = new Fuse( 'client.agents.create', 'client.agents.delete', 'client.agents.list', - 'client.agents.listApprovals', 'client.agents.retrieve', + 'client.agents.retrieveApprovals', 'client.agents.update', 'client.agents.updatePolicy', - 'client.agents.me.createTransferIn', - 'client.agents.me.createTransferOut', - 'client.agents.me.listInternalAccounts', - 'client.agents.me.retrieve', + 'client.agents.me.list', + 'client.agents.me.retrieveInternalAccounts', + 'client.agents.me.transferIn', + 'client.agents.me.transferOut', 'client.agents.me.transactions.list', 'client.agents.me.transactions.retrieve', 'client.agents.me.quotes.create', 'client.agents.me.quotes.execute', 'client.agents.me.quotes.retrieve', - 'client.agents.me.externalAccounts.add', - 'client.agents.me.externalAccounts.delete', - 'client.agents.me.externalAccounts.list', - 'client.agents.me.externalAccounts.retrieve', 'client.agents.me.actions.list', 'client.agents.me.actions.retrieve', - 'client.agents.deviceCodes.getStatus', + 'client.agents.me.externalAccounts.delete', + 'client.agents.me.externalAccounts.externalAccounts', + 'client.agents.me.externalAccounts.retrieve', + 'client.agents.me.externalAccounts.retrieveExternalAccounts', + 'client.agents.deviceCodes.deviceCodes', 'client.agents.deviceCodes.redeem', - 'client.agents.deviceCodes.regenerate', + 'client.agents.deviceCodes.retrieveStatus', 'client.agents.actions.approve', 'client.agents.actions.reject', ], diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 4cb933d..2e695c0 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -2668,14 +2668,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'list_approvals', + name: 'retrieve_approvals', endpoint: '/agents/approvals', httpMethod: 'get', summary: 'List agent transaction approval requests', description: 'Retrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n', - stainlessPath: '(resource) agents > (method) list_approvals', - qualified: 'client.agents.listApprovals', + stainlessPath: '(resource) agents > (method) retrieve_approvals', + qualified: 'client.agents.retrieveApprovals', params: [ 'agentId?: string;', 'cursor?: string;', @@ -2686,24 +2686,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'startDate?: string;', ], response: - "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + "{ data: { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: object; rejectionReason?: string; transaction?: incoming_transaction | outgoing_transaction; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", markdown: - "## list_approvals\n\n`client.agents.listApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse);\n}\n```", + "## retrieve_approvals\n\n`client.agents.retrieveApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { data: object[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ data: { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: object; rejectionReason?: string; transaction?: incoming_transaction | outgoing_transaction; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }; rejectionReason?: string; transaction?: { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.retrieveApprovals();\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.listApprovals', + method: 'client.agents.retrieveApprovals', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.retrieveApprovals();\n\nconsole.log(response.data);", }, python: { - method: 'agents.list_approvals', + method: 'agents.retrieve_approvals', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\npage = client.agents.list_approvals()\npage = page.data[0]\nprint(page.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.retrieve_approvals()\nprint(response.data)', }, kotlin: { - method: 'agents().listApprovals', + method: 'agents().retrieveApprovals', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentListApprovalsPage\nimport com.lightspark.grid.models.agents.AgentListApprovalsParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: AgentListApprovalsPage = client.agents().listApprovals()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentRetrieveApprovalsParams\nimport com.lightspark.grid.models.agents.AgentRetrieveApprovalsResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: AgentRetrieveApprovalsResponse = client.agents().retrieveApprovals()\n}', }, http: { example: @@ -2858,33 +2858,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'retrieve', + name: 'list', endpoint: '/agents/me', httpMethod: 'get', summary: 'Get current agent', description: "Retrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n", - stainlessPath: '(resource) agents.me > (method) retrieve', - qualified: 'client.agents.me.retrieve', + stainlessPath: '(resource) agents.me > (method) list', + qualified: 'client.agents.me.list', response: "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## retrieve\n\n`client.agents.me.retrieve(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me);\n```", + "## list\n\n`client.agents.me.list(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst mes = await client.agents.me.list();\n\nconsole.log(mes);\n```", perLanguage: { typescript: { - method: 'client.agents.me.retrieve', + method: 'client.agents.me.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst mes = await client.agents.me.list();\n\nconsole.log(mes.id);", }, python: { - method: 'agents.me.retrieve', + method: 'agents.me.list', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nme = client.agents.me.retrieve()\nprint(me.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nmes = client.agents.me.list()\nprint(mes.id)', }, kotlin: { - method: 'agents().me().retrieve', + method: 'agents().me().list', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeRetrieveParams\nimport com.lightspark.grid.models.agents.me.MeRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val me: MeRetrieveResponse = client.agents().me().retrieve()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeListParams\nimport com.lightspark.grid.models.agents.me.MeListResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val mes: MeListResponse = client.agents().me().list()\n}', }, http: { example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me', @@ -2892,14 +2892,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'create_transfer_in', + name: 'transfer_in', endpoint: '/agents/me/transfer-in', httpMethod: 'post', summary: 'Create a transfer-in', description: "Transfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n", - stainlessPath: '(resource) agents.me > (method) create_transfer_in', - qualified: 'client.agents.me.createTransferIn', + stainlessPath: '(resource) agents.me > (method) transfer_in', + qualified: 'client.agents.me.transferIn', params: [ 'destination: { accountId: string; };', 'source: { accountId: string; };', @@ -2909,22 +2909,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", + "## transfer_in\n\n`client.agents.me.transferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.me.createTransferIn', + method: 'client.agents.me.transferIn', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", }, python: { - method: 'agents.me.create_transfer_in', + method: 'agents.me.transfer_in', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', }, kotlin: { - method: 'agents().me().createTransferIn', + method: 'agents().me().transferIn', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferInParams = MeCreateTransferInParams.builder()\n .destination(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .source(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val response: MeCreateTransferInResponse = client.agents().me().createTransferIn(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeTransferInParams\nimport com.lightspark.grid.models.agents.me.MeTransferInResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeTransferInParams = MeTransferInParams.builder()\n .destination(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .source(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val response: MeTransferInResponse = client.agents().me().transferIn(params)\n}', }, http: { example: @@ -2933,14 +2933,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'create_transfer_out', + name: 'transfer_out', endpoint: '/agents/me/transfer-out', httpMethod: 'post', summary: 'Create a transfer-out', description: "Transfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n", - stainlessPath: '(resource) agents.me > (method) create_transfer_out', - qualified: 'client.agents.me.createTransferOut', + stainlessPath: '(resource) agents.me > (method) transfer_out', + qualified: 'client.agents.me.transferOut', params: [ 'destination: { accountId: string; };', 'source: { accountId: string; };', @@ -2950,22 +2950,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", + "## transfer_out\n\n`client.agents.me.transferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.me.createTransferOut', + method: 'client.agents.me.transferOut', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", }, python: { - method: 'agents.me.create_transfer_out', + method: 'agents.me.transfer_out', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', }, kotlin: { - method: 'agents().me().createTransferOut', + method: 'agents().me().transferOut', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferOutParams = MeCreateTransferOutParams.builder()\n .destination(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .source(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .build()\n val response: MeCreateTransferOutResponse = client.agents().me().createTransferOut(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeTransferOutParams\nimport com.lightspark.grid.models.agents.me.MeTransferOutResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeTransferOutParams = MeTransferOutParams.builder()\n .destination(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .source(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .build()\n val response: MeTransferOutResponse = client.agents().me().transferOut(params)\n}', }, http: { example: @@ -2974,14 +2974,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'list_internal_accounts', + name: 'retrieve_internal_accounts', endpoint: '/agents/me/internal-accounts', httpMethod: 'get', summary: "List agent's internal accounts", description: "Retrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n", - stainlessPath: '(resource) agents.me > (method) list_internal_accounts', - qualified: 'client.agents.me.listInternalAccounts', + stainlessPath: '(resource) agents.me > (method) retrieve_internal_accounts', + qualified: 'client.agents.me.retrieveInternalAccounts', params: [ 'currency?: string;', 'cursor?: string;', @@ -2989,24 +2989,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ "type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET';", ], response: - "{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }", + "{ data: { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", markdown: - "## list_internal_accounts\n\n`client.agents.me.listInternalAccounts(currency?: string, cursor?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**get** `/agents/me/internal-accounts`\n\nRetrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for platform-managed holding accounts.\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount);\n}\n```", + "## retrieve_internal_accounts\n\n`client.agents.me.retrieveInternalAccounts(currency?: string, cursor?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { data: internal_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/agents/me/internal-accounts`\n\nRetrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for platform-managed holding accounts.\n\n### Returns\n\n- `{ data: { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.retrieveInternalAccounts();\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.me.listInternalAccounts', + method: 'client.agents.me.retrieveInternalAccounts', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.retrieveInternalAccounts();\n\nconsole.log(response.data);", }, python: { - method: 'agents.me.list_internal_accounts', + method: 'agents.me.retrieve_internal_accounts', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.list_internal_accounts()\npage = page.data[0]\nprint(page.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.retrieve_internal_accounts()\nprint(response.data)', }, kotlin: { - method: 'agents().me().listInternalAccounts', + method: 'agents().me().retrieveInternalAccounts', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsPage\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: MeListInternalAccountsPage = client.agents().me().listInternalAccounts()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeRetrieveInternalAccountsParams\nimport com.lightspark.grid.models.agents.me.MeRetrieveInternalAccountsResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: MeRetrieveInternalAccountsResponse = client.agents().me().retrieveInternalAccounts()\n}', }, http: { example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/internal-accounts', @@ -3215,33 +3215,107 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, { name: 'list', + endpoint: '/agents/me/actions', + httpMethod: 'get', + summary: "List agent's own actions", + description: + 'Retrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n', + stainlessPath: '(resource) agents.me.actions > (method) list', + qualified: 'client.agents.me.actions.list', + params: [ + 'cursor?: string;', + 'limit?: number;', + "status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED';", + ], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.actions.list', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", + }, + python: { + method: 'agents.me.actions.list', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.actions.list()\npage = page.data[0]\nprint(page.id)', + }, + kotlin: { + method: 'agents().me().actions().list', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionListPage\nimport com.lightspark.grid.models.agents.me.actions.ActionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ActionListPage = client.agents().me().actions().list()\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions', + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/me/actions/{actionId}', + httpMethod: 'get', + summary: 'Get an agent action', + description: + 'Retrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n', + stainlessPath: '(resource) agents.me.actions > (method) retrieve', + qualified: 'client.agents.me.actions.retrieve', + params: ['actionId: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.actions.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", + }, + python: { + method: 'agents.me.actions.retrieve', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', + }, + kotlin: { + method: 'agents().me().actions().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val action: ActionRetrieveResponse = client.agents().me().actions().retrieve("actionId")\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions/$ACTION_ID', + }, + }, + }, + { + name: 'retrieve_external_accounts', endpoint: '/agents/me/external-accounts', httpMethod: 'get', summary: 'List agent external accounts', description: "Retrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n", - stainlessPath: '(resource) agents.me.external_accounts > (method) list', - qualified: 'client.agents.me.externalAccounts.list', + stainlessPath: '(resource) agents.me.external_accounts > (method) retrieve_external_accounts', + qualified: 'client.agents.me.externalAccounts.retrieveExternalAccounts', params: ['currency?: string;', 'cursor?: string;', 'limit?: number;'], response: - "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", + "{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", markdown: - "## list\n\n`client.agents.me.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/agents/me/external-accounts`\n\nRetrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", + "## retrieve_external_accounts\n\n`client.agents.me.externalAccounts.retrieveExternalAccounts(currency?: string, cursor?: string, limit?: number): { data: external_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/agents/me/external-accounts`\n\nRetrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.externalAccounts.retrieveExternalAccounts();\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.me.externalAccounts.list', + method: 'client.agents.me.externalAccounts.retrieveExternalAccounts', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.externalAccounts.retrieveExternalAccounts();\n\nconsole.log(response.data);", }, python: { - method: 'agents.me.external_accounts.list', + method: 'agents.me.external_accounts.retrieve_external_accounts', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.external_accounts.list()\npage = page.data[0]\nprint(page.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.external_accounts.retrieve_external_accounts()\nprint(response.data)', }, kotlin: { - method: 'agents().me().externalAccounts().list', + method: 'agents().me().externalAccounts().retrieveExternalAccounts', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListPage\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ExternalAccountListPage = client.agents().me().externalAccounts().list()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountRetrieveExternalAccountsParams\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountRetrieveExternalAccountsResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: ExternalAccountRetrieveExternalAccountsResponse = client.agents().me().externalAccounts().retrieveExternalAccounts()\n}', }, http: { example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts', @@ -3249,14 +3323,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'add', + name: 'external_accounts', endpoint: '/agents/me/external-accounts', httpMethod: 'post', summary: 'Add an external account', description: "Register a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n", - stainlessPath: '(resource) agents.me.external_accounts > (method) add', - qualified: 'client.agents.me.externalAccounts.add', + stainlessPath: '(resource) agents.me.external_accounts > (method) external_accounts', + qualified: 'client.agents.me.externalAccounts.externalAccounts', params: [ "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', @@ -3267,22 +3341,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## add\n\n`client.agents.me.externalAccounts.add(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/agents/me/external-accounts`\n\nRegister a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## external_accounts\n\n`client.agents.me.externalAccounts.externalAccounts(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/agents/me/external-accounts`\n\nRegister a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.externalAccounts({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { - method: 'client.agents.me.externalAccounts.add', + method: 'client.agents.me.externalAccounts.externalAccounts', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountType: 'USD_ACCOUNT',\n accountNumber: '12345678901',\n routingNumber: '123456789',\n beneficiary: {\n beneficiaryType: 'INDIVIDUAL',\n fullName: 'John Doe',\n birthDate: '1990-01-15',\n nationality: 'US',\n address: {\n line1: '123 Main Street',\n city: 'San Francisco',\n state: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n },\n },\n currency: 'USD',\n});\n\nconsole.log(externalAccount.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.externalAccounts({\n accountInfo: {\n accountType: 'USD_ACCOUNT',\n accountNumber: '12345678901',\n routingNumber: '123456789',\n beneficiary: {\n beneficiaryType: 'INDIVIDUAL',\n fullName: 'John Doe',\n birthDate: '1990-01-15',\n nationality: 'US',\n address: {\n line1: '123 Main Street',\n city: 'San Francisco',\n state: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n },\n },\n currency: 'USD',\n});\n\nconsole.log(externalAccount.id);", }, python: { - method: 'agents.me.external_accounts.add', + method: 'agents.me.external_accounts.external_accounts', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.add(\n account_info={\n "account_type": "USD_ACCOUNT",\n "account_number": "12345678901",\n "routing_number": "123456789",\n "beneficiary": {\n "beneficiary_type": "INDIVIDUAL",\n "full_name": "John Doe",\n "birth_date": "1990-01-15",\n "nationality": "US",\n "address": {\n "line1": "123 Main Street",\n "city": "San Francisco",\n "state": "CA",\n "postal_code": "94105",\n "country": "US",\n },\n },\n },\n currency="USD",\n)\nprint(external_account.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.external_accounts(\n account_info={\n "account_type": "USD_ACCOUNT",\n "account_number": "12345678901",\n "routing_number": "123456789",\n "beneficiary": {\n "beneficiary_type": "INDIVIDUAL",\n "full_name": "John Doe",\n "birth_date": "1990-01-15",\n "nationality": "US",\n "address": {\n "line1": "123 Main Street",\n "city": "San Francisco",\n "state": "CA",\n "postal_code": "94105",\n "country": "US",\n },\n },\n },\n currency="USD",\n)\nprint(external_account.id)', }, kotlin: { - method: 'agents().me().externalAccounts().add', + method: 'agents().me().externalAccounts().externalAccounts', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.UsdExternalAccountCreateInfo\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreate\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ExternalAccountCreate = ExternalAccountCreate.builder()\n .accountInfo(UsdExternalAccountCreateInfo.builder()\n .accountNumber("12345678901")\n .accountType(UsdExternalAccountCreateInfo.AccountType.USD_ACCOUNT)\n .individualBeneficiary("John Doe")\n .routingNumber("123456789")\n .build())\n .currency("USD")\n .build()\n val externalAccount: ExternalAccount = client.agents().me().externalAccounts().add(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.UsdExternalAccountCreateInfo\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreate\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ExternalAccountCreate = ExternalAccountCreate.builder()\n .accountInfo(UsdExternalAccountCreateInfo.builder()\n .accountNumber("12345678901")\n .accountType(UsdExternalAccountCreateInfo.AccountType.USD_ACCOUNT)\n .individualBeneficiary("John Doe")\n .routingNumber("123456789")\n .build())\n .currency("USD")\n .build()\n val externalAccount: ExternalAccount = client.agents().me().externalAccounts().externalAccounts(params)\n}', }, http: { example: @@ -3361,107 +3435,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'list', - endpoint: '/agents/me/actions', - httpMethod: 'get', - summary: "List agent's own actions", - description: - 'Retrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n', - stainlessPath: '(resource) agents.me.actions > (method) list', - qualified: 'client.agents.me.actions.list', - params: [ - 'cursor?: string;', - 'limit?: number;', - "status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED';", - ], - response: - "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", - markdown: - "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", - perLanguage: { - typescript: { - method: 'client.agents.me.actions.list', - example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", - }, - python: { - method: 'agents.me.actions.list', - example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.actions.list()\npage = page.data[0]\nprint(page.id)', - }, - kotlin: { - method: 'agents().me().actions().list', - example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionListPage\nimport com.lightspark.grid.models.agents.me.actions.ActionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ActionListPage = client.agents().me().actions().list()\n}', - }, - http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions', - }, - }, - }, - { - name: 'retrieve', - endpoint: '/agents/me/actions/{actionId}', - httpMethod: 'get', - summary: 'Get an agent action', - description: - 'Retrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n', - stainlessPath: '(resource) agents.me.actions > (method) retrieve', - qualified: 'client.agents.me.actions.retrieve', - params: ['actionId: string;'], - response: - "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", - markdown: - "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", - perLanguage: { - typescript: { - method: 'client.agents.me.actions.retrieve', - example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", - }, - python: { - method: 'agents.me.actions.retrieve', - example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', - }, - kotlin: { - method: 'agents().me().actions().retrieve', - example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val action: ActionRetrieveResponse = client.agents().me().actions().retrieve("actionId")\n}', - }, - http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions/$ACTION_ID', - }, - }, - }, - { - name: 'regenerate', + name: 'device_codes', endpoint: '/agents/{agentId}/device-codes', httpMethod: 'post', summary: 'Regenerate a device code', description: 'Generate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n', - stainlessPath: '(resource) agents.device_codes > (method) regenerate', - qualified: 'client.agents.deviceCodes.regenerate', + stainlessPath: '(resource) agents.device_codes > (method) device_codes', + qualified: 'client.agents.deviceCodes.deviceCodes', params: ['agentId: string;'], response: '{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }', markdown: - "## regenerate\n\n`client.agents.deviceCodes.regenerate(agentId: string): { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n**post** `/agents/{agentId}/device-codes`\n\nGenerate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n - `agentId: string`\n - `code: string`\n - `expiresAt: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response);\n```", + "## device_codes\n\n`client.agents.deviceCodes.deviceCodes(agentId: string): { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n**post** `/agents/{agentId}/device-codes`\n\nGenerate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n - `agentId: string`\n - `code: string`\n - `expiresAt: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.deviceCodes('agentId');\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.deviceCodes.regenerate', + method: 'client.agents.deviceCodes.deviceCodes', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response.agentId);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.deviceCodes('agentId');\n\nconsole.log(response.agentId);", }, python: { - method: 'agents.device_codes.regenerate', + method: 'agents.device_codes.device_codes', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.regenerate(\n "agentId",\n)\nprint(response.agent_id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.device_codes(\n "agentId",\n)\nprint(response.agent_id)', }, kotlin: { - method: 'agents().deviceCodes().regenerate', + method: 'agents().deviceCodes().deviceCodes', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRegenerateResponse = client.agents().deviceCodes().regenerate("agentId")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeDeviceCodesParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeDeviceCodesResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeDeviceCodesResponse = client.agents().deviceCodes().deviceCodes("agentId")\n}', }, http: { example: @@ -3470,33 +3470,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'get_status', + name: 'retrieve_status', endpoint: '/agents/device-codes/{code}/status', httpMethod: 'get', summary: 'Get device code status', description: 'Check whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n', - stainlessPath: '(resource) agents.device_codes > (method) get_status', - qualified: 'client.agents.deviceCodes.getStatus', + stainlessPath: '(resource) agents.device_codes > (method) retrieve_status', + qualified: 'client.agents.deviceCodes.retrieveStatus', params: ['code: string;'], response: '{ code: string; redeemed: boolean; }', markdown: - "## get_status\n\n`client.agents.deviceCodes.getStatus(code: string): { code: string; redeemed: boolean; }`\n\n**get** `/agents/device-codes/{code}/status`\n\nCheck whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ code: string; redeemed: boolean; }`\n\n - `code: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response);\n```", + "## retrieve_status\n\n`client.agents.deviceCodes.retrieveStatus(code: string): { code: string; redeemed: boolean; }`\n\n**get** `/agents/device-codes/{code}/status`\n\nCheck whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ code: string; redeemed: boolean; }`\n\n - `code: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.retrieveStatus('code');\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.deviceCodes.getStatus', + method: 'client.agents.deviceCodes.retrieveStatus', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response.code);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.retrieveStatus('code');\n\nconsole.log(response.code);", }, python: { - method: 'agents.device_codes.get_status', + method: 'agents.device_codes.retrieve_status', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.get_status(\n "code",\n)\nprint(response.code)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.retrieve_status(\n "code",\n)\nprint(response.code)', }, kotlin: { - method: 'agents().deviceCodes().getStatus', + method: 'agents().deviceCodes().retrieveStatus', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeGetStatusResponse = client.agents().deviceCodes().getStatus("code")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRetrieveStatusParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRetrieveStatusResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRetrieveStatusResponse = client.agents().deviceCodes().retrieveStatus("code")\n}', }, http: { example: diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts index 95baf12..1166049 100644 --- a/packages/mcp-server/src/methods.ts +++ b/packages/mcp-server/src/methods.ts @@ -444,8 +444,8 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/{agentId}', }, { - clientCallName: 'client.agents.listApprovals', - fullyQualifiedName: 'agents.listApprovals', + clientCallName: 'client.agents.retrieveApprovals', + fullyQualifiedName: 'agents.retrieveApprovals', httpMethod: 'get', httpPath: '/agents/approvals', }, @@ -456,29 +456,29 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/{agentId}/policy', }, { - clientCallName: 'client.agents.me.retrieve', - fullyQualifiedName: 'agents.me.retrieve', + clientCallName: 'client.agents.me.list', + fullyQualifiedName: 'agents.me.list', httpMethod: 'get', httpPath: '/agents/me', }, { - clientCallName: 'client.agents.me.createTransferIn', - fullyQualifiedName: 'agents.me.createTransferIn', + clientCallName: 'client.agents.me.retrieveInternalAccounts', + fullyQualifiedName: 'agents.me.retrieveInternalAccounts', + httpMethod: 'get', + httpPath: '/agents/me/internal-accounts', + }, + { + clientCallName: 'client.agents.me.transferIn', + fullyQualifiedName: 'agents.me.transferIn', httpMethod: 'post', httpPath: '/agents/me/transfer-in', }, { - clientCallName: 'client.agents.me.createTransferOut', - fullyQualifiedName: 'agents.me.createTransferOut', + clientCallName: 'client.agents.me.transferOut', + fullyQualifiedName: 'agents.me.transferOut', httpMethod: 'post', httpPath: '/agents/me/transfer-out', }, - { - clientCallName: 'client.agents.me.listInternalAccounts', - fullyQualifiedName: 'agents.me.listInternalAccounts', - httpMethod: 'get', - httpPath: '/agents/me/internal-accounts', - }, { clientCallName: 'client.agents.me.transactions.retrieve', fullyQualifiedName: 'agents.me.transactions.retrieve', @@ -510,16 +510,22 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/me/quotes/{quoteId}/execute', }, { - clientCallName: 'client.agents.me.externalAccounts.retrieve', - fullyQualifiedName: 'agents.me.externalAccounts.retrieve', + clientCallName: 'client.agents.me.actions.retrieve', + fullyQualifiedName: 'agents.me.actions.retrieve', httpMethod: 'get', - httpPath: '/agents/me/external-accounts/{externalAccountId}', + httpPath: '/agents/me/actions/{actionId}', }, { - clientCallName: 'client.agents.me.externalAccounts.list', - fullyQualifiedName: 'agents.me.externalAccounts.list', + clientCallName: 'client.agents.me.actions.list', + fullyQualifiedName: 'agents.me.actions.list', httpMethod: 'get', - httpPath: '/agents/me/external-accounts', + httpPath: '/agents/me/actions', + }, + { + clientCallName: 'client.agents.me.externalAccounts.retrieve', + fullyQualifiedName: 'agents.me.externalAccounts.retrieve', + httpMethod: 'get', + httpPath: '/agents/me/external-accounts/{externalAccountId}', }, { clientCallName: 'client.agents.me.externalAccounts.delete', @@ -528,28 +534,22 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/me/external-accounts/{externalAccountId}', }, { - clientCallName: 'client.agents.me.externalAccounts.add', - fullyQualifiedName: 'agents.me.externalAccounts.add', + clientCallName: 'client.agents.me.externalAccounts.externalAccounts', + fullyQualifiedName: 'agents.me.externalAccounts.externalAccounts', httpMethod: 'post', httpPath: '/agents/me/external-accounts', }, { - clientCallName: 'client.agents.me.actions.retrieve', - fullyQualifiedName: 'agents.me.actions.retrieve', - httpMethod: 'get', - httpPath: '/agents/me/actions/{actionId}', - }, - { - clientCallName: 'client.agents.me.actions.list', - fullyQualifiedName: 'agents.me.actions.list', + clientCallName: 'client.agents.me.externalAccounts.retrieveExternalAccounts', + fullyQualifiedName: 'agents.me.externalAccounts.retrieveExternalAccounts', httpMethod: 'get', - httpPath: '/agents/me/actions', + httpPath: '/agents/me/external-accounts', }, { - clientCallName: 'client.agents.deviceCodes.getStatus', - fullyQualifiedName: 'agents.deviceCodes.getStatus', - httpMethod: 'get', - httpPath: '/agents/device-codes/{code}/status', + clientCallName: 'client.agents.deviceCodes.deviceCodes', + fullyQualifiedName: 'agents.deviceCodes.deviceCodes', + httpMethod: 'post', + httpPath: '/agents/{agentId}/device-codes', }, { clientCallName: 'client.agents.deviceCodes.redeem', @@ -558,10 +558,10 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/device-codes/{code}/redeem', }, { - clientCallName: 'client.agents.deviceCodes.regenerate', - fullyQualifiedName: 'agents.deviceCodes.regenerate', - httpMethod: 'post', - httpPath: '/agents/{agentId}/device-codes', + clientCallName: 'client.agents.deviceCodes.retrieveStatus', + fullyQualifiedName: 'agents.deviceCodes.retrieveStatus', + httpMethod: 'get', + httpPath: '/agents/device-codes/{code}/status', }, { clientCallName: 'client.agents.actions.approve', diff --git a/scripts/detect-breaking-changes b/scripts/detect-breaking-changes index 8e36678..901a420 100755 --- a/scripts/detect-breaking-changes +++ b/scripts/detect-breaking-changes @@ -39,8 +39,8 @@ TEST_PATHS=( tests/api-resources/agents/me/me.test.ts tests/api-resources/agents/me/transactions.test.ts tests/api-resources/agents/me/quotes.test.ts - tests/api-resources/agents/me/external-accounts.test.ts tests/api-resources/agents/me/actions.test.ts + tests/api-resources/agents/me/external-accounts.test.ts tests/api-resources/agents/device-codes.test.ts tests/api-resources/agents/actions.test.ts tests/index.test.ts diff --git a/src/client.ts b/src/client.ts index e1fdbb4..87edc0d 100644 --- a/src/client.ts +++ b/src/client.ts @@ -153,12 +153,11 @@ import { import { AgentCreateParams, AgentCreateResponse, - AgentListApprovalsParams, - AgentListApprovalsResponse, - AgentListApprovalsResponsesDefaultPagination, AgentListParams, AgentListResponse, AgentListResponsesDefaultPagination, + AgentRetrieveApprovalsParams, + AgentRetrieveApprovalsResponse, AgentRetrieveResponse, AgentUpdateParams, AgentUpdatePolicyParams, @@ -1283,14 +1282,13 @@ export declare namespace LightsparkGrid { type AgentRetrieveResponse as AgentRetrieveResponse, type AgentUpdateResponse as AgentUpdateResponse, type AgentListResponse as AgentListResponse, - type AgentListApprovalsResponse as AgentListApprovalsResponse, + type AgentRetrieveApprovalsResponse as AgentRetrieveApprovalsResponse, type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, type AgentCreateParams as AgentCreateParams, type AgentUpdateParams as AgentUpdateParams, type AgentListParams as AgentListParams, - type AgentListApprovalsParams as AgentListApprovalsParams, + type AgentRetrieveApprovalsParams as AgentRetrieveApprovalsParams, type AgentUpdatePolicyParams as AgentUpdatePolicyParams, }; diff --git a/src/resources/agents/agents.ts b/src/resources/agents/agents.ts index 3b88d8a..4fee8c8 100644 --- a/src/resources/agents/agents.ts +++ b/src/resources/agents/agents.ts @@ -13,22 +13,21 @@ import { } from './actions'; import * as DeviceCodesAPI from './device-codes'; import { - DeviceCodeGetStatusResponse, + DeviceCodeDeviceCodesResponse, DeviceCodeRedeemResponse, - DeviceCodeRegenerateResponse, + DeviceCodeRetrieveStatusResponse, DeviceCodes, } from './device-codes'; -import * as TransactionsAPI from './transactions'; -import { Transactions } from './transactions'; import * as MeAPI from './me/me'; import { Me, - MeCreateTransferInParams, - MeCreateTransferInResponse, - MeCreateTransferOutParams, - MeCreateTransferOutResponse, - MeListInternalAccountsParams, - MeRetrieveResponse, + MeListResponse, + MeRetrieveInternalAccountsParams, + MeRetrieveInternalAccountsResponse, + MeTransferInParams, + MeTransferInResponse, + MeTransferOutParams, + MeTransferOutResponse, } from './me/me'; import { APIPromise } from '../../core/api-promise'; import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../core/pagination'; @@ -42,7 +41,6 @@ import { path } from '../../internal/utils/path'; export class Agents extends APIResource { me: MeAPI.Me = new MeAPI.Me(this._client); deviceCodes: DeviceCodesAPI.DeviceCodes = new DeviceCodesAPI.DeviceCodes(this._client); - transactions: TransactionsAPI.Transactions = new TransactionsAPI.Transactions(this._client); actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); /** @@ -142,20 +140,14 @@ export class Agents extends APIResource { * * @example * ```ts - * // Automatically fetches more pages as needed. - * for await (const agentListApprovalsResponse of client.agents.listApprovals()) { - * // ... - * } + * const response = await client.agents.retrieveApprovals(); * ``` */ - listApprovals( - query: AgentListApprovalsParams | null | undefined = {}, + retrieveApprovals( + query: AgentRetrieveApprovalsParams | null | undefined = {}, options?: RequestOptions, - ): PagePromise { - return this._client.getAPIList('/agents/approvals', DefaultPagination, { - query, - ...options, - }); + ): APIPromise { + return this._client.get('/agents/approvals', { query, ...options }); } /** @@ -181,8 +173,6 @@ export class Agents extends APIResource { export type AgentListResponsesDefaultPagination = DefaultPagination; -export type AgentListApprovalsResponsesDefaultPagination = DefaultPagination; - /** * Response returned when an agent is created, including the agent and a device * code for installation. @@ -1177,116 +1167,140 @@ export namespace AgentListResponse { } } -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface AgentListApprovalsResponse { +export interface AgentRetrieveApprovalsResponse { /** - * System-generated unique identifier for this action. + * List of agent actions matching the filter criteria. */ - id: string; + data: Array; /** - * The agent that submitted this action. + * Indicates if more results are available beyond this page. */ - agentId: string; + hasMore: boolean; /** - * When the action was submitted by the agent. + * Cursor to retrieve the next page of results (only present if hasMore is true). */ - createdAt: string; + nextCursor?: string; /** - * The customer on whose behalf the action was submitted. + * Total number of actions matching the criteria (excluding pagination). */ - customerId: string; + totalCount?: number; +} +export namespace AgentRetrieveApprovalsResponse { /** - * Platform-specific ID of the customer. + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. */ - platformCustomerId: string; + export interface Data { + /** + * System-generated unique identifier for this action. + */ + id: string; - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + /** + * The agent that submitted this action. + */ + agentId: string; - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + /** + * When the action was submitted by the agent. + */ + createdAt: string; - /** - * When the action was last updated. - */ - updatedAt: string; + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: AgentListApprovalsResponse.TransferDetails; -} + /** + * When the action was last updated. + */ + updatedAt: string; -export namespace AgentListApprovalsResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { /** - * Transfer amount in the smallest unit of the specified currency. + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. */ - amount: number; + quote?: QuotesAPI.Quote; /** - * ISO 4217 currency code for the transfer amount. + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. */ - currency: string; + rejectionReason?: string; /** - * ID of the destination account (internal or external). + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. */ - destinationAccountId: string; + transaction?: TransferInAPI.Transaction; /** - * ID of the source account (internal or external). + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - sourceAccountId: string; + transferDetails?: Data.TransferDetails; + } + + export namespace Data { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } } } @@ -1752,12 +1766,17 @@ export interface AgentListParams extends DefaultPaginationParams { updatedBefore?: string; } -export interface AgentListApprovalsParams extends DefaultPaginationParams { +export interface AgentRetrieveApprovalsParams { /** * Filter by agent ID */ agentId?: string; + /** + * Cursor for pagination (returned from previous request) + */ + cursor?: string; + /** * Filter by customer ID */ @@ -1923,7 +1942,6 @@ export namespace AgentUpdatePolicyParams { Agents.Me = Me; Agents.DeviceCodes = DeviceCodes; -Agents.Transactions = Transactions; Agents.Actions = Actions; export declare namespace Agents { @@ -1932,36 +1950,34 @@ export declare namespace Agents { type AgentRetrieveResponse as AgentRetrieveResponse, type AgentUpdateResponse as AgentUpdateResponse, type AgentListResponse as AgentListResponse, - type AgentListApprovalsResponse as AgentListApprovalsResponse, + type AgentRetrieveApprovalsResponse as AgentRetrieveApprovalsResponse, type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, type AgentCreateParams as AgentCreateParams, type AgentUpdateParams as AgentUpdateParams, type AgentListParams as AgentListParams, - type AgentListApprovalsParams as AgentListApprovalsParams, + type AgentRetrieveApprovalsParams as AgentRetrieveApprovalsParams, type AgentUpdatePolicyParams as AgentUpdatePolicyParams, }; export { Me as Me, - type MeRetrieveResponse as MeRetrieveResponse, - type MeCreateTransferInResponse as MeCreateTransferInResponse, - type MeCreateTransferOutResponse as MeCreateTransferOutResponse, - type MeCreateTransferInParams as MeCreateTransferInParams, - type MeCreateTransferOutParams as MeCreateTransferOutParams, - type MeListInternalAccountsParams as MeListInternalAccountsParams, + type MeListResponse as MeListResponse, + type MeRetrieveInternalAccountsResponse as MeRetrieveInternalAccountsResponse, + type MeTransferInResponse as MeTransferInResponse, + type MeTransferOutResponse as MeTransferOutResponse, + type MeRetrieveInternalAccountsParams as MeRetrieveInternalAccountsParams, + type MeTransferInParams as MeTransferInParams, + type MeTransferOutParams as MeTransferOutParams, }; export { DeviceCodes as DeviceCodes, - type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, + type DeviceCodeDeviceCodesResponse as DeviceCodeDeviceCodesResponse, type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, - type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, + type DeviceCodeRetrieveStatusResponse as DeviceCodeRetrieveStatusResponse, }; - export { Transactions as Transactions }; - export { Actions as Actions, type ActionApproveResponse as ActionApproveResponse, diff --git a/src/resources/agents/device-codes.ts b/src/resources/agents/device-codes.ts index 8b65cae..12c50ce 100644 --- a/src/resources/agents/device-codes.ts +++ b/src/resources/agents/device-codes.ts @@ -10,18 +10,19 @@ import { path } from '../../internal/utils/path'; */ export class DeviceCodes extends APIResource { /** - * Check whether a device code has been redeemed. Use this to poll for agent - * installation completion after creating an agent. + * Generate a new device code for an existing agent. Use this when the original + * device code has expired before being redeemed, or when the agent software needs + * to be reinstalled. Any previously issued unredeemed device codes for this agent + * are invalidated. * * @example * ```ts - * const response = await client.agents.deviceCodes.getStatus( - * 'code', - * ); + * const response = + * await client.agents.deviceCodes.deviceCodes('agentId'); * ``` */ - getStatus(code: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/agents/device-codes/${code}/status`, options); + deviceCodes(agentID: string, options?: RequestOptions): APIPromise { + return this._client.post(path`/agents/${agentID}/device-codes`, options); } /** @@ -43,31 +44,38 @@ export class DeviceCodes extends APIResource { } /** - * Generate a new device code for an existing agent. Use this when the original - * device code has expired before being redeemed, or when the agent software needs - * to be reinstalled. Any previously issued unredeemed device codes for this agent - * are invalidated. + * Check whether a device code has been redeemed. Use this to poll for agent + * installation completion after creating an agent. * * @example * ```ts - * const response = await client.agents.deviceCodes.regenerate( - * 'agentId', - * ); + * const response = + * await client.agents.deviceCodes.retrieveStatus('code'); * ``` */ - regenerate(agentID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/agents/${agentID}/device-codes`, options); + retrieveStatus(code: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/agents/device-codes/${code}/status`, options); } } -export interface DeviceCodeGetStatusResponse { +export interface DeviceCodeDeviceCodesResponse { /** - * The device code. + * The agent this device code belongs to. + */ + agentId: string; + + /** + * Human-readable device code used to install and connect the agent software. */ code: string; /** - * Whether this device code has been redeemed. + * Timestamp when this device code expires. + */ + expiresAt: string; + + /** + * Whether this device code has already been redeemed by the agent. */ redeemed: boolean; } @@ -248,32 +256,22 @@ export namespace DeviceCodeRedeemResponse { } } -export interface DeviceCodeRegenerateResponse { +export interface DeviceCodeRetrieveStatusResponse { /** - * The agent this device code belongs to. - */ - agentId: string; - - /** - * Human-readable device code used to install and connect the agent software. + * The device code. */ code: string; /** - * Timestamp when this device code expires. - */ - expiresAt: string; - - /** - * Whether this device code has already been redeemed by the agent. + * Whether this device code has been redeemed. */ redeemed: boolean; } export declare namespace DeviceCodes { export { - type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, + type DeviceCodeDeviceCodesResponse as DeviceCodeDeviceCodesResponse, type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, - type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, + type DeviceCodeRetrieveStatusResponse as DeviceCodeRetrieveStatusResponse, }; } diff --git a/src/resources/agents/index.ts b/src/resources/agents/index.ts index 1b99113..ca176d3 100644 --- a/src/resources/agents/index.ts +++ b/src/resources/agents/index.ts @@ -13,29 +13,28 @@ export { type AgentRetrieveResponse, type AgentUpdateResponse, type AgentListResponse, - type AgentListApprovalsResponse, + type AgentRetrieveApprovalsResponse, type AgentUpdatePolicyResponse, type AgentCreateParams, type AgentUpdateParams, type AgentListParams, - type AgentListApprovalsParams, + type AgentRetrieveApprovalsParams, type AgentUpdatePolicyParams, type AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination, } from './agents'; export { DeviceCodes, - type DeviceCodeGetStatusResponse, + type DeviceCodeDeviceCodesResponse, type DeviceCodeRedeemResponse, - type DeviceCodeRegenerateResponse, + type DeviceCodeRetrieveStatusResponse, } from './device-codes'; export { Me, - type MeRetrieveResponse, - type MeCreateTransferInResponse, - type MeCreateTransferOutResponse, - type MeCreateTransferInParams, - type MeCreateTransferOutParams, - type MeListInternalAccountsParams, + type MeListResponse, + type MeRetrieveInternalAccountsResponse, + type MeTransferInResponse, + type MeTransferOutResponse, + type MeRetrieveInternalAccountsParams, + type MeTransferInParams, + type MeTransferOutParams, } from './me/index'; -export { Transactions } from './transactions'; diff --git a/src/resources/agents/me/external-accounts.ts b/src/resources/agents/me/external-accounts.ts index 52ba746..89b8aea 100644 --- a/src/resources/agents/me/external-accounts.ts +++ b/src/resources/agents/me/external-accounts.ts @@ -3,9 +3,7 @@ import { APIResource } from '../../../core/resource'; import * as Shared from '../../shared'; import * as ExternalAccountsAPI from '../../customers/external-accounts'; -import { ExternalAccountsDefaultPagination } from '../../customers/external-accounts'; import { APIPromise } from '../../../core/api-promise'; -import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; import { buildHeaders } from '../../../internal/headers'; import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; @@ -34,30 +32,6 @@ export class ExternalAccounts extends APIResource { return this._client.get(path`/agents/me/external-accounts/${externalAccountID}`, options); } - /** - * Retrieve a paginated list of external accounts belonging to the authenticated - * agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the - * agent's policy. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const externalAccount of client.agents.me.externalAccounts.list()) { - * // ... - * } - * ``` - */ - list( - query: ExternalAccountListParams | null | undefined = {}, - options?: RequestOptions, - ): PagePromise { - return this._client.getAPIList( - '/agents/me/external-accounts', - DefaultPagination, - { query, ...options }, - ); - } - /** * Delete an external account belonging to the authenticated agent's customer. * Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. @@ -85,7 +59,7 @@ export class ExternalAccounts extends APIResource { * @example * ```ts * const externalAccount = - * await client.agents.me.externalAccounts.add({ + * await client.agents.me.externalAccounts.externalAccounts({ * accountInfo: { * accountType: 'USD_ACCOUNT', * accountNumber: '12345678901', @@ -108,27 +82,55 @@ export class ExternalAccounts extends APIResource { * }); * ``` */ - add( - body: ExternalAccountAddParams, + externalAccounts( + body: ExternalAccountExternalAccountsParams, options?: RequestOptions, ): APIPromise { return this._client.post('/agents/me/external-accounts', { body, ...options }); } + + /** + * Retrieve a paginated list of external accounts belonging to the authenticated + * agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the + * agent's policy. + * + * @example + * ```ts + * const response = + * await client.agents.me.externalAccounts.retrieveExternalAccounts(); + * ``` + */ + retrieveExternalAccounts( + query: ExternalAccountRetrieveExternalAccountsParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/agents/me/external-accounts', { query, ...options }); + } } -export interface ExternalAccountListParams extends DefaultPaginationParams { +export interface ExternalAccountRetrieveExternalAccountsResponse { /** - * Filter by currency code + * List of external accounts matching the filter criteria */ - currency?: string; + data: Array; /** - * Maximum number of results to return (default 20, max 100) + * Indicates if more results are available beyond this page */ - limit?: number; + hasMore: boolean; + + /** + * Cursor to retrieve the next page of results (only present if hasMore is true) + */ + nextCursor?: string; + + /** + * Total number of external accounts matching the criteria (excluding pagination) + */ + totalCount?: number; } -export interface ExternalAccountAddParams { +export interface ExternalAccountExternalAccountsParams { /** * Lightning payment destination. Exactly one of `invoice`, `bolt12`, or * `lightningAddress` must be provided. @@ -207,11 +209,27 @@ export interface ExternalAccountAddParams { platformAccountId?: string; } +export interface ExternalAccountRetrieveExternalAccountsParams { + /** + * Filter by currency code + */ + currency?: string; + + /** + * Cursor for pagination (returned from previous request) + */ + cursor?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; +} + export declare namespace ExternalAccounts { export { - type ExternalAccountListParams as ExternalAccountListParams, - type ExternalAccountAddParams as ExternalAccountAddParams, + type ExternalAccountRetrieveExternalAccountsResponse as ExternalAccountRetrieveExternalAccountsResponse, + type ExternalAccountExternalAccountsParams as ExternalAccountExternalAccountsParams, + type ExternalAccountRetrieveExternalAccountsParams as ExternalAccountRetrieveExternalAccountsParams, }; } - -export { type ExternalAccountsDefaultPagination }; diff --git a/src/resources/agents/me/index.ts b/src/resources/agents/me/index.ts index 3767ec8..decc227 100644 --- a/src/resources/agents/me/index.ts +++ b/src/resources/agents/me/index.ts @@ -9,17 +9,19 @@ export { } from './actions'; export { ExternalAccounts, - type ExternalAccountListParams, - type ExternalAccountAddParams, + type ExternalAccountRetrieveExternalAccountsResponse, + type ExternalAccountExternalAccountsParams, + type ExternalAccountRetrieveExternalAccountsParams, } from './external-accounts'; export { Me, - type MeRetrieveResponse, - type MeCreateTransferInResponse, - type MeCreateTransferOutResponse, - type MeCreateTransferInParams, - type MeCreateTransferOutParams, - type MeListInternalAccountsParams, + type MeListResponse, + type MeRetrieveInternalAccountsResponse, + type MeTransferInResponse, + type MeTransferOutResponse, + type MeRetrieveInternalAccountsParams, + type MeTransferInParams, + type MeTransferOutParams, } from './me'; export { Quotes, type QuoteExecuteResponse, type QuoteCreateParams, type QuoteExecuteParams } from './quotes'; export { Transactions, type TransactionListParams } from './transactions'; diff --git a/src/resources/agents/me/me.ts b/src/resources/agents/me/me.ts index e319eb1..57907d2 100644 --- a/src/resources/agents/me/me.ts +++ b/src/resources/agents/me/me.ts @@ -4,7 +4,6 @@ import { APIResource } from '../../../core/resource'; import * as QuotesAPI from '../../quotes'; import * as TransferInAPI from '../../transfer-in'; import * as InternalAccountsAPI from '../../sandbox/internal-accounts'; -import { InternalAccountsDefaultPagination } from '../../sandbox/internal-accounts'; import * as ActionsAPI from './actions'; import { ActionListParams, @@ -14,13 +13,17 @@ import { Actions, } from './actions'; import * as ExternalAccountsAPI from './external-accounts'; -import { ExternalAccountAddParams, ExternalAccountListParams, ExternalAccounts } from './external-accounts'; +import { + ExternalAccountExternalAccountsParams, + ExternalAccountRetrieveExternalAccountsParams, + ExternalAccountRetrieveExternalAccountsResponse, + ExternalAccounts, +} from './external-accounts'; import * as MeQuotesAPI from './quotes'; import { QuoteCreateParams, QuoteExecuteParams, QuoteExecuteResponse, Quotes } from './quotes'; import * as TransactionsAPI from './transactions'; import { TransactionListParams, Transactions } from './transactions'; import { APIPromise } from '../../../core/api-promise'; -import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; import { buildHeaders } from '../../../internal/headers'; import { RequestOptions } from '../../../internal/request-options'; @@ -30,10 +33,10 @@ import { RequestOptions } from '../../../internal/request-options'; export class Me extends APIResource { transactions: TransactionsAPI.Transactions = new TransactionsAPI.Transactions(this._client); quotes: MeQuotesAPI.Quotes = new MeQuotesAPI.Quotes(this._client); + actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); externalAccounts: ExternalAccountsAPI.ExternalAccounts = new ExternalAccountsAPI.ExternalAccounts( this._client, ); - actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); /** * Retrieve the authenticated agent's own profile, policy, and current usage. This @@ -42,13 +45,32 @@ export class Me extends APIResource { * * @example * ```ts - * const me = await client.agents.me.retrieve(); + * const mes = await client.agents.me.list(); * ``` */ - retrieve(options?: RequestOptions): APIPromise { + list(options?: RequestOptions): APIPromise { return this._client.get('/agents/me', options); } + /** + * Retrieve the internal accounts belonging to the customer this agent operates on + * behalf of. Use this to discover available source accounts for transfers and + * quotes, and to verify which accounts are accessible under the agent's + * `accountRestrictions` policy. + * + * @example + * ```ts + * const response = + * await client.agents.me.retrieveInternalAccounts(); + * ``` + */ + retrieveInternalAccounts( + query: MeRetrieveInternalAccountsParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + return this._client.get('/agents/me/internal-accounts', { query, ...options }); + } + /** * Transfer funds from an external account to an internal account for the * authenticated agent's customer. Accounts must belong to the agent's customer. @@ -62,7 +84,7 @@ export class Me extends APIResource { * * @example * ```ts - * const response = await client.agents.me.createTransferIn({ + * const response = await client.agents.me.transferIn({ * destination: { * accountId: * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', @@ -75,10 +97,7 @@ export class Me extends APIResource { * }); * ``` */ - createTransferIn( - params: MeCreateTransferInParams, - options?: RequestOptions, - ): APIPromise { + transferIn(params: MeTransferInParams, options?: RequestOptions): APIPromise { const { 'Idempotency-Key': idempotencyKey, ...body } = params; return this._client.post('/agents/me/transfer-in', { body, @@ -100,7 +119,7 @@ export class Me extends APIResource { * * @example * ```ts - * const response = await client.agents.me.createTransferOut({ + * const response = await client.agents.me.transferOut({ * destination: { * accountId: * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', @@ -113,10 +132,7 @@ export class Me extends APIResource { * }); * ``` */ - createTransferOut( - params: MeCreateTransferOutParams, - options?: RequestOptions, - ): APIPromise { + transferOut(params: MeTransferOutParams, options?: RequestOptions): APIPromise { const { 'Idempotency-Key': idempotencyKey, ...body } = params; return this._client.post('/agents/me/transfer-out', { body, @@ -127,38 +143,13 @@ export class Me extends APIResource { ]), }); } - - /** - * Retrieve the internal accounts belonging to the customer this agent operates on - * behalf of. Use this to discover available source accounts for transfers and - * quotes, and to verify which accounts are accessible under the agent's - * `accountRestrictions` policy. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const internalAccount of client.agents.me.listInternalAccounts()) { - * // ... - * } - * ``` - */ - listInternalAccounts( - query: MeListInternalAccountsParams | null | undefined = {}, - options?: RequestOptions, - ): PagePromise { - return this._client.getAPIList( - '/agents/me/internal-accounts', - DefaultPagination, - { query, ...options }, - ); - } } /** * A programmatic agent with scoped permissions and a spending policy, used to * automate payment workflows. */ -export interface MeRetrieveResponse { +export interface MeListResponse { /** * System-generated unique identifier for the agent. */ @@ -195,7 +186,7 @@ export interface MeRetrieveResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: MeRetrieveResponse.Policy; + policy: MeListResponse.Policy; /** * Last update timestamp. @@ -206,10 +197,10 @@ export interface MeRetrieveResponse { * Real-time counters tracking the agent's spending and transaction activity * against its policy limits. */ - usage: MeRetrieveResponse.Usage; + usage: MeListResponse.Usage; } -export namespace MeRetrieveResponse { +export namespace MeListResponse { /** * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. @@ -393,13 +384,35 @@ export namespace MeRetrieveResponse { } } +export interface MeRetrieveInternalAccountsResponse { + /** + * List of internal accounts matching the filter criteria + */ + data: Array; + + /** + * Indicates if more results are available beyond this page + */ + hasMore: boolean; + + /** + * Cursor to retrieve the next page of results (only present if hasMore is true) + */ + nextCursor?: string; + + /** + * Total number of customers matching the criteria (excluding pagination) + */ + totalCount?: number; +} + /** * An action submitted by an agent that may require platform approval before * execution. All agent-initiated operations (quote execution, transfers) are * represented as AgentActions, giving the platform a consistent object to approve, * reject, and audit regardless of the underlying operation type. */ -export interface MeCreateTransferInResponse { +export interface MeTransferInResponse { /** * System-generated unique identifier for this action. */ @@ -476,10 +489,10 @@ export interface MeCreateTransferInResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: MeCreateTransferInResponse.TransferDetails; + transferDetails?: MeTransferInResponse.TransferDetails; } -export namespace MeCreateTransferInResponse { +export namespace MeTransferInResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ @@ -512,7 +525,7 @@ export namespace MeCreateTransferInResponse { * represented as AgentActions, giving the platform a consistent object to approve, * reject, and audit regardless of the underlying operation type. */ -export interface MeCreateTransferOutResponse { +export interface MeTransferOutResponse { /** * System-generated unique identifier for this action. */ @@ -589,10 +602,10 @@ export interface MeCreateTransferOutResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: MeCreateTransferOutResponse.TransferDetails; + transferDetails?: MeTransferOutResponse.TransferDetails; } -export namespace MeCreateTransferOutResponse { +export namespace MeTransferOutResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ @@ -619,7 +632,31 @@ export namespace MeCreateTransferOutResponse { } } -export interface MeCreateTransferInParams { +export interface MeRetrieveInternalAccountsParams { + /** + * Filter by currency code + */ + currency?: string; + + /** + * Cursor for pagination (returned from previous request) + */ + cursor?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; + + /** + * Filter by internal account type. Use `EMBEDDED_WALLET` to find the + * self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / + * `INTERNAL_CRYPTO` for platform-managed holding accounts. + */ + type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; +} + +export interface MeTransferInParams { /** * Body param: Destination internal account details */ @@ -643,7 +680,7 @@ export interface MeCreateTransferInParams { 'Idempotency-Key'?: string; } -export interface MeCreateTransferOutParams { +export interface MeTransferOutParams { /** * Body param: Destination external account details */ @@ -667,38 +704,20 @@ export interface MeCreateTransferOutParams { 'Idempotency-Key'?: string; } -export interface MeListInternalAccountsParams extends DefaultPaginationParams { - /** - * Filter by currency code - */ - currency?: string; - - /** - * Maximum number of results to return (default 20, max 100) - */ - limit?: number; - - /** - * Filter by internal account type. Use `EMBEDDED_WALLET` to find the - * self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / - * `INTERNAL_CRYPTO` for platform-managed holding accounts. - */ - type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; -} - Me.Transactions = Transactions; Me.Quotes = Quotes; -Me.ExternalAccounts = ExternalAccounts; Me.Actions = Actions; +Me.ExternalAccounts = ExternalAccounts; export declare namespace Me { export { - type MeRetrieveResponse as MeRetrieveResponse, - type MeCreateTransferInResponse as MeCreateTransferInResponse, - type MeCreateTransferOutResponse as MeCreateTransferOutResponse, - type MeCreateTransferInParams as MeCreateTransferInParams, - type MeCreateTransferOutParams as MeCreateTransferOutParams, - type MeListInternalAccountsParams as MeListInternalAccountsParams, + type MeListResponse as MeListResponse, + type MeRetrieveInternalAccountsResponse as MeRetrieveInternalAccountsResponse, + type MeTransferInResponse as MeTransferInResponse, + type MeTransferOutResponse as MeTransferOutResponse, + type MeRetrieveInternalAccountsParams as MeRetrieveInternalAccountsParams, + type MeTransferInParams as MeTransferInParams, + type MeTransferOutParams as MeTransferOutParams, }; export { Transactions as Transactions, type TransactionListParams as TransactionListParams }; @@ -710,12 +729,6 @@ export declare namespace Me { type QuoteExecuteParams as QuoteExecuteParams, }; - export { - ExternalAccounts as ExternalAccounts, - type ExternalAccountListParams as ExternalAccountListParams, - type ExternalAccountAddParams as ExternalAccountAddParams, - }; - export { Actions as Actions, type ActionRetrieveResponse as ActionRetrieveResponse, @@ -723,6 +736,11 @@ export declare namespace Me { type ActionListResponsesDefaultPagination as ActionListResponsesDefaultPagination, type ActionListParams as ActionListParams, }; -} -export { type InternalAccountsDefaultPagination }; + export { + ExternalAccounts as ExternalAccounts, + type ExternalAccountRetrieveExternalAccountsResponse as ExternalAccountRetrieveExternalAccountsResponse, + type ExternalAccountExternalAccountsParams as ExternalAccountExternalAccountsParams, + type ExternalAccountRetrieveExternalAccountsParams as ExternalAccountRetrieveExternalAccountsParams, + }; +} diff --git a/src/resources/agents/transactions.ts b/src/resources/agents/transactions.ts deleted file mode 100644 index cd0f18b..0000000 --- a/src/resources/agents/transactions.ts +++ /dev/null @@ -1,5 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { APIResource } from '../../core/resource'; - -export class Transactions extends APIResource {} diff --git a/src/resources/auth/credentials.ts b/src/resources/auth/credentials.ts index 16b227f..f270bd7 100644 --- a/src/resources/auth/credentials.ts +++ b/src/resources/auth/credentials.ts @@ -252,7 +252,7 @@ export interface AuthMethod { /** * Human-readable identifier for this credential. For EMAIL_OTP credentials this is * the email address; for OAUTH credentials it is typically the email claim from - * the OIDC token; for PASSKEY credentials it is the nickname provided at + * the OIDC token; for PASSKEY credentials it is the validated nickname provided at * registration time. */ nickname: string; @@ -488,8 +488,10 @@ export namespace CredentialCreateParams { /** * Human-readable identifier for the passkey, chosen by the user at registration - * time (e.g. "iPhone Face-ID", "YubiKey 5C"). Shown back on `AuthMethod` responses - * and in credential listings. + * time (e.g. "iPhone Face-ID", "YubiKey 5C"). Leading and trailing whitespace is + * ignored. Must be 1-100 characters and may contain Unicode letters, numbers, + * spaces, and the following separators: period, underscore, hyphen, apostrophe, + * and parentheses. Shown back on AuthMethod responses and in credential listings. */ nickname: string; diff --git a/src/resources/index.ts b/src/resources/index.ts index 78c756c..5cdd41d 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -7,15 +7,14 @@ export { type AgentRetrieveResponse, type AgentUpdateResponse, type AgentListResponse, - type AgentListApprovalsResponse, + type AgentRetrieveApprovalsResponse, type AgentUpdatePolicyResponse, type AgentCreateParams, type AgentUpdateParams, type AgentListParams, - type AgentListApprovalsParams, + type AgentRetrieveApprovalsParams, type AgentUpdatePolicyParams, type AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination, } from './agents/agents'; export { Auth } from './auth/auth'; export { diff --git a/tests/api-resources/agents/agents.test.ts b/tests/api-resources/agents/agents.test.ts index 492778d..f00bff1 100644 --- a/tests/api-resources/agents/agents.test.ts +++ b/tests/api-resources/agents/agents.test.ts @@ -129,8 +129,8 @@ describe('resource agents', () => { }); // Mock server tests are disabled - test.skip('listApprovals', async () => { - const responsePromise = client.agents.listApprovals(); + test.skip('retrieveApprovals', async () => { + const responsePromise = client.agents.retrieveApprovals(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -141,10 +141,10 @@ describe('resource agents', () => { }); // Mock server tests are disabled - test.skip('listApprovals: request options and params are passed correctly', async () => { + test.skip('retrieveApprovals: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.agents.listApprovals( + client.agents.retrieveApprovals( { agentId: 'agentId', cursor: 'cursor', diff --git a/tests/api-resources/agents/device-codes.test.ts b/tests/api-resources/agents/device-codes.test.ts index 4edf0cc..79fffee 100644 --- a/tests/api-resources/agents/device-codes.test.ts +++ b/tests/api-resources/agents/device-codes.test.ts @@ -10,8 +10,8 @@ const client = new LightsparkGrid({ describe('resource deviceCodes', () => { // Mock server tests are disabled - test.skip('getStatus', async () => { - const responsePromise = client.agents.deviceCodes.getStatus('code'); + test.skip('deviceCodes', async () => { + const responsePromise = client.agents.deviceCodes.deviceCodes('agentId'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -34,8 +34,8 @@ describe('resource deviceCodes', () => { }); // Mock server tests are disabled - test.skip('regenerate', async () => { - const responsePromise = client.agents.deviceCodes.regenerate('agentId'); + test.skip('retrieveStatus', async () => { + const responsePromise = client.agents.deviceCodes.retrieveStatus('code'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; diff --git a/tests/api-resources/agents/me/external-accounts.test.ts b/tests/api-resources/agents/me/external-accounts.test.ts index 3cde53b..a9aa5eb 100644 --- a/tests/api-resources/agents/me/external-accounts.test.ts +++ b/tests/api-resources/agents/me/external-accounts.test.ts @@ -21,33 +21,6 @@ describe('resource externalAccounts', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // Mock server tests are disabled - test.skip('list', async () => { - const responsePromise = client.agents.me.externalAccounts.list(); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // Mock server tests are disabled - test.skip('list: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.agents.me.externalAccounts.list( - { - currency: 'currency', - cursor: 'cursor', - limit: 1, - }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(LightsparkGrid.NotFoundError); - }); - // Mock server tests are disabled test.skip('delete', async () => { const responsePromise = client.agents.me.externalAccounts.delete('externalAccountId'); @@ -61,8 +34,8 @@ describe('resource externalAccounts', () => { }); // Mock server tests are disabled - test.skip('add: only required params', async () => { - const responsePromise = client.agents.me.externalAccounts.add({ + test.skip('externalAccounts: only required params', async () => { + const responsePromise = client.agents.me.externalAccounts.externalAccounts({ accountInfo: { accountNumber: '12345678901', accountType: 'USD_ACCOUNT', @@ -81,8 +54,8 @@ describe('resource externalAccounts', () => { }); // Mock server tests are disabled - test.skip('add: required and optional params', async () => { - const response = await client.agents.me.externalAccounts.add({ + test.skip('externalAccounts: required and optional params', async () => { + const response = await client.agents.me.externalAccounts.externalAccounts({ accountInfo: { accountNumber: '12345678901', accountType: 'USD_ACCOUNT', @@ -111,4 +84,31 @@ describe('resource externalAccounts', () => { platformAccountId: 'ext_acc_123456', }); }); + + // Mock server tests are disabled + test.skip('retrieveExternalAccounts', async () => { + const responsePromise = client.agents.me.externalAccounts.retrieveExternalAccounts(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('retrieveExternalAccounts: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.externalAccounts.retrieveExternalAccounts( + { + currency: 'currency', + cursor: 'cursor', + limit: 1, + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); }); diff --git a/tests/api-resources/agents/me/me.test.ts b/tests/api-resources/agents/me/me.test.ts index 1db676d..8dfda20 100644 --- a/tests/api-resources/agents/me/me.test.ts +++ b/tests/api-resources/agents/me/me.test.ts @@ -10,8 +10,8 @@ const client = new LightsparkGrid({ describe('resource me', () => { // Mock server tests are disabled - test.skip('retrieve', async () => { - const responsePromise = client.agents.me.retrieve(); + test.skip('list', async () => { + const responsePromise = client.agents.me.list(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,11 +22,8 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('createTransferIn: only required params', async () => { - const responsePromise = client.agents.me.createTransferIn({ - destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, - source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, - }); + test.skip('retrieveInternalAccounts', async () => { + const responsePromise = client.agents.me.retrieveInternalAccounts(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -37,20 +34,26 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('createTransferIn: required and optional params', async () => { - const response = await client.agents.me.createTransferIn({ - destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, - source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, - amount: 12550, - 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', - }); + test.skip('retrieveInternalAccounts: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.retrieveInternalAccounts( + { + currency: 'currency', + cursor: 'cursor', + limit: 1, + type: 'INTERNAL_FIAT', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); }); // Mock server tests are disabled - test.skip('createTransferOut: only required params', async () => { - const responsePromise = client.agents.me.createTransferOut({ - destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, - source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + test.skip('transferIn: only required params', async () => { + const responsePromise = client.agents.me.transferIn({ + destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -62,18 +65,21 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('createTransferOut: required and optional params', async () => { - const response = await client.agents.me.createTransferOut({ - destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, - source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + test.skip('transferIn: required and optional params', async () => { + const response = await client.agents.me.transferIn({ + destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, amount: 12550, 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', }); }); // Mock server tests are disabled - test.skip('listInternalAccounts', async () => { - const responsePromise = client.agents.me.listInternalAccounts(); + test.skip('transferOut: only required params', async () => { + const responsePromise = client.agents.me.transferOut({ + destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -84,18 +90,12 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('listInternalAccounts: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.agents.me.listInternalAccounts( - { - currency: 'currency', - cursor: 'cursor', - limit: 1, - type: 'INTERNAL_FIAT', - }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(LightsparkGrid.NotFoundError); + test.skip('transferOut: required and optional params', async () => { + const response = await client.agents.me.transferOut({ + destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + amount: 12550, + 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', + }); }); }); From b3e8864a570272cad87b73fd4bd4cb6dbed25b84 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 02:30:02 +0000 Subject: [PATCH 17/26] docs: update with proxy auth info --- packages/mcp-server/src/local-docs-search.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 2e695c0..2fcfb5d 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -3618,7 +3618,7 @@ const EMBEDDED_READMES: { language: string; content: string }[] = [ { language: 'kotlin', content: - '# Lightspark Grid Kotlin API Library\n\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.lightspark.grid/lightspark-grid-kotlin)](https://central.sonatype.com/artifact/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n[![javadoc](https://javadoc.io/badge2/com.lightspark.grid/lightspark-grid-kotlin/0.0.1/javadoc.svg)](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n\n\nThe Lightspark Grid Kotlin SDK provides convenient access to the [Lightspark Grid REST API](grid.lightspark.com) from applications written in Kotlin.\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n\n\nKDocs are available on [javadoc.io](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1).\n\n\n\n## Installation\n\n\n\n### Gradle\n\n~~~kotlin\nimplementation("com.lightspark.grid:lightspark-grid-kotlin:0.0.1")\n~~~\n\n### Maven\n\n~~~xml\n\n com.lightspark.grid\n lightspark-grid-kotlin\n 0.0.1\n\n~~~\n\n\n\n## Requirements\n\nThis library requires Java 8 or later.\n\n## Usage\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\n## Client configuration\n\nConfigure the client using system properties or environment variables:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n```\n\nOr manually:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .username("My Username")\n .password("My Password")\n .build()\n```\n\nOr using a combination of the two approaches:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n // Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n // Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\n .fromEnv()\n .username("My Username")\n .build()\n```\n\nSee this table for the available options:\n\n| Setter | System property | Environment variable | Required | Default value |\n| ------------------ | ---------------------------------- | -------------------------- | -------- | ---------------------------------------------- |\n| `username` | `lightsparkgrid.gridClientId` | `GRID_CLIENT_ID` | true | - |\n| `password` | `lightsparkgrid.gridClientSecret` | `GRID_CLIENT_SECRET` | true | - |\n| `webhookSignature` | `lightsparkgrid.gridWebhookPubkey` | `GRID_WEBHOOK_PUBKEY` | false | - |\n| `baseUrl` | `lightsparkgrid.baseUrl` | `LIGHTSPARK_GRID_BASE_URL` | true | `"https://api.lightspark.com/grid/2025-10-13"` |\n\nSystem properties take precedence over environment variables.\n\n> [!TIP]\n> Don\'t create more than one client in the same application. Each client has a connection pool and\n> thread pools, which are more efficient to share between requests.\n\n### Modifying configuration\n\nTo temporarily use a modified client configuration, while reusing the same connection and thread pools, call `withOptions()` on any client or service:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\n\nval clientWithOptions: LightsparkGridClient = client.withOptions {\n it.baseUrl("https://example.com")\n it.maxRetries(42)\n}\n```\n\nThe `withOptions()` method does not affect the original client or service.\n\n## Requests and responses\n\nTo send a request to the Lightspark Grid API, build an instance of some `Params` class and pass it to the corresponding client method. When the response is received, it will be deserialized into an instance of a Kotlin class.\n\nFor example, `client.quotes().create(...)` should be called with an instance of `QuoteCreateParams`, and it will return an instance of `Quote`.\n\n## Immutability\n\nEach class in the SDK has an associated [builder](https://blogs.oracle.com/javamagazine/post/exploring-joshua-blochs-builder-design-pattern-in-java) or factory method for constructing it.\n\nEach class is [immutable](https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html) once constructed. If the class has an associated builder, then it has a `toBuilder()` method, which can be used to convert it back to a builder for making a modified copy.\n\nBecause each class is immutable, builder modification will _never_ affect already built class instances.\n\n## Asynchronous execution\n\nThe default client is synchronous. To switch to asynchronous execution, call the `async()` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.async().quotes().create(params)\n```\n\nOr create an asynchronous client from the beginning:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClientAsync\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClientAsync\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClientAsync = LightsparkGridOkHttpClientAsync.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\nThe asynchronous client supports the same options as the synchronous one, except most methods are [suspending](https://kotlinlang.org/docs/coroutines-guide.html).\n\n\n\n## File uploads\n\nThe SDK defines methods that accept files.\n\nTo upload a file, pass a [`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.nio.file.Paths\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(Paths.get("/path/to/file"))\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr an arbitrary [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(URL("https://example.com//path/to/file").openStream())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr a `ByteArray`:\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file("content".toByteArray())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nNote that when passing a non-`Path` its filename is unknown so it will not be included in the request. To manually set a filename, pass a [`MultipartField`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.MultipartField\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.io.InputStream\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(MultipartField.builder()\n .value(URL("https://example.com//path/to/file").openStream())\n .filename("/path/to/file")\n .build())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\n\n\n## Raw responses\n\nThe SDK defines methods that deserialize responses into instances of Kotlin classes. However, these methods don\'t provide access to the response headers, status code, or the raw response body.\n\nTo access this data, prefix any HTTP method call on a client or service with `withRawResponse()`:\n\n```kotlin\nimport com.lightspark.grid.core.http.Headers\nimport com.lightspark.grid.core.http.HttpResponseFor\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: HttpResponseFor = client.quotes().withRawResponse().create(params)\n\nval statusCode: Int = quote.statusCode()\nval headers: Headers = quote.headers()\n```\n\nYou can still deserialize the response into an instance of a Kotlin class if needed:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval parsedQuote: Quote = quote.parse()\n```\n\n## Error handling\n\nThe SDK throws custom unchecked exception types:\n\n- [`LightsparkGridServiceException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridServiceException.kt): Base class for HTTP errors. See this table for which exception subclass is thrown for each HTTP status code:\n\n | Status | Exception |\n | ------ | -------------------------------------------------- |\n | 400 | [`BadRequestException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/BadRequestException.kt) |\n | 401 | [`UnauthorizedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnauthorizedException.kt) |\n | 403 | [`PermissionDeniedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/PermissionDeniedException.kt) |\n | 404 | [`NotFoundException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/NotFoundException.kt) |\n | 422 | [`UnprocessableEntityException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnprocessableEntityException.kt) |\n | 429 | [`RateLimitException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/RateLimitException.kt) |\n | 5xx | [`InternalServerException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/InternalServerException.kt) |\n | others | [`UnexpectedStatusCodeException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnexpectedStatusCodeException.kt) |\n\n- [`LightsparkGridIoException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridIoException.kt): I/O networking errors.\n\n- [`LightsparkGridRetryableException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridRetryableException.kt): Generic error indicating a failure that could be retried by the client.\n\n- [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt): Failure to interpret successfully parsed data. For example, when accessing a property that\'s supposed to be required, but the API unexpectedly omitted it from the response.\n\n- [`LightsparkGridException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridException.kt): Base class for all exceptions. Most errors will result in one of the previously mentioned ones, but completely generic errors may be thrown using the base class.\n\n## Pagination\n\nThe SDK defines methods that return a paginated lists of results. It provides convenient ways to access the results either one page at a time or item-by-item across all pages.\n\n### Auto-pagination\n\nTo iterate through all results across all pages, use the `autoPager()` method, which automatically fetches more pages as needed.\n\nWhen using the synchronous client, the method returns a [`Sequence`](https://kotlinlang.org/docs/sequences.html)\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\n\nval page: CustomerListPage = client.customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\nWhen using the asynchronous client, the method returns a [`Flow`](https://kotlinlang.org/docs/flow.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPageAsync\n\nval page: CustomerListPageAsync = client.async().customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\n### Manual pagination\n\nTo access individual page items and manually request the next page, use the `items()`,\n`hasNextPage()`, and `nextPage()` methods:\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\nimport com.lightspark.grid.models.customers.CustomerOneOf\n\nval page: CustomerListPage = client.customers().list()\nwhile (true) {\n for (customer in page.items()) {\n println(customer)\n }\n\n if (!page.hasNextPage()) {\n break\n }\n\n page = page.nextPage()\n}\n```\n\n## Logging\n\nThe SDK uses the standard [OkHttp logging interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor).\n\nEnable logging by setting the `LIGHTSPARK_GRID_LOG` environment variable to `info`:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=debug\n```\n\n## ProGuard and R8\n\nAlthough the SDK uses reflection, it is still usable with [ProGuard](https://github.com/Guardsquare/proguard) and [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization) because `lightspark-grid-kotlin-core` is published with a [configuration file](lightspark-grid-kotlin-core/src/main/resources/META-INF/proguard/lightspark-grid-kotlin-core.pro) containing [keep rules](https://www.guardsquare.com/manual/configuration/usage).\n\nProGuard and R8 should automatically detect and use the published rules, but you can also manually copy the keep rules if necessary.\n\n\n\n\n\n## Jackson\n\nThe SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.18.2 by default.\n\nThe SDK throws an exception if it detects an incompatible Jackson version at runtime (e.g. if the default version was overridden in your Maven or Gradle config).\n\nIf the SDK threw an exception, but you\'re _certain_ the version is compatible, then disable the version check using the `checkJacksonVersionCompatibility` on [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt).\n\n> [!CAUTION]\n> We make no guarantee that the SDK works correctly when the Jackson version check is disabled.\n\nAlso note that there are bugs in older Jackson versions that can affect the SDK. We don\'t work around all Jackson bugs ([example](https://github.com/FasterXML/jackson-databind/issues/3240)) and expect users to upgrade Jackson for those instead.\n\n## Network options\n\n### Retries\n\nThe SDK automatically retries 2 times by default, with a short exponential backoff between requests.\n\nOnly the following error types are retried:\n- Connection errors (for example, due to a network connectivity problem)\n- 408 Request Timeout\n- 409 Conflict\n- 429 Rate Limit\n- 5xx Internal\n\nThe API may also explicitly instruct the SDK to retry or not retry a request.\n\nTo set a custom number of retries, configure the client using the `maxRetries` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .maxRetries(4)\n .build()\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default.\n\nTo set a custom timeout, configure the method call using the `timeout` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().timeout(Duration.ofSeconds(30)).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .timeout(Duration.ofSeconds(30))\n .build()\n```\n\n### Proxies\n\nTo route requests through a proxy, configure the client using the `proxy` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.net.InetSocketAddress\nimport java.net.Proxy\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(Proxy(\n Proxy.Type.HTTP, InetSocketAddress(\n "https://example.com", 8080\n )\n ))\n .build()\n```\n\n### Connection pooling\n\nTo customize the underlying OkHttp connection pool, configure the client using the `maxIdleConnections` and `keepAliveDuration` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `maxIdleConnections` is set, then `keepAliveDuration` must be set, and vice versa.\n .maxIdleConnections(10)\n .keepAliveDuration(Duration.ofMinutes(2))\n .build()\n```\n\nIf both options are unset, OkHttp\'s default connection pool settings are used.\n\n### HTTPS\n\n> [!NOTE]\n> Most applications should not call these methods, and instead use the system defaults. The defaults include\n> special optimizations that can be lost if the implementations are modified.\n\nTo configure how HTTPS connections are secured, configure the client using the `sslSocketFactory`, `trustManager`, and `hostnameVerifier` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `sslSocketFactory` is set, then `trustManager` must be set, and vice versa.\n .sslSocketFactory(yourSSLSocketFactory)\n .trustManager(yourTrustManager)\n .hostnameVerifier(yourHostnameVerifier)\n .build()\n```\n\n\n\n### Custom HTTP client\n\nThe SDK consists of three artifacts:\n- `lightspark-grid-kotlin-core`\n - Contains core SDK logic\n - Does not depend on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClient.kt), [`LightsparkGridClientAsync`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsync.kt), [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt), and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), all of which can work with any HTTP client\n- `lightspark-grid-kotlin-client-okhttp`\n - Depends on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) and [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), which provide a way to construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), respectively, using OkHttp\n- `lightspark-grid-kotlin`\n - Depends on and exposes the APIs of both `lightspark-grid-kotlin-core` and `lightspark-grid-kotlin-client-okhttp`\n - Does not have its own logic\n\nThis structure allows replacing the SDK\'s default HTTP client without pulling in unnecessary dependencies.\n\n#### Customized [`OkHttpClient`](https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html)\n\n> [!TIP]\n> Try the available [network options](#network-options) before replacing the default client.\n\nTo use a customized `OkHttpClient`:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Copy `lightspark-grid-kotlin-client-okhttp`\'s [`OkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/OkHttpClient.kt) class into your code and customize it\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your customized client\n\n### Completely custom HTTP client\n\nTo use a completely custom HTTP client:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Write a class that implements the [`HttpClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/http/HttpClient.kt) interface\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your new client class\n\n## Undocumented API functionality\n\nThe SDK is typed for convenient usage of the documented API. However, it also supports working with undocumented or not yet supported parts of the API.\n\n### Parameters\n\nTo set undocumented parameters, call the `putAdditionalHeader`, `putAdditionalQueryParam`, or `putAdditionalBodyProperty` methods on any `Params` class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .putAdditionalHeader("Secret-Header", "42")\n .putAdditionalQueryParam("secret_query_param", "42")\n .putAdditionalBodyProperty("secretProperty", JsonValue.from("42"))\n .build()\n```\n\nThese can be accessed on the built object later using the `_additionalHeaders()`, `_additionalQueryParams()`, and `_additionalBodyProperties()` methods.\n\nTo set undocumented parameters on _nested_ headers, query params, or body classes, call the `putAdditionalProperty` method on the nested class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.transferin.InternalAccountReference\nimport com.lightspark.grid.models.transferin.TransferInCreateParams\n\nval params: TransferInCreateParams = TransferInCreateParams.builder()\n .destination(InternalAccountReference.builder()\n .putAdditionalProperty("secretProperty", JsonValue.from("42"))\n .build())\n .build()\n```\n\nThese properties can be accessed on the nested built object later using the `_additionalProperties()` method.\n\nTo set a documented parameter or property to an undocumented or not yet supported _value_, pass a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) object to its setter:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(JsonValue.from(42))\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n```\n\nThe most straightforward way to create a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) is using its `from(...)` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\n\n// Create primitive JSON values\nval nullValue: JsonValue = JsonValue.from(null)\nval booleanValue: JsonValue = JsonValue.from(true)\nval numberValue: JsonValue = JsonValue.from(42)\nval stringValue: JsonValue = JsonValue.from("Hello World!")\n\n// Create a JSON array value equivalent to `["Hello", "World"]`\nval arrayValue: JsonValue = JsonValue.from(listOf(\n "Hello", "World"\n))\n\n// Create a JSON object value equivalent to `{ "a": 1, "b": 2 }`\nval objectValue: JsonValue = JsonValue.from(mapOf(\n "a" to 1, "b" to 2\n))\n\n// Create an arbitrarily nested JSON equivalent to:\n// {\n// "a": [1, 2],\n// "b": [3, 4]\n// }\nval complexValue: JsonValue = JsonValue.from(mapOf(\n "a" to listOf(\n 1, 2\n ), "b" to listOf(\n 3, 4\n )\n))\n```\n\nNormally a `Builder` class\'s `build` method will throw [`IllegalStateException`](https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html) if any required parameter or property is unset.\n\nTo forcibly omit a required parameter or property, pass [`JsonMissing`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.JsonMissing\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .destination(JsonMissing.of())\n .build()\n```\n\n### Response properties\n\nTo access undocumented response properties, call the `_additionalProperties()` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonBoolean\nimport com.lightspark.grid.core.JsonNull\nimport com.lightspark.grid.core.JsonNumber\nimport com.lightspark.grid.core.JsonValue\n\nval additionalProperties: Map = client.quotes().create(params)._additionalProperties()\nval secretPropertyValue: JsonValue = additionalProperties.get("secretProperty")\n\nval result = when (secretPropertyValue) {\n is JsonNull -> "It\'s null!"\n is JsonBoolean -> "It\'s a boolean!"\n is JsonNumber -> "It\'s a number!"\n // Other types include `JsonMissing`, `JsonString`, `JsonArray`, and `JsonObject`\n else -> "It\'s something else!"\n}\n```\n\nTo access a property\'s raw JSON value, which may be undocumented, call its `_` prefixed method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonField\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\n\nval destination: JsonField = client.quotes().create(params)._destination()\n\nif (destination.isMissing()) {\n // The property is absent from the JSON response\n} else if (destination.isNull()) {\n // The property was set to literal null\n} else {\n // Check if value was provided as a string\n // Other methods include `asNumber()`, `asBoolean()`, etc.\n val jsonString: String? = destination.asString();\n\n // Try to deserialize into a custom type\n val myObject: MyClass = destination.asUnknown()!!.convert(MyClass::class.java)\n}\n```\n\n### Response validation\n\nIn rare cases, the API may return a response that doesn\'t match the expected type. For example, the SDK may expect a property to contain a `String`, but the API could return something else.\n\nBy default, the SDK will not throw an exception in this case. It will throw [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt) only if you directly access the property.\n\nValidating the response is _not_ forwards compatible with new types from the API for existing fields.\n\nIf you would still prefer to check that the response is completely well-typed upfront, then either call `validate()`:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(params).validate()\n```\n\nOr configure the method call to validate the response using the `responseValidation` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().responseValidation(true).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .responseValidation(true)\n .build()\n```\n\n## FAQ\n\n### Why don\'t you use plain `enum` classes?\n\nKotlin `enum` classes are not trivially [forwards compatible](https://www.stainless.com/blog/making-java-enums-forwards-compatible). Using them in the SDK could cause runtime exceptions if the API is updated to respond with a new enum value.\n\n### Why do you represent fields using `JsonField` instead of just plain `T`?\n\nUsing `JsonField` enables a few features:\n\n- Allowing usage of [undocumented API functionality](#undocumented-api-functionality)\n- Lazily [validating the API response against the expected shape](#response-validation)\n- Representing absent vs explicitly null values\n\n### Why don\'t you use [`data` classes](https://kotlinlang.org/docs/data-classes.html)?\n\nIt is not [backwards compatible to add new fields to a data class](https://kotlinlang.org/docs/api-guidelines-backward-compatibility.html#avoid-using-data-classes-in-your-api) and we don\'t want to introduce a breaking change every time we add a field to a class.\n\n### Why don\'t you use checked exceptions?\n\nChecked exceptions are widely considered a mistake in the Java programming language. In fact, they were omitted from Kotlin for this reason.\n\nChecked exceptions:\n\n- Are verbose to handle\n- Encourage error handling at the wrong level of abstraction, where nothing can be done about the error\n- Are tedious to propagate due to the [function coloring problem](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function)\n- Don\'t play well with lambdas (also due to the function coloring problem)\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-kotlin-sdk/issues) with questions, bugs, or suggestions.\n', + '# Lightspark Grid Kotlin API Library\n\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.lightspark.grid/lightspark-grid-kotlin)](https://central.sonatype.com/artifact/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n[![javadoc](https://javadoc.io/badge2/com.lightspark.grid/lightspark-grid-kotlin/0.0.1/javadoc.svg)](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n\n\nThe Lightspark Grid Kotlin SDK provides convenient access to the [Lightspark Grid REST API](grid.lightspark.com) from applications written in Kotlin.\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n\n\nKDocs are available on [javadoc.io](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1).\n\n\n\n## Installation\n\n\n\n### Gradle\n\n~~~kotlin\nimplementation("com.lightspark.grid:lightspark-grid-kotlin:0.0.1")\n~~~\n\n### Maven\n\n~~~xml\n\n com.lightspark.grid\n lightspark-grid-kotlin\n 0.0.1\n\n~~~\n\n\n\n## Requirements\n\nThis library requires Java 8 or later.\n\n## Usage\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\n## Client configuration\n\nConfigure the client using system properties or environment variables:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n```\n\nOr manually:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .username("My Username")\n .password("My Password")\n .build()\n```\n\nOr using a combination of the two approaches:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n // Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n // Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\n .fromEnv()\n .username("My Username")\n .build()\n```\n\nSee this table for the available options:\n\n| Setter | System property | Environment variable | Required | Default value |\n| ------------------ | ---------------------------------- | -------------------------- | -------- | ---------------------------------------------- |\n| `username` | `lightsparkgrid.gridClientId` | `GRID_CLIENT_ID` | true | - |\n| `password` | `lightsparkgrid.gridClientSecret` | `GRID_CLIENT_SECRET` | true | - |\n| `webhookSignature` | `lightsparkgrid.gridWebhookPubkey` | `GRID_WEBHOOK_PUBKEY` | false | - |\n| `baseUrl` | `lightsparkgrid.baseUrl` | `LIGHTSPARK_GRID_BASE_URL` | true | `"https://api.lightspark.com/grid/2025-10-13"` |\n\nSystem properties take precedence over environment variables.\n\n> [!TIP]\n> Don\'t create more than one client in the same application. Each client has a connection pool and\n> thread pools, which are more efficient to share between requests.\n\n### Modifying configuration\n\nTo temporarily use a modified client configuration, while reusing the same connection and thread pools, call `withOptions()` on any client or service:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\n\nval clientWithOptions: LightsparkGridClient = client.withOptions {\n it.baseUrl("https://example.com")\n it.maxRetries(42)\n}\n```\n\nThe `withOptions()` method does not affect the original client or service.\n\n## Requests and responses\n\nTo send a request to the Lightspark Grid API, build an instance of some `Params` class and pass it to the corresponding client method. When the response is received, it will be deserialized into an instance of a Kotlin class.\n\nFor example, `client.quotes().create(...)` should be called with an instance of `QuoteCreateParams`, and it will return an instance of `Quote`.\n\n## Immutability\n\nEach class in the SDK has an associated [builder](https://blogs.oracle.com/javamagazine/post/exploring-joshua-blochs-builder-design-pattern-in-java) or factory method for constructing it.\n\nEach class is [immutable](https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html) once constructed. If the class has an associated builder, then it has a `toBuilder()` method, which can be used to convert it back to a builder for making a modified copy.\n\nBecause each class is immutable, builder modification will _never_ affect already built class instances.\n\n## Asynchronous execution\n\nThe default client is synchronous. To switch to asynchronous execution, call the `async()` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.async().quotes().create(params)\n```\n\nOr create an asynchronous client from the beginning:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClientAsync\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClientAsync\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClientAsync = LightsparkGridOkHttpClientAsync.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\nThe asynchronous client supports the same options as the synchronous one, except most methods are [suspending](https://kotlinlang.org/docs/coroutines-guide.html).\n\n\n\n## File uploads\n\nThe SDK defines methods that accept files.\n\nTo upload a file, pass a [`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.nio.file.Paths\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(Paths.get("/path/to/file"))\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr an arbitrary [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(URL("https://example.com//path/to/file").openStream())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr a `ByteArray`:\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file("content".toByteArray())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nNote that when passing a non-`Path` its filename is unknown so it will not be included in the request. To manually set a filename, pass a [`MultipartField`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.MultipartField\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.io.InputStream\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(MultipartField.builder()\n .value(URL("https://example.com//path/to/file").openStream())\n .filename("/path/to/file")\n .build())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\n\n\n## Raw responses\n\nThe SDK defines methods that deserialize responses into instances of Kotlin classes. However, these methods don\'t provide access to the response headers, status code, or the raw response body.\n\nTo access this data, prefix any HTTP method call on a client or service with `withRawResponse()`:\n\n```kotlin\nimport com.lightspark.grid.core.http.Headers\nimport com.lightspark.grid.core.http.HttpResponseFor\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: HttpResponseFor = client.quotes().withRawResponse().create(params)\n\nval statusCode: Int = quote.statusCode()\nval headers: Headers = quote.headers()\n```\n\nYou can still deserialize the response into an instance of a Kotlin class if needed:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval parsedQuote: Quote = quote.parse()\n```\n\n## Error handling\n\nThe SDK throws custom unchecked exception types:\n\n- [`LightsparkGridServiceException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridServiceException.kt): Base class for HTTP errors. See this table for which exception subclass is thrown for each HTTP status code:\n\n | Status | Exception |\n | ------ | -------------------------------------------------- |\n | 400 | [`BadRequestException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/BadRequestException.kt) |\n | 401 | [`UnauthorizedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnauthorizedException.kt) |\n | 403 | [`PermissionDeniedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/PermissionDeniedException.kt) |\n | 404 | [`NotFoundException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/NotFoundException.kt) |\n | 422 | [`UnprocessableEntityException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnprocessableEntityException.kt) |\n | 429 | [`RateLimitException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/RateLimitException.kt) |\n | 5xx | [`InternalServerException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/InternalServerException.kt) |\n | others | [`UnexpectedStatusCodeException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnexpectedStatusCodeException.kt) |\n\n- [`LightsparkGridIoException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridIoException.kt): I/O networking errors.\n\n- [`LightsparkGridRetryableException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridRetryableException.kt): Generic error indicating a failure that could be retried by the client.\n\n- [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt): Failure to interpret successfully parsed data. For example, when accessing a property that\'s supposed to be required, but the API unexpectedly omitted it from the response.\n\n- [`LightsparkGridException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridException.kt): Base class for all exceptions. Most errors will result in one of the previously mentioned ones, but completely generic errors may be thrown using the base class.\n\n## Pagination\n\nThe SDK defines methods that return a paginated lists of results. It provides convenient ways to access the results either one page at a time or item-by-item across all pages.\n\n### Auto-pagination\n\nTo iterate through all results across all pages, use the `autoPager()` method, which automatically fetches more pages as needed.\n\nWhen using the synchronous client, the method returns a [`Sequence`](https://kotlinlang.org/docs/sequences.html)\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\n\nval page: CustomerListPage = client.customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\nWhen using the asynchronous client, the method returns a [`Flow`](https://kotlinlang.org/docs/flow.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPageAsync\n\nval page: CustomerListPageAsync = client.async().customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\n### Manual pagination\n\nTo access individual page items and manually request the next page, use the `items()`,\n`hasNextPage()`, and `nextPage()` methods:\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\nimport com.lightspark.grid.models.customers.CustomerOneOf\n\nval page: CustomerListPage = client.customers().list()\nwhile (true) {\n for (customer in page.items()) {\n println(customer)\n }\n\n if (!page.hasNextPage()) {\n break\n }\n\n page = page.nextPage()\n}\n```\n\n## Logging\n\nThe SDK uses the standard [OkHttp logging interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor).\n\nEnable logging by setting the `LIGHTSPARK_GRID_LOG` environment variable to `info`:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=debug\n```\n\n## ProGuard and R8\n\nAlthough the SDK uses reflection, it is still usable with [ProGuard](https://github.com/Guardsquare/proguard) and [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization) because `lightspark-grid-kotlin-core` is published with a [configuration file](lightspark-grid-kotlin-core/src/main/resources/META-INF/proguard/lightspark-grid-kotlin-core.pro) containing [keep rules](https://www.guardsquare.com/manual/configuration/usage).\n\nProGuard and R8 should automatically detect and use the published rules, but you can also manually copy the keep rules if necessary.\n\n\n\n\n\n## Jackson\n\nThe SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.18.2 by default.\n\nThe SDK throws an exception if it detects an incompatible Jackson version at runtime (e.g. if the default version was overridden in your Maven or Gradle config).\n\nIf the SDK threw an exception, but you\'re _certain_ the version is compatible, then disable the version check using the `checkJacksonVersionCompatibility` on [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt).\n\n> [!CAUTION]\n> We make no guarantee that the SDK works correctly when the Jackson version check is disabled.\n\nAlso note that there are bugs in older Jackson versions that can affect the SDK. We don\'t work around all Jackson bugs ([example](https://github.com/FasterXML/jackson-databind/issues/3240)) and expect users to upgrade Jackson for those instead.\n\n## Network options\n\n### Retries\n\nThe SDK automatically retries 2 times by default, with a short exponential backoff between requests.\n\nOnly the following error types are retried:\n- Connection errors (for example, due to a network connectivity problem)\n- 408 Request Timeout\n- 409 Conflict\n- 429 Rate Limit\n- 5xx Internal\n\nThe API may also explicitly instruct the SDK to retry or not retry a request.\n\nTo set a custom number of retries, configure the client using the `maxRetries` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .maxRetries(4)\n .build()\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default.\n\nTo set a custom timeout, configure the method call using the `timeout` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().timeout(Duration.ofSeconds(30)).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .timeout(Duration.ofSeconds(30))\n .build()\n```\n\n### Proxies\n\nTo route requests through a proxy, configure the client using the `proxy` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.net.InetSocketAddress\nimport java.net.Proxy\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(Proxy(\n Proxy.Type.HTTP, InetSocketAddress(\n "https://example.com", 8080\n )\n ))\n .build()\n```\n\nIf the proxy responds with `407 Proxy Authentication Required`, supply credentials by also configuring `proxyAuthenticator`:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.core.http.ProxyAuthenticator\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(...)\n // Or a custom implementation of `ProxyAuthenticator`.\n .proxyAuthenticator(ProxyAuthenticator.basic("username", "password"))\n .build()\n```\n\n### Connection pooling\n\nTo customize the underlying OkHttp connection pool, configure the client using the `maxIdleConnections` and `keepAliveDuration` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `maxIdleConnections` is set, then `keepAliveDuration` must be set, and vice versa.\n .maxIdleConnections(10)\n .keepAliveDuration(Duration.ofMinutes(2))\n .build()\n```\n\nIf both options are unset, OkHttp\'s default connection pool settings are used.\n\n### HTTPS\n\n> [!NOTE]\n> Most applications should not call these methods, and instead use the system defaults. The defaults include\n> special optimizations that can be lost if the implementations are modified.\n\nTo configure how HTTPS connections are secured, configure the client using the `sslSocketFactory`, `trustManager`, and `hostnameVerifier` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `sslSocketFactory` is set, then `trustManager` must be set, and vice versa.\n .sslSocketFactory(yourSSLSocketFactory)\n .trustManager(yourTrustManager)\n .hostnameVerifier(yourHostnameVerifier)\n .build()\n```\n\n\n\n### Custom HTTP client\n\nThe SDK consists of three artifacts:\n- `lightspark-grid-kotlin-core`\n - Contains core SDK logic\n - Does not depend on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClient.kt), [`LightsparkGridClientAsync`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsync.kt), [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt), and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), all of which can work with any HTTP client\n- `lightspark-grid-kotlin-client-okhttp`\n - Depends on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) and [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), which provide a way to construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), respectively, using OkHttp\n- `lightspark-grid-kotlin`\n - Depends on and exposes the APIs of both `lightspark-grid-kotlin-core` and `lightspark-grid-kotlin-client-okhttp`\n - Does not have its own logic\n\nThis structure allows replacing the SDK\'s default HTTP client without pulling in unnecessary dependencies.\n\n#### Customized [`OkHttpClient`](https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html)\n\n> [!TIP]\n> Try the available [network options](#network-options) before replacing the default client.\n\nTo use a customized `OkHttpClient`:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Copy `lightspark-grid-kotlin-client-okhttp`\'s [`OkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/OkHttpClient.kt) class into your code and customize it\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your customized client\n\n### Completely custom HTTP client\n\nTo use a completely custom HTTP client:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Write a class that implements the [`HttpClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/http/HttpClient.kt) interface\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your new client class\n\n## Undocumented API functionality\n\nThe SDK is typed for convenient usage of the documented API. However, it also supports working with undocumented or not yet supported parts of the API.\n\n### Parameters\n\nTo set undocumented parameters, call the `putAdditionalHeader`, `putAdditionalQueryParam`, or `putAdditionalBodyProperty` methods on any `Params` class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .putAdditionalHeader("Secret-Header", "42")\n .putAdditionalQueryParam("secret_query_param", "42")\n .putAdditionalBodyProperty("secretProperty", JsonValue.from("42"))\n .build()\n```\n\nThese can be accessed on the built object later using the `_additionalHeaders()`, `_additionalQueryParams()`, and `_additionalBodyProperties()` methods.\n\nTo set undocumented parameters on _nested_ headers, query params, or body classes, call the `putAdditionalProperty` method on the nested class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.transferin.InternalAccountReference\nimport com.lightspark.grid.models.transferin.TransferInCreateParams\n\nval params: TransferInCreateParams = TransferInCreateParams.builder()\n .destination(InternalAccountReference.builder()\n .putAdditionalProperty("secretProperty", JsonValue.from("42"))\n .build())\n .build()\n```\n\nThese properties can be accessed on the nested built object later using the `_additionalProperties()` method.\n\nTo set a documented parameter or property to an undocumented or not yet supported _value_, pass a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) object to its setter:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(JsonValue.from(42))\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n```\n\nThe most straightforward way to create a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) is using its `from(...)` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\n\n// Create primitive JSON values\nval nullValue: JsonValue = JsonValue.from(null)\nval booleanValue: JsonValue = JsonValue.from(true)\nval numberValue: JsonValue = JsonValue.from(42)\nval stringValue: JsonValue = JsonValue.from("Hello World!")\n\n// Create a JSON array value equivalent to `["Hello", "World"]`\nval arrayValue: JsonValue = JsonValue.from(listOf(\n "Hello", "World"\n))\n\n// Create a JSON object value equivalent to `{ "a": 1, "b": 2 }`\nval objectValue: JsonValue = JsonValue.from(mapOf(\n "a" to 1, "b" to 2\n))\n\n// Create an arbitrarily nested JSON equivalent to:\n// {\n// "a": [1, 2],\n// "b": [3, 4]\n// }\nval complexValue: JsonValue = JsonValue.from(mapOf(\n "a" to listOf(\n 1, 2\n ), "b" to listOf(\n 3, 4\n )\n))\n```\n\nNormally a `Builder` class\'s `build` method will throw [`IllegalStateException`](https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html) if any required parameter or property is unset.\n\nTo forcibly omit a required parameter or property, pass [`JsonMissing`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.JsonMissing\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .destination(JsonMissing.of())\n .build()\n```\n\n### Response properties\n\nTo access undocumented response properties, call the `_additionalProperties()` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonBoolean\nimport com.lightspark.grid.core.JsonNull\nimport com.lightspark.grid.core.JsonNumber\nimport com.lightspark.grid.core.JsonValue\n\nval additionalProperties: Map = client.quotes().create(params)._additionalProperties()\nval secretPropertyValue: JsonValue = additionalProperties.get("secretProperty")\n\nval result = when (secretPropertyValue) {\n is JsonNull -> "It\'s null!"\n is JsonBoolean -> "It\'s a boolean!"\n is JsonNumber -> "It\'s a number!"\n // Other types include `JsonMissing`, `JsonString`, `JsonArray`, and `JsonObject`\n else -> "It\'s something else!"\n}\n```\n\nTo access a property\'s raw JSON value, which may be undocumented, call its `_` prefixed method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonField\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\n\nval destination: JsonField = client.quotes().create(params)._destination()\n\nif (destination.isMissing()) {\n // The property is absent from the JSON response\n} else if (destination.isNull()) {\n // The property was set to literal null\n} else {\n // Check if value was provided as a string\n // Other methods include `asNumber()`, `asBoolean()`, etc.\n val jsonString: String? = destination.asString();\n\n // Try to deserialize into a custom type\n val myObject: MyClass = destination.asUnknown()!!.convert(MyClass::class.java)\n}\n```\n\n### Response validation\n\nIn rare cases, the API may return a response that doesn\'t match the expected type. For example, the SDK may expect a property to contain a `String`, but the API could return something else.\n\nBy default, the SDK will not throw an exception in this case. It will throw [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt) only if you directly access the property.\n\nValidating the response is _not_ forwards compatible with new types from the API for existing fields.\n\nIf you would still prefer to check that the response is completely well-typed upfront, then either call `validate()`:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(params).validate()\n```\n\nOr configure the method call to validate the response using the `responseValidation` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().responseValidation(true).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .responseValidation(true)\n .build()\n```\n\n## FAQ\n\n### Why don\'t you use plain `enum` classes?\n\nKotlin `enum` classes are not trivially [forwards compatible](https://www.stainless.com/blog/making-java-enums-forwards-compatible). Using them in the SDK could cause runtime exceptions if the API is updated to respond with a new enum value.\n\n### Why do you represent fields using `JsonField` instead of just plain `T`?\n\nUsing `JsonField` enables a few features:\n\n- Allowing usage of [undocumented API functionality](#undocumented-api-functionality)\n- Lazily [validating the API response against the expected shape](#response-validation)\n- Representing absent vs explicitly null values\n\n### Why don\'t you use [`data` classes](https://kotlinlang.org/docs/data-classes.html)?\n\nIt is not [backwards compatible to add new fields to a data class](https://kotlinlang.org/docs/api-guidelines-backward-compatibility.html#avoid-using-data-classes-in-your-api) and we don\'t want to introduce a breaking change every time we add a field to a class.\n\n### Why don\'t you use checked exceptions?\n\nChecked exceptions are widely considered a mistake in the Java programming language. In fact, they were omitted from Kotlin for this reason.\n\nChecked exceptions:\n\n- Are verbose to handle\n- Encourage error handling at the wrong level of abstraction, where nothing can be done about the error\n- Are tedious to propagate due to the [function coloring problem](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function)\n- Don\'t play well with lambdas (also due to the function coloring problem)\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-kotlin-sdk/issues) with questions, bugs, or suggestions.\n', }, { language: 'python', From be789de7b9b7b0349d9405ce3fb4241a4e0704dc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 18:36:57 +0000 Subject: [PATCH 18/26] feat(api): add document type enum values to documents resource --- .stats.yml | 4 +- packages/mcp-server/src/local-docs-search.ts | 4 +- src/resources/documents.ts | 126 +++++++++++-------- src/resources/shared.ts | 30 +++-- 4 files changed, 93 insertions(+), 71 deletions(-) diff --git a/.stats.yml b/.stats.yml index 44cbbd5..75461a6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-cc69557abbd885ca6d1051cc1814e429e87c0150608e8c87447aaa38f5bb8d58.yml -openapi_spec_hash: a8ea5774318217dcf62b7b415e1315ca +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-64688315faac4c72cb3f7826799fe393acc70c7794902f8b30d8b68e611be1f6.yml +openapi_spec_hash: 3daa9f76dcb7185ad92df19aec3e2e09 config_hash: 45b0e0c4ce3cd07831ec238d208eddc5 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 2fcfb5d..81e1372 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -1971,7 +1971,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }", markdown: - "## upload\n\n`client.documents.upload(country: string, documentHolder: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**post** `/documents`\n\nUpload a verification document for a customer or beneficial owner. The request must use multipart/form-data with the file in the `file` field and metadata in the remaining fields.\n\nSupported file types: PDF, JPEG, PNG. Maximum file size: 10 MB.\n\n\n### Parameters\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentHolder: string`\n ID of the entity that owns this document. Can be a Customer ID or a BeneficialOwner ID.\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE\n**Business — Control structure** — ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION\n**Proof of address** — PROOF_OF_ADDRESS\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.upload({\n country: 'US',\n documentHolder: 'BeneficialOwner:019542f5-b3e7-1d02-0000-000000000001',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", + "## upload\n\n`client.documents.upload(country: string, documentHolder: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**post** `/documents`\n\nUpload a verification document for a customer or beneficial owner. The request must use multipart/form-data with the file in the `file` field and metadata in the remaining fields.\n\nSupported file types: PDF, JPEG, PNG. Maximum file size: 10 MB.\n\n\n### Parameters\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentHolder: string`\n ID of the entity that owns this document. Can be a Customer ID or a BeneficialOwner ID.\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, OTHER\n**Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.upload({\n country: 'US',\n documentHolder: 'BeneficialOwner:019542f5-b3e7-1d02-0000-000000000001',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.documents.upload', @@ -2084,7 +2084,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }", markdown: - "## replace\n\n`client.documents.replace(documentId: string, country: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**put** `/documents/{documentId}`\n\nReplace an existing document with a new file and/or updated metadata. This is useful when a document was rejected and needs to be re-uploaded. The request must use multipart/form-data.\n\n\n### Parameters\n\n- `documentId: string`\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE\n**Business — Control structure** — ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION\n**Proof of address** — PROOF_OF_ADDRESS\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.replace('documentId', {\n country: 'US',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", + "## replace\n\n`client.documents.replace(documentId: string, country: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**put** `/documents/{documentId}`\n\nReplace an existing document with a new file and/or updated metadata. This is useful when a document was rejected and needs to be re-uploaded. The request must use multipart/form-data.\n\n\n### Parameters\n\n- `documentId: string`\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, OTHER\n**Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.replace('documentId', {\n country: 'US',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.documents.replace', diff --git a/src/resources/documents.ts b/src/resources/documents.ts index ec06274..cd3a65c 100644 --- a/src/resources/documents.ts +++ b/src/resources/documents.ts @@ -144,15 +144,11 @@ export interface DocumentRetrieveResponse { * by verification category: **Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID * **Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT - * **Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, - * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, - * CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE - * **Business — Control structure** — ARTICLES_OF_INCORPORATION, - * ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, - * STATE_REGISTRY_EXCERPT **Business — Ownership structure** — - * SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, - * STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION - * **Proof of address** — PROOF_OF_ADDRESS + * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, + * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, + * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, + * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -172,6 +168,13 @@ export interface DocumentRetrieveResponse { | 'SHAREHOLDER_REGISTER' | 'POWER_OF_ATTORNEY' | 'UTILITY_BILL' + | 'ELECTRICITY_BILL' + | 'RENT_OR_LEASE_AGREEMENT' + | 'DIRECTOR_REGISTRY' + | 'TRUST_AGREEMENT' + | 'STATE_COMPANY_REGISTRY' + | 'PARTNERSHIP_CONTROL_AGREEMENT' + | 'PARTNERSHIP_AGREEMENT' | 'SELFIE' | 'OTHER'; @@ -224,15 +227,11 @@ export interface DocumentListResponse { * by verification category: **Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID * **Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT - * **Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, - * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, - * CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE - * **Business — Control structure** — ARTICLES_OF_INCORPORATION, - * ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, - * STATE_REGISTRY_EXCERPT **Business — Ownership structure** — - * SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, - * STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION - * **Proof of address** — PROOF_OF_ADDRESS + * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, + * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, + * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, + * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -252,6 +251,13 @@ export interface DocumentListResponse { | 'SHAREHOLDER_REGISTER' | 'POWER_OF_ATTORNEY' | 'UTILITY_BILL' + | 'ELECTRICITY_BILL' + | 'RENT_OR_LEASE_AGREEMENT' + | 'DIRECTOR_REGISTRY' + | 'TRUST_AGREEMENT' + | 'STATE_COMPANY_REGISTRY' + | 'PARTNERSHIP_CONTROL_AGREEMENT' + | 'PARTNERSHIP_AGREEMENT' | 'SELFIE' | 'OTHER'; @@ -304,15 +310,11 @@ export interface DocumentReplaceResponse { * by verification category: **Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID * **Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT - * **Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, - * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, - * CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE - * **Business — Control structure** — ARTICLES_OF_INCORPORATION, - * ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, - * STATE_REGISTRY_EXCERPT **Business — Ownership structure** — - * SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, - * STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION - * **Proof of address** — PROOF_OF_ADDRESS + * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, + * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, + * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, + * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -332,6 +334,13 @@ export interface DocumentReplaceResponse { | 'SHAREHOLDER_REGISTER' | 'POWER_OF_ATTORNEY' | 'UTILITY_BILL' + | 'ELECTRICITY_BILL' + | 'RENT_OR_LEASE_AGREEMENT' + | 'DIRECTOR_REGISTRY' + | 'TRUST_AGREEMENT' + | 'STATE_COMPANY_REGISTRY' + | 'PARTNERSHIP_CONTROL_AGREEMENT' + | 'PARTNERSHIP_AGREEMENT' | 'SELFIE' | 'OTHER'; @@ -384,15 +393,11 @@ export interface DocumentUploadResponse { * by verification category: **Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID * **Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT - * **Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, - * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, - * CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE - * **Business — Control structure** — ARTICLES_OF_INCORPORATION, - * ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, - * STATE_REGISTRY_EXCERPT **Business — Ownership structure** — - * SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, - * STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION - * **Proof of address** — PROOF_OF_ADDRESS + * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, + * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, + * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, + * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -412,6 +417,13 @@ export interface DocumentUploadResponse { | 'SHAREHOLDER_REGISTER' | 'POWER_OF_ATTORNEY' | 'UTILITY_BILL' + | 'ELECTRICITY_BILL' + | 'RENT_OR_LEASE_AGREEMENT' + | 'DIRECTOR_REGISTRY' + | 'TRUST_AGREEMENT' + | 'STATE_COMPANY_REGISTRY' + | 'PARTNERSHIP_CONTROL_AGREEMENT' + | 'PARTNERSHIP_AGREEMENT' | 'SELFIE' | 'OTHER'; @@ -460,15 +472,11 @@ export interface DocumentReplaceParams { * by verification category: **Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID * **Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT - * **Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, - * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, - * CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE - * **Business — Control structure** — ARTICLES_OF_INCORPORATION, - * ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, - * STATE_REGISTRY_EXCERPT **Business — Ownership structure** — - * SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, - * STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION - * **Proof of address** — PROOF_OF_ADDRESS + * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, + * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, + * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, + * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -488,6 +496,13 @@ export interface DocumentReplaceParams { | 'SHAREHOLDER_REGISTER' | 'POWER_OF_ATTORNEY' | 'UTILITY_BILL' + | 'ELECTRICITY_BILL' + | 'RENT_OR_LEASE_AGREEMENT' + | 'DIRECTOR_REGISTRY' + | 'TRUST_AGREEMENT' + | 'STATE_COMPANY_REGISTRY' + | 'PARTNERSHIP_CONTROL_AGREEMENT' + | 'PARTNERSHIP_AGREEMENT' | 'SELFIE' | 'OTHER'; @@ -524,15 +539,11 @@ export interface DocumentUploadParams { * by verification category: **Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID * **Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT - * **Business — Company details** — INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, - * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, - * CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE - * **Business — Control structure** — ARTICLES_OF_INCORPORATION, - * ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, - * STATE_REGISTRY_EXCERPT **Business — Ownership structure** — - * SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, - * STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION - * **Proof of address** — PROOF_OF_ADDRESS + * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, + * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, + * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, + * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -552,6 +563,13 @@ export interface DocumentUploadParams { | 'SHAREHOLDER_REGISTER' | 'POWER_OF_ATTORNEY' | 'UTILITY_BILL' + | 'ELECTRICITY_BILL' + | 'RENT_OR_LEASE_AGREEMENT' + | 'DIRECTOR_REGISTRY' + | 'TRUST_AGREEMENT' + | 'STATE_COMPANY_REGISTRY' + | 'PARTNERSHIP_CONTROL_AGREEMENT' + | 'PARTNERSHIP_AGREEMENT' | 'SELFIE' | 'OTHER'; diff --git a/src/resources/shared.ts b/src/resources/shared.ts index f6e546b..47a6397 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -1263,7 +1263,6 @@ export interface VerificationError { | 'MISSING_FIELD' | 'INVALID_FIELD' | 'MISSING_LEGAL_PRESENCE_DOCUMENT' - | 'MISSING_COMPANY_DETAILS_DOCUMENT' | 'MISSING_CONTROL_STRUCTURE_DOCUMENT' | 'MISSING_OWNERSHIP_STRUCTURE_DOCUMENT' | 'MISSING_PROOF_OF_ADDRESS_DOCUMENT' @@ -1285,19 +1284,17 @@ export interface VerificationError { /** * Document types that would satisfy this requirement. The integrator can upload * any one of the listed types. Present when type is - * MISSING_LEGAL_PRESENCE_DOCUMENT, MISSING_COMPANY_DETAILS_DOCUMENT, - * MISSING_CONTROL_STRUCTURE_DOCUMENT, MISSING_OWNERSHIP_STRUCTURE_DOCUMENT, - * MISSING_PROOF_OF_ADDRESS_DOCUMENT, MISSING_IDENTITY_DOCUMENT, INVALID_DOCUMENT, - * or EXPIRED_DOCUMENT. + * MISSING_LEGAL_PRESENCE_DOCUMENT, MISSING_CONTROL_STRUCTURE_DOCUMENT, + * MISSING_OWNERSHIP_STRUCTURE_DOCUMENT, MISSING_PROOF_OF_ADDRESS_DOCUMENT, + * MISSING_IDENTITY_DOCUMENT, INVALID_DOCUMENT, or EXPIRED_DOCUMENT. * - * | Error Type | Accepted Document Types | - * | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - * | MISSING_LEGAL_PRESENCE_DOCUMENT | CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT | - * | MISSING_COMPANY_DETAILS_DOCUMENT | INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, CERTIFICATE_OF_INCORPORATION, INCUMBENCY_CERTIFICATE, GOOD_STANDING_CERTIFICATE | - * | MISSING_CONTROL_STRUCTURE_DOCUMENT | ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, INCUMBENCY_CERTIFICATE, INFORMATION_STATEMENT, STATE_REGISTRY_EXCERPT | - * | MISSING_OWNERSHIP_STRUCTURE_DOCUMENT | SHAREHOLDER_REGISTER, INFORMATION_STATEMENT, INCUMBENCY_CERTIFICATE, STATE_REGISTRY_EXCERPT, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION | - * | MISSING_PROOF_OF_ADDRESS_DOCUMENT | PROOF_OF_ADDRESS | - * | MISSING_IDENTITY_DOCUMENT | PASSPORT, DRIVERS_LICENSE, NATIONAL_ID | + * | Error Type | Accepted Document Types | + * | ------------------------------------ | -------------------------------------------------------------------------------------------------------- | + * | MISSING_LEGAL_PRESENCE_DOCUMENT | CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT | + * | MISSING_CONTROL_STRUCTURE_DOCUMENT | DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT | + * | MISSING_OWNERSHIP_STRUCTURE_DOCUMENT | SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, OTHER | + * | MISSING_PROOF_OF_ADDRESS_DOCUMENT | UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN | + * | MISSING_IDENTITY_DOCUMENT | PASSPORT, DRIVERS_LICENSE, NATIONAL_ID | */ acceptedDocumentTypes?: Array< | 'PASSPORT' @@ -1317,6 +1314,13 @@ export interface VerificationError { | 'SHAREHOLDER_REGISTER' | 'POWER_OF_ATTORNEY' | 'UTILITY_BILL' + | 'ELECTRICITY_BILL' + | 'RENT_OR_LEASE_AGREEMENT' + | 'DIRECTOR_REGISTRY' + | 'TRUST_AGREEMENT' + | 'STATE_COMPANY_REGISTRY' + | 'PARTNERSHIP_CONTROL_AGREEMENT' + | 'PARTNERSHIP_AGREEMENT' | 'SELFIE' | 'OTHER' >; From a15ca2e64a42a7e8271e61a9fdab81a196b444ae Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 21:14:47 +0000 Subject: [PATCH 19/26] fix(types): make clientPublicKey required in EmailOtpCredentialVerifyRequest --- .stats.yml | 6 +- api.md | 51 ++- packages/mcp-server/src/code-tool-worker.ts | 22 +- packages/mcp-server/src/local-docs-search.ts | 344 +++++++++--------- packages/mcp-server/src/methods.ts | 78 ++-- scripts/detect-breaking-changes | 2 +- src/client.ts | 10 +- src/resources/agents/agents.ts | 248 ++++++------- src/resources/agents/device-codes.ts | 66 ++-- src/resources/agents/index.ts | 23 +- src/resources/agents/me/external-accounts.ts | 96 ++--- src/resources/agents/me/index.ts | 18 +- src/resources/agents/me/me.ts | 192 +++++----- src/resources/agents/transactions.ts | 5 + src/resources/auth/credentials.ts | 20 +- src/resources/index.ts | 5 +- tests/api-resources/agents/agents.test.ts | 8 +- .../api-resources/agents/device-codes.test.ts | 8 +- .../agents/me/external-accounts.test.ts | 62 ++-- tests/api-resources/agents/me/me.test.ts | 74 ++-- tests/api-resources/auth/credentials.test.ts | 11 +- 21 files changed, 655 insertions(+), 694 deletions(-) create mode 100644 src/resources/agents/transactions.ts diff --git a/.stats.yml b/.stats.yml index 75461a6..a1e20cf 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-64688315faac4c72cb3f7826799fe393acc70c7794902f8b30d8b68e611be1f6.yml -openapi_spec_hash: 3daa9f76dcb7185ad92df19aec3e2e09 -config_hash: 45b0e0c4ce3cd07831ec238d208eddc5 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-25c9bc1387bc0bbac891dc7bc37d5e83c363a4d5c3e9057a6b24700dc6787073.yml +openapi_spec_hash: b87bf651e75289ba88448c82bc67d827 +config_hash: ed09c0afe747c9c6bc0beb25176b1409 diff --git a/api.md b/api.md index 4b20e34..9da41b4 100644 --- a/api.md +++ b/api.md @@ -532,7 +532,7 @@ Types: - AgentRetrieveResponse - AgentUpdateResponse - AgentListResponse -- AgentRetrieveApprovalsResponse +- AgentListApprovalsResponse - AgentUpdatePolicyResponse Methods: @@ -542,24 +542,23 @@ Methods: - client.agents.update(agentID, { ...params }) -> AgentUpdateResponse - client.agents.list({ ...params }) -> AgentListResponsesDefaultPagination - client.agents.delete(agentID) -> void -- client.agents.retrieveApprovals({ ...params }) -> AgentRetrieveApprovalsResponse +- client.agents.listApprovals({ ...params }) -> AgentListApprovalsResponsesDefaultPagination - client.agents.updatePolicy(agentID, { ...params }) -> AgentUpdatePolicyResponse ## Me Types: -- MeListResponse -- MeRetrieveInternalAccountsResponse -- MeTransferInResponse -- MeTransferOutResponse +- MeRetrieveResponse +- MeCreateTransferInResponse +- MeCreateTransferOutResponse Methods: -- client.agents.me.list() -> MeListResponse -- client.agents.me.retrieveInternalAccounts({ ...params }) -> MeRetrieveInternalAccountsResponse -- client.agents.me.transferIn({ ...params }) -> MeTransferInResponse -- client.agents.me.transferOut({ ...params }) -> MeTransferOutResponse +- client.agents.me.retrieve() -> MeRetrieveResponse +- client.agents.me.createTransferIn({ ...params }) -> MeCreateTransferInResponse +- client.agents.me.createTransferOut({ ...params }) -> MeCreateTransferOutResponse +- client.agents.me.listInternalAccounts({ ...params }) -> InternalAccountsDefaultPagination ### Transactions @@ -580,6 +579,15 @@ Methods: - client.agents.me.quotes.retrieve(quoteID) -> Quote - client.agents.me.quotes.execute(quoteID, { ...params }) -> QuoteExecuteResponse +### ExternalAccounts + +Methods: + +- client.agents.me.externalAccounts.retrieve(externalAccountID) -> ExternalAccount +- client.agents.me.externalAccounts.list({ ...params }) -> ExternalAccountsDefaultPagination +- client.agents.me.externalAccounts.delete(externalAccountID) -> void +- client.agents.me.externalAccounts.add({ ...params }) -> ExternalAccount + ### Actions Types: @@ -592,32 +600,21 @@ Methods: - client.agents.me.actions.retrieve(actionID) -> ActionRetrieveResponse - client.agents.me.actions.list({ ...params }) -> ActionListResponsesDefaultPagination -### ExternalAccounts - -Types: - -- ExternalAccountRetrieveExternalAccountsResponse - -Methods: - -- client.agents.me.externalAccounts.retrieve(externalAccountID) -> ExternalAccount -- client.agents.me.externalAccounts.delete(externalAccountID) -> void -- client.agents.me.externalAccounts.externalAccounts({ ...params }) -> ExternalAccount -- client.agents.me.externalAccounts.retrieveExternalAccounts({ ...params }) -> ExternalAccountRetrieveExternalAccountsResponse - ## DeviceCodes Types: -- DeviceCodeDeviceCodesResponse +- DeviceCodeGetStatusResponse - DeviceCodeRedeemResponse -- DeviceCodeRetrieveStatusResponse +- DeviceCodeRegenerateResponse Methods: -- client.agents.deviceCodes.deviceCodes(agentID) -> DeviceCodeDeviceCodesResponse +- client.agents.deviceCodes.getStatus(code) -> DeviceCodeGetStatusResponse - client.agents.deviceCodes.redeem(code) -> DeviceCodeRedeemResponse -- client.agents.deviceCodes.retrieveStatus(code) -> DeviceCodeRetrieveStatusResponse +- client.agents.deviceCodes.regenerate(agentID) -> DeviceCodeRegenerateResponse + +## Transactions ## Actions diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts index 57b1dc2..6471ab4 100644 --- a/packages/mcp-server/src/code-tool-worker.ts +++ b/packages/mcp-server/src/code-tool-worker.ts @@ -179,28 +179,28 @@ const fuse = new Fuse( 'client.agents.create', 'client.agents.delete', 'client.agents.list', + 'client.agents.listApprovals', 'client.agents.retrieve', - 'client.agents.retrieveApprovals', 'client.agents.update', 'client.agents.updatePolicy', - 'client.agents.me.list', - 'client.agents.me.retrieveInternalAccounts', - 'client.agents.me.transferIn', - 'client.agents.me.transferOut', + 'client.agents.me.createTransferIn', + 'client.agents.me.createTransferOut', + 'client.agents.me.listInternalAccounts', + 'client.agents.me.retrieve', 'client.agents.me.transactions.list', 'client.agents.me.transactions.retrieve', 'client.agents.me.quotes.create', 'client.agents.me.quotes.execute', 'client.agents.me.quotes.retrieve', - 'client.agents.me.actions.list', - 'client.agents.me.actions.retrieve', + 'client.agents.me.externalAccounts.add', 'client.agents.me.externalAccounts.delete', - 'client.agents.me.externalAccounts.externalAccounts', + 'client.agents.me.externalAccounts.list', 'client.agents.me.externalAccounts.retrieve', - 'client.agents.me.externalAccounts.retrieveExternalAccounts', - 'client.agents.deviceCodes.deviceCodes', + 'client.agents.me.actions.list', + 'client.agents.me.actions.retrieve', + 'client.agents.deviceCodes.getStatus', 'client.agents.deviceCodes.redeem', - 'client.agents.deviceCodes.retrieveStatus', + 'client.agents.deviceCodes.regenerate', 'client.agents.actions.approve', 'client.agents.actions.reject', ], diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 81e1372..2b1cd4e 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -2333,32 +2333,32 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.auth.credentials.verify', params: [ 'id: string;', - "AuthCredentialVerifyRequest: { otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; clientPublicKey?: string; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; };", + "AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; };", 'Request-Id?: string;', ], response: "{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }", markdown: - "## verify\n\n`client.auth.credentials.verify(id: string, AuthCredentialVerifyRequest: { otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; clientPublicKey?: string; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }, Request-Id?: string): object`\n\n**post** `/auth/credentials/{id}/verify`\n\nComplete the verification step for a previously created authentication credential and issue a session signing key.\n\nFor `EMAIL_OTP` credentials, supply the one-time password that was emailed to the user along with a client-generated public key. For `OAUTH` credentials, supply a fresh OIDC token (`iat` must be less than 60 seconds before the request) along with the client-generated public key; this is also the reauthentication path after a prior session expired. For `PASSKEY` credentials, the client completes a WebAuthn assertion (`navigator.credentials.get()`) against the Grid-issued `challenge` returned from either `POST /auth/credentials` (first authentication) or `POST /auth/credentials/{id}/challenge` (reauthentication), and submits the resulting `assertion` along with the client-generated public key. The `requestId` that accompanied the challenge must be echoed in the `Request-Id` header so Grid can correlate the assertion with the pending challenge; Grid verifies the WebAuthn signature against the stored credential before issuing the session.\n\nOn success, the response contains an `encryptedSessionSigningKey` that is encrypted to the supplied `clientPublicKey`, along with an `expiresAt` timestamp marking when the session expires. The `clientPublicKey` is ephemeral and one-time-use per verification request.\n\n\n### Parameters\n\n- `id: string`\n\n- `AuthCredentialVerifyRequest: { otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; clientPublicKey?: string; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n An authentication session on an Embedded Wallet internal account. Returned from `GET /auth/sessions` (list) and `POST /auth/credentials/{id}/verify` (on credential verification). Only the verify response includes `encryptedSessionSigningKey` — it is delivered exactly once at the moment the session is issued and is never returned by the list endpoint.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.credentials.verify('id', { AuthCredentialVerifyRequest: { otp: '123456', type: 'EMAIL_OTP' } });\n\nconsole.log(response);\n```", + "## verify\n\n`client.auth.credentials.verify(id: string, AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }, Request-Id?: string): object`\n\n**post** `/auth/credentials/{id}/verify`\n\nComplete the verification step for a previously created authentication credential and issue a session signing key.\n\nFor `EMAIL_OTP` credentials, supply the one-time password that was emailed to the user along with a client-generated public key. For `OAUTH` credentials, supply a fresh OIDC token (`iat` must be less than 60 seconds before the request) along with the client-generated public key; this is also the reauthentication path after a prior session expired. For `PASSKEY` credentials, the client completes a WebAuthn assertion (`navigator.credentials.get()`) against the Grid-issued `challenge` returned from either `POST /auth/credentials` (first authentication) or `POST /auth/credentials/{id}/challenge` (reauthentication), and submits the resulting `assertion` along with the client-generated public key. The `requestId` that accompanied the challenge must be echoed in the `Request-Id` header so Grid can correlate the assertion with the pending challenge; Grid verifies the WebAuthn signature against the stored credential before issuing the session.\n\nOn success, the response contains an `encryptedSessionSigningKey` that is encrypted to the supplied `clientPublicKey`, along with an `expiresAt` timestamp marking when the session expires. The `clientPublicKey` is ephemeral and one-time-use per verification request.\n\n\n### Parameters\n\n- `id: string`\n\n- `AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n An authentication session on an Embedded Wallet internal account. Returned from `GET /auth/sessions` (list) and `POST /auth/credentials/{id}/verify` (on credential verification). Only the verify response includes `encryptedSessionSigningKey` — it is delivered exactly once at the moment the session is issued and is never returned by the list endpoint.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.credentials.verify('id', { AuthCredentialVerifyRequest: {\n clientPublicKey: '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n otp: '123456',\n type: 'EMAIL_OTP',\n} });\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.auth.credentials.verify', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.auth.credentials.verify('id', {\n AuthCredentialVerifyRequest: { otp: '123456', type: 'EMAIL_OTP' },\n});\n\nconsole.log(response);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.auth.credentials.verify('id', {\n AuthCredentialVerifyRequest: {\n clientPublicKey:\n '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n otp: '123456',\n type: 'EMAIL_OTP',\n },\n});\n\nconsole.log(response);", }, python: { method: 'auth.credentials.verify', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.auth.credentials.verify(\n id="id",\n auth_credential_verify_request={\n "otp": "123456",\n "type": "EMAIL_OTP",\n },\n)\nprint(response)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.auth.credentials.verify(\n id="id",\n auth_credential_verify_request={\n "client_public_key": "04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n "otp": "123456",\n "type": "EMAIL_OTP",\n },\n)\nprint(response)', }, kotlin: { method: 'auth().credentials().verify', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.CredentialVerifyParams\nimport com.lightspark.grid.models.auth.credentials.CredentialVerifyResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CredentialVerifyParams = CredentialVerifyParams.builder()\n .id("id")\n .authCredentialVerifyRequest(CredentialVerifyParams.AuthCredentialVerifyRequest.EmailOtpCredentialVerifyRequest.builder()\n .otp("123456")\n .type(CredentialVerifyParams.AuthCredentialVerifyRequest.EmailOtpCredentialVerifyRequest.Type.EMAIL_OTP)\n .build())\n .build()\n val response: CredentialVerifyResponse = client.auth().credentials().verify(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.CredentialVerifyParams\nimport com.lightspark.grid.models.auth.credentials.CredentialVerifyResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CredentialVerifyParams = CredentialVerifyParams.builder()\n .id("id")\n .authCredentialVerifyRequest(CredentialVerifyParams.AuthCredentialVerifyRequest.EmailOtpCredentialVerifyRequest.builder()\n .clientPublicKey("04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2")\n .otp("123456")\n .type(CredentialVerifyParams.AuthCredentialVerifyRequest.EmailOtpCredentialVerifyRequest.Type.EMAIL_OTP)\n .build())\n .build()\n val response: CredentialVerifyResponse = client.auth().credentials().verify(params)\n}', }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/auth/credentials/$ID/verify \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "otp": "123456",\n "type": "EMAIL_OTP",\n "clientPublicKey": "04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2"\n }\'', + 'curl https://api.lightspark.com/grid/2025-10-13/auth/credentials/$ID/verify \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "clientPublicKey": "04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n "otp": "123456",\n "type": "EMAIL_OTP"\n }\'', }, }, }, @@ -2668,14 +2668,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'retrieve_approvals', + name: 'list_approvals', endpoint: '/agents/approvals', httpMethod: 'get', summary: 'List agent transaction approval requests', description: 'Retrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n', - stainlessPath: '(resource) agents > (method) retrieve_approvals', - qualified: 'client.agents.retrieveApprovals', + stainlessPath: '(resource) agents > (method) list_approvals', + qualified: 'client.agents.listApprovals', params: [ 'agentId?: string;', 'cursor?: string;', @@ -2686,24 +2686,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'startDate?: string;', ], response: - "{ data: { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: object; rejectionReason?: string; transaction?: incoming_transaction | outgoing_transaction; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## retrieve_approvals\n\n`client.agents.retrieveApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { data: object[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ data: { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: object; rejectionReason?: string; transaction?: incoming_transaction | outgoing_transaction; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: object | object; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: object; sendingCurrency: object; source: object | object; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: object[]; rateDetails?: object; }; rejectionReason?: string; transaction?: { id: string; customerId: string; destination: object | object; platformCustomerId: string; receivedAmount: currency_amount; status: transaction_status; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: incoming_rate_details; reconciliationInstructions?: reconciliation_instructions; settledAt?: string; source?: transaction_source_one_of; updatedAt?: string; } | { id: string; customerId: string; destination: object | object; platformCustomerId: string; sentAmount: currency_amount; source: transaction_source_one_of; status: outgoing_transaction_status; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: payment_instructions[]; quoteId?: string; rateDetails?: outgoing_rate_details; receivedAmount?: currency_amount; refund?: object; settledAt?: string; updatedAt?: string; }; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.retrieveApprovals();\n\nconsole.log(response);\n```", + "## list_approvals\n\n`client.agents.listApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse);\n}\n```", perLanguage: { typescript: { - method: 'client.agents.retrieveApprovals', + method: 'client.agents.listApprovals', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.retrieveApprovals();\n\nconsole.log(response.data);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse.id);\n}", }, python: { - method: 'agents.retrieve_approvals', + method: 'agents.list_approvals', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.retrieve_approvals()\nprint(response.data)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\npage = client.agents.list_approvals()\npage = page.data[0]\nprint(page.id)', }, kotlin: { - method: 'agents().retrieveApprovals', + method: 'agents().listApprovals', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentRetrieveApprovalsParams\nimport com.lightspark.grid.models.agents.AgentRetrieveApprovalsResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: AgentRetrieveApprovalsResponse = client.agents().retrieveApprovals()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentListApprovalsPage\nimport com.lightspark.grid.models.agents.AgentListApprovalsParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: AgentListApprovalsPage = client.agents().listApprovals()\n}', }, http: { example: @@ -2858,33 +2858,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'list', + name: 'retrieve', endpoint: '/agents/me', httpMethod: 'get', summary: 'Get current agent', description: "Retrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n", - stainlessPath: '(resource) agents.me > (method) list', - qualified: 'client.agents.me.list', + stainlessPath: '(resource) agents.me > (method) retrieve', + qualified: 'client.agents.me.retrieve', response: "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## list\n\n`client.agents.me.list(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst mes = await client.agents.me.list();\n\nconsole.log(mes);\n```", + "## retrieve\n\n`client.agents.me.retrieve(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me);\n```", perLanguage: { typescript: { - method: 'client.agents.me.list', + method: 'client.agents.me.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst mes = await client.agents.me.list();\n\nconsole.log(mes.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me.id);", }, python: { - method: 'agents.me.list', + method: 'agents.me.retrieve', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nmes = client.agents.me.list()\nprint(mes.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nme = client.agents.me.retrieve()\nprint(me.id)', }, kotlin: { - method: 'agents().me().list', + method: 'agents().me().retrieve', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeListParams\nimport com.lightspark.grid.models.agents.me.MeListResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val mes: MeListResponse = client.agents().me().list()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeRetrieveParams\nimport com.lightspark.grid.models.agents.me.MeRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val me: MeRetrieveResponse = client.agents().me().retrieve()\n}', }, http: { example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me', @@ -2892,14 +2892,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'transfer_in', + name: 'create_transfer_in', endpoint: '/agents/me/transfer-in', httpMethod: 'post', summary: 'Create a transfer-in', description: "Transfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n", - stainlessPath: '(resource) agents.me > (method) transfer_in', - qualified: 'client.agents.me.transferIn', + stainlessPath: '(resource) agents.me > (method) create_transfer_in', + qualified: 'client.agents.me.createTransferIn', params: [ 'destination: { accountId: string; };', 'source: { accountId: string; };', @@ -2909,22 +2909,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## transfer_in\n\n`client.agents.me.transferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.me.transferIn', + method: 'client.agents.me.createTransferIn', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", }, python: { - method: 'agents.me.transfer_in', + method: 'agents.me.create_transfer_in', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', }, kotlin: { - method: 'agents().me().transferIn', + method: 'agents().me().createTransferIn', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeTransferInParams\nimport com.lightspark.grid.models.agents.me.MeTransferInResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeTransferInParams = MeTransferInParams.builder()\n .destination(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .source(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val response: MeTransferInResponse = client.agents().me().transferIn(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferInParams = MeCreateTransferInParams.builder()\n .destination(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .source(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val response: MeCreateTransferInResponse = client.agents().me().createTransferIn(params)\n}', }, http: { example: @@ -2933,14 +2933,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'transfer_out', + name: 'create_transfer_out', endpoint: '/agents/me/transfer-out', httpMethod: 'post', summary: 'Create a transfer-out', description: "Transfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n", - stainlessPath: '(resource) agents.me > (method) transfer_out', - qualified: 'client.agents.me.transferOut', + stainlessPath: '(resource) agents.me > (method) create_transfer_out', + qualified: 'client.agents.me.createTransferOut', params: [ 'destination: { accountId: string; };', 'source: { accountId: string; };', @@ -2950,22 +2950,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## transfer_out\n\n`client.agents.me.transferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.me.transferOut', + method: 'client.agents.me.createTransferOut', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.transferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", }, python: { - method: 'agents.me.transfer_out', + method: 'agents.me.create_transfer_out', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', }, kotlin: { - method: 'agents().me().transferOut', + method: 'agents().me().createTransferOut', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeTransferOutParams\nimport com.lightspark.grid.models.agents.me.MeTransferOutResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeTransferOutParams = MeTransferOutParams.builder()\n .destination(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .source(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .build()\n val response: MeTransferOutResponse = client.agents().me().transferOut(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferOutParams = MeCreateTransferOutParams.builder()\n .destination(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .source(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .build()\n val response: MeCreateTransferOutResponse = client.agents().me().createTransferOut(params)\n}', }, http: { example: @@ -2974,14 +2974,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'retrieve_internal_accounts', + name: 'list_internal_accounts', endpoint: '/agents/me/internal-accounts', httpMethod: 'get', summary: "List agent's internal accounts", description: "Retrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n", - stainlessPath: '(resource) agents.me > (method) retrieve_internal_accounts', - qualified: 'client.agents.me.retrieveInternalAccounts', + stainlessPath: '(resource) agents.me > (method) list_internal_accounts', + qualified: 'client.agents.me.listInternalAccounts', params: [ 'currency?: string;', 'cursor?: string;', @@ -2989,24 +2989,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ "type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET';", ], response: - "{ data: { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", + "{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }", markdown: - "## retrieve_internal_accounts\n\n`client.agents.me.retrieveInternalAccounts(currency?: string, cursor?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { data: internal_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/agents/me/internal-accounts`\n\nRetrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for platform-managed holding accounts.\n\n### Returns\n\n- `{ data: { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.retrieveInternalAccounts();\n\nconsole.log(response);\n```", + "## list_internal_accounts\n\n`client.agents.me.listInternalAccounts(currency?: string, cursor?: string, limit?: number, type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'): { id: string; balance: currency_amount; createdAt: string; fundingPaymentInstructions: payment_instructions[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n**get** `/agents/me/internal-accounts`\n\nRetrieve the internal accounts belonging to the customer this agent operates on behalf of. Use this to discover available source accounts for transfers and quotes, and to verify which accounts are accessible under the agent's `accountRestrictions` policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n Filter by internal account type. Use `EMBEDDED_WALLET` to find the self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / `INTERNAL_CRYPTO` for platform-managed holding accounts.\n\n### Returns\n\n- `{ id: string; balance: { amount: number; currency: currency; }; createdAt: string; fundingPaymentInstructions: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; updatedAt: string; customerId?: string; }`\n\n - `id: string`\n - `balance: { amount: number; currency: { code?: string; decimals?: number; name?: string; symbol?: string; }; }`\n - `createdAt: string`\n - `fundingPaymentInstructions: { accountOrWalletInfo: { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { qrCode: string; accountType?: 'BRL_ACCOUNT'; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'ARS_ACCOUNT'; } | { paymentUrl: string; accountType?: 'COP_ACCOUNT'; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; assetType: 'BTC' | 'USDB'; invoice?: string; } | { invoice: string; accountType?: 'LIGHTNING'; } | { accountType: 'SOLANA_WALLET'; address: string; assetType?: 'USDC' | 'USDT'; } | { accountType: 'TRON_WALLET'; address: string; assetType?: 'USDT'; } | { accountType: 'POLYGON_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'BASE_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'ETHEREUM_WALLET'; address: string; assetType?: 'USDC'; } | { accountType: 'EMBEDDED_WALLET'; payloadToSign: string; }; instructionsNotes?: string; isPlatformAccount?: boolean; }[]`\n - `type: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'`\n - `updatedAt: string`\n - `customerId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount);\n}\n```", perLanguage: { typescript: { - method: 'client.agents.me.retrieveInternalAccounts', + method: 'client.agents.me.listInternalAccounts', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.retrieveInternalAccounts();\n\nconsole.log(response.data);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount.id);\n}", }, python: { - method: 'agents.me.retrieve_internal_accounts', + method: 'agents.me.list_internal_accounts', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.retrieve_internal_accounts()\nprint(response.data)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.list_internal_accounts()\npage = page.data[0]\nprint(page.id)', }, kotlin: { - method: 'agents().me().retrieveInternalAccounts', + method: 'agents().me().listInternalAccounts', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeRetrieveInternalAccountsParams\nimport com.lightspark.grid.models.agents.me.MeRetrieveInternalAccountsResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: MeRetrieveInternalAccountsResponse = client.agents().me().retrieveInternalAccounts()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsPage\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: MeListInternalAccountsPage = client.agents().me().listInternalAccounts()\n}', }, http: { example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/internal-accounts', @@ -3215,107 +3215,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, { name: 'list', - endpoint: '/agents/me/actions', - httpMethod: 'get', - summary: "List agent's own actions", - description: - 'Retrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n', - stainlessPath: '(resource) agents.me.actions > (method) list', - qualified: 'client.agents.me.actions.list', - params: [ - 'cursor?: string;', - 'limit?: number;', - "status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED';", - ], - response: - "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", - markdown: - "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", - perLanguage: { - typescript: { - method: 'client.agents.me.actions.list', - example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", - }, - python: { - method: 'agents.me.actions.list', - example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.actions.list()\npage = page.data[0]\nprint(page.id)', - }, - kotlin: { - method: 'agents().me().actions().list', - example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionListPage\nimport com.lightspark.grid.models.agents.me.actions.ActionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ActionListPage = client.agents().me().actions().list()\n}', - }, - http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions', - }, - }, - }, - { - name: 'retrieve', - endpoint: '/agents/me/actions/{actionId}', - httpMethod: 'get', - summary: 'Get an agent action', - description: - 'Retrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n', - stainlessPath: '(resource) agents.me.actions > (method) retrieve', - qualified: 'client.agents.me.actions.retrieve', - params: ['actionId: string;'], - response: - "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", - markdown: - "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", - perLanguage: { - typescript: { - method: 'client.agents.me.actions.retrieve', - example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", - }, - python: { - method: 'agents.me.actions.retrieve', - example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', - }, - kotlin: { - method: 'agents().me().actions().retrieve', - example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val action: ActionRetrieveResponse = client.agents().me().actions().retrieve("actionId")\n}', - }, - http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions/$ACTION_ID', - }, - }, - }, - { - name: 'retrieve_external_accounts', endpoint: '/agents/me/external-accounts', httpMethod: 'get', summary: 'List agent external accounts', description: "Retrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n", - stainlessPath: '(resource) agents.me.external_accounts > (method) retrieve_external_accounts', - qualified: 'client.agents.me.externalAccounts.retrieveExternalAccounts', + stainlessPath: '(resource) agents.me.external_accounts > (method) list', + qualified: 'client.agents.me.externalAccounts.list', params: ['currency?: string;', 'cursor?: string;', 'limit?: number;'], response: - "{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## retrieve_external_accounts\n\n`client.agents.me.externalAccounts.retrieveExternalAccounts(currency?: string, cursor?: string, limit?: number): { data: external_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/agents/me/external-accounts`\n\nRetrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.externalAccounts.retrieveExternalAccounts();\n\nconsole.log(response);\n```", + "## list\n\n`client.agents.me.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/agents/me/external-accounts`\n\nRetrieve a paginated list of external accounts belonging to the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", perLanguage: { typescript: { - method: 'client.agents.me.externalAccounts.retrieveExternalAccounts', + method: 'client.agents.me.externalAccounts.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.externalAccounts.retrieveExternalAccounts();\n\nconsole.log(response.data);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount.id);\n}", }, python: { - method: 'agents.me.external_accounts.retrieve_external_accounts', + method: 'agents.me.external_accounts.list', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.external_accounts.retrieve_external_accounts()\nprint(response.data)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.external_accounts.list()\npage = page.data[0]\nprint(page.id)', }, kotlin: { - method: 'agents().me().externalAccounts().retrieveExternalAccounts', + method: 'agents().me().externalAccounts().list', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountRetrieveExternalAccountsParams\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountRetrieveExternalAccountsResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: ExternalAccountRetrieveExternalAccountsResponse = client.agents().me().externalAccounts().retrieveExternalAccounts()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListPage\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ExternalAccountListPage = client.agents().me().externalAccounts().list()\n}', }, http: { example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts', @@ -3323,14 +3249,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'external_accounts', + name: 'add', endpoint: '/agents/me/external-accounts', httpMethod: 'post', summary: 'Add an external account', description: "Register a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n", - stainlessPath: '(resource) agents.me.external_accounts > (method) external_accounts', - qualified: 'client.agents.me.externalAccounts.externalAccounts', + stainlessPath: '(resource) agents.me.external_accounts > (method) add', + qualified: 'client.agents.me.externalAccounts.add', params: [ "accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; };", 'currency: string;', @@ -3341,22 +3267,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## external_accounts\n\n`client.agents.me.externalAccounts.externalAccounts(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/agents/me/external-accounts`\n\nRegister a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.externalAccounts({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", + "## add\n\n`client.agents.me.externalAccounts.add(accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: aed_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: brl_beneficiary | business_beneficiary; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: bwp_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: cad_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: dkk_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: eur_beneficiary | business_beneficiary; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: gbp_beneficiary | business_beneficiary; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: hkd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: idr_beneficiary | business_beneficiary; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: inr_beneficiary | business_beneficiary; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: kes_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: mwk_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: mxn_beneficiary | business_beneficiary; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: myr_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: ngn_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: php_beneficiary | business_beneficiary; } | { accountType: 'RWF_ACCOUNT'; beneficiary: rwf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: sgd_beneficiary | business_beneficiary; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: thb_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: tzs_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: ugx_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: usd_beneficiary | business_beneficiary; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: vnd_beneficiary | business_beneficiary; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: xaf_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: xof_beneficiary | business_beneficiary; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: zar_beneficiary | business_beneficiary; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: zmw_beneficiary | business_beneficiary; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: bdt_beneficiary | business_beneficiary; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: cop_beneficiary | business_beneficiary; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: egp_beneficiary | business_beneficiary; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: ghs_beneficiary | business_beneficiary; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: gtq_beneficiary | business_beneficiary; } | { accountType: 'HTG_ACCOUNT'; beneficiary: htg_beneficiary | business_beneficiary; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: jmd_beneficiary | business_beneficiary; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: pkr_beneficiary | business_beneficiary; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }, currency: string, customerId?: string, defaultUmaDepositAccount?: boolean, platformAccountId?: string): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**post** `/agents/me/external-accounts`\n\nRegister a new external bank account or wallet for the authenticated agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. The `customerId` field is optional and will be inferred from the agent's associated customer if omitted.\n\n\n### Parameters\n\n- `accountInfo: { accountType: 'AED_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'BRL_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountType: 'BWP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; registrationNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'DKK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban: string; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; vpa: string; } | { accountType: 'KES_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; clabeNumber: string; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'RWF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; swiftCode: string; } | { accountType: 'XAF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'XOF_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'ZMW_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; provider: string; } | { accountType: 'BDT_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; beneficiary: { beneficiaryType: 'INDIVIDUAL'; documentNumber: string; documentType: string; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; countryOfResidence: string; fullName: string; phoneNumber: string; address?: address; birthDate?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; } | { accountType: 'HTG_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; beneficiary: { address: address; beneficiaryType: 'INDIVIDUAL'; fullName: string; phoneNumber: string; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; branchCode: string; } | { accountType: 'PKR_ACCOUNT'; beneficiary: { beneficiaryType: 'INDIVIDUAL'; fullName: string; address?: address; birthDate?: string; countryOfResidence?: string; email?: string; nationality?: string; phoneNumber?: string; } | { beneficiaryType: 'BUSINESS'; legalName: string; address?: address; countryOfResidence?: string; email?: string; phoneNumber?: string; registrationNumber?: string; taxId?: string; }; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; }`\n Lightning payment destination. Exactly one of `invoice`, `bolt12`, or `lightningAddress` must be provided.\n\n\n- `currency: string`\n The ISO 4217 currency code\n\n- `customerId?: string`\n The ID of the customer for whom to create the external account. If not provided, the external account will be created on behalf of the platform.\n\n- `defaultUmaDepositAccount?: boolean`\n Whether to set the external account as the default UMA deposit account. When set to true, incoming payments to this customer's UMA address will be automatically deposited into this external account. False if not provided. Note that only one external account can be set as the default UMA deposit account for a customer, so if there is already a default UMA deposit account, this will override the existing default UMA deposit account. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.\n\n- `platformAccountId?: string`\n Your platform's identifier for the account in your system. This can be used to reference the account by your own identifier.\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountNumber: '12345678901',\n accountType: 'USD_ACCOUNT',\n beneficiary: { beneficiaryType: 'INDIVIDUAL', fullName: 'John Doe' },\n routingNumber: '123456789',\n},\n currency: 'USD',\n});\n\nconsole.log(externalAccount);\n```", perLanguage: { typescript: { - method: 'client.agents.me.externalAccounts.externalAccounts', + method: 'client.agents.me.externalAccounts.add', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.externalAccounts({\n accountInfo: {\n accountType: 'USD_ACCOUNT',\n accountNumber: '12345678901',\n routingNumber: '123456789',\n beneficiary: {\n beneficiaryType: 'INDIVIDUAL',\n fullName: 'John Doe',\n birthDate: '1990-01-15',\n nationality: 'US',\n address: {\n line1: '123 Main Street',\n city: 'San Francisco',\n state: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n },\n },\n currency: 'USD',\n});\n\nconsole.log(externalAccount.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountType: 'USD_ACCOUNT',\n accountNumber: '12345678901',\n routingNumber: '123456789',\n beneficiary: {\n beneficiaryType: 'INDIVIDUAL',\n fullName: 'John Doe',\n birthDate: '1990-01-15',\n nationality: 'US',\n address: {\n line1: '123 Main Street',\n city: 'San Francisco',\n state: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n },\n },\n currency: 'USD',\n});\n\nconsole.log(externalAccount.id);", }, python: { - method: 'agents.me.external_accounts.external_accounts', + method: 'agents.me.external_accounts.add', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.external_accounts(\n account_info={\n "account_type": "USD_ACCOUNT",\n "account_number": "12345678901",\n "routing_number": "123456789",\n "beneficiary": {\n "beneficiary_type": "INDIVIDUAL",\n "full_name": "John Doe",\n "birth_date": "1990-01-15",\n "nationality": "US",\n "address": {\n "line1": "123 Main Street",\n "city": "San Francisco",\n "state": "CA",\n "postal_code": "94105",\n "country": "US",\n },\n },\n },\n currency="USD",\n)\nprint(external_account.id)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.add(\n account_info={\n "account_type": "USD_ACCOUNT",\n "account_number": "12345678901",\n "routing_number": "123456789",\n "beneficiary": {\n "beneficiary_type": "INDIVIDUAL",\n "full_name": "John Doe",\n "birth_date": "1990-01-15",\n "nationality": "US",\n "address": {\n "line1": "123 Main Street",\n "city": "San Francisco",\n "state": "CA",\n "postal_code": "94105",\n "country": "US",\n },\n },\n },\n currency="USD",\n)\nprint(external_account.id)', }, kotlin: { - method: 'agents().me().externalAccounts().externalAccounts', + method: 'agents().me().externalAccounts().add', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.UsdExternalAccountCreateInfo\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreate\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ExternalAccountCreate = ExternalAccountCreate.builder()\n .accountInfo(UsdExternalAccountCreateInfo.builder()\n .accountNumber("12345678901")\n .accountType(UsdExternalAccountCreateInfo.AccountType.USD_ACCOUNT)\n .individualBeneficiary("John Doe")\n .routingNumber("123456789")\n .build())\n .currency("USD")\n .build()\n val externalAccount: ExternalAccount = client.agents().me().externalAccounts().externalAccounts(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.UsdExternalAccountCreateInfo\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccount\nimport com.lightspark.grid.models.customers.externalaccounts.ExternalAccountCreate\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ExternalAccountCreate = ExternalAccountCreate.builder()\n .accountInfo(UsdExternalAccountCreateInfo.builder()\n .accountNumber("12345678901")\n .accountType(UsdExternalAccountCreateInfo.AccountType.USD_ACCOUNT)\n .individualBeneficiary("John Doe")\n .routingNumber("123456789")\n .build())\n .currency("USD")\n .build()\n val externalAccount: ExternalAccount = client.agents().me().externalAccounts().add(params)\n}', }, http: { example: @@ -3435,33 +3361,107 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'device_codes', + name: 'list', + endpoint: '/agents/me/actions', + httpMethod: 'get', + summary: "List agent's own actions", + description: + 'Retrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n', + stainlessPath: '(resource) agents.me.actions > (method) list', + qualified: 'client.agents.me.actions.list', + params: [ + 'cursor?: string;', + 'limit?: number;', + "status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED';", + ], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.actions.list', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", + }, + python: { + method: 'agents.me.actions.list', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.actions.list()\npage = page.data[0]\nprint(page.id)', + }, + kotlin: { + method: 'agents().me().actions().list', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionListPage\nimport com.lightspark.grid.models.agents.me.actions.ActionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ActionListPage = client.agents().me().actions().list()\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions', + }, + }, + }, + { + name: 'retrieve', + endpoint: '/agents/me/actions/{actionId}', + httpMethod: 'get', + summary: 'Get an agent action', + description: + 'Retrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n', + stainlessPath: '(resource) agents.me.actions > (method) retrieve', + qualified: 'client.agents.me.actions.retrieve', + params: ['actionId: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", + perLanguage: { + typescript: { + method: 'client.agents.me.actions.retrieve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", + }, + python: { + method: 'agents.me.actions.retrieve', + example: + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', + }, + kotlin: { + method: 'agents().me().actions().retrieve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val action: ActionRetrieveResponse = client.agents().me().actions().retrieve("actionId")\n}', + }, + http: { + example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions/$ACTION_ID', + }, + }, + }, + { + name: 'regenerate', endpoint: '/agents/{agentId}/device-codes', httpMethod: 'post', summary: 'Regenerate a device code', description: 'Generate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n', - stainlessPath: '(resource) agents.device_codes > (method) device_codes', - qualified: 'client.agents.deviceCodes.deviceCodes', + stainlessPath: '(resource) agents.device_codes > (method) regenerate', + qualified: 'client.agents.deviceCodes.regenerate', params: ['agentId: string;'], response: '{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }', markdown: - "## device_codes\n\n`client.agents.deviceCodes.deviceCodes(agentId: string): { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n**post** `/agents/{agentId}/device-codes`\n\nGenerate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n - `agentId: string`\n - `code: string`\n - `expiresAt: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.deviceCodes('agentId');\n\nconsole.log(response);\n```", + "## regenerate\n\n`client.agents.deviceCodes.regenerate(agentId: string): { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n**post** `/agents/{agentId}/device-codes`\n\nGenerate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n - `agentId: string`\n - `code: string`\n - `expiresAt: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.deviceCodes.deviceCodes', + method: 'client.agents.deviceCodes.regenerate', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.deviceCodes('agentId');\n\nconsole.log(response.agentId);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response.agentId);", }, python: { - method: 'agents.device_codes.device_codes', + method: 'agents.device_codes.regenerate', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.device_codes(\n "agentId",\n)\nprint(response.agent_id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.regenerate(\n "agentId",\n)\nprint(response.agent_id)', }, kotlin: { - method: 'agents().deviceCodes().deviceCodes', + method: 'agents().deviceCodes().regenerate', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeDeviceCodesParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeDeviceCodesResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeDeviceCodesResponse = client.agents().deviceCodes().deviceCodes("agentId")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRegenerateResponse = client.agents().deviceCodes().regenerate("agentId")\n}', }, http: { example: @@ -3470,33 +3470,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'retrieve_status', + name: 'get_status', endpoint: '/agents/device-codes/{code}/status', httpMethod: 'get', summary: 'Get device code status', description: 'Check whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n', - stainlessPath: '(resource) agents.device_codes > (method) retrieve_status', - qualified: 'client.agents.deviceCodes.retrieveStatus', + stainlessPath: '(resource) agents.device_codes > (method) get_status', + qualified: 'client.agents.deviceCodes.getStatus', params: ['code: string;'], response: '{ code: string; redeemed: boolean; }', markdown: - "## retrieve_status\n\n`client.agents.deviceCodes.retrieveStatus(code: string): { code: string; redeemed: boolean; }`\n\n**get** `/agents/device-codes/{code}/status`\n\nCheck whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ code: string; redeemed: boolean; }`\n\n - `code: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.retrieveStatus('code');\n\nconsole.log(response);\n```", + "## get_status\n\n`client.agents.deviceCodes.getStatus(code: string): { code: string; redeemed: boolean; }`\n\n**get** `/agents/device-codes/{code}/status`\n\nCheck whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ code: string; redeemed: boolean; }`\n\n - `code: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response);\n```", perLanguage: { typescript: { - method: 'client.agents.deviceCodes.retrieveStatus', + method: 'client.agents.deviceCodes.getStatus', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.retrieveStatus('code');\n\nconsole.log(response.code);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response.code);", }, python: { - method: 'agents.device_codes.retrieve_status', + method: 'agents.device_codes.get_status', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.retrieve_status(\n "code",\n)\nprint(response.code)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.get_status(\n "code",\n)\nprint(response.code)', }, kotlin: { - method: 'agents().deviceCodes().retrieveStatus', + method: 'agents().deviceCodes().getStatus', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRetrieveStatusParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRetrieveStatusResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRetrieveStatusResponse = client.agents().deviceCodes().retrieveStatus("code")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeGetStatusResponse = client.agents().deviceCodes().getStatus("code")\n}', }, http: { example: diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts index 1166049..95baf12 100644 --- a/packages/mcp-server/src/methods.ts +++ b/packages/mcp-server/src/methods.ts @@ -444,8 +444,8 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/{agentId}', }, { - clientCallName: 'client.agents.retrieveApprovals', - fullyQualifiedName: 'agents.retrieveApprovals', + clientCallName: 'client.agents.listApprovals', + fullyQualifiedName: 'agents.listApprovals', httpMethod: 'get', httpPath: '/agents/approvals', }, @@ -456,29 +456,29 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/{agentId}/policy', }, { - clientCallName: 'client.agents.me.list', - fullyQualifiedName: 'agents.me.list', + clientCallName: 'client.agents.me.retrieve', + fullyQualifiedName: 'agents.me.retrieve', httpMethod: 'get', httpPath: '/agents/me', }, { - clientCallName: 'client.agents.me.retrieveInternalAccounts', - fullyQualifiedName: 'agents.me.retrieveInternalAccounts', - httpMethod: 'get', - httpPath: '/agents/me/internal-accounts', - }, - { - clientCallName: 'client.agents.me.transferIn', - fullyQualifiedName: 'agents.me.transferIn', + clientCallName: 'client.agents.me.createTransferIn', + fullyQualifiedName: 'agents.me.createTransferIn', httpMethod: 'post', httpPath: '/agents/me/transfer-in', }, { - clientCallName: 'client.agents.me.transferOut', - fullyQualifiedName: 'agents.me.transferOut', + clientCallName: 'client.agents.me.createTransferOut', + fullyQualifiedName: 'agents.me.createTransferOut', httpMethod: 'post', httpPath: '/agents/me/transfer-out', }, + { + clientCallName: 'client.agents.me.listInternalAccounts', + fullyQualifiedName: 'agents.me.listInternalAccounts', + httpMethod: 'get', + httpPath: '/agents/me/internal-accounts', + }, { clientCallName: 'client.agents.me.transactions.retrieve', fullyQualifiedName: 'agents.me.transactions.retrieve', @@ -509,24 +509,18 @@ export const sdkMethods: SdkMethod[] = [ httpMethod: 'post', httpPath: '/agents/me/quotes/{quoteId}/execute', }, - { - clientCallName: 'client.agents.me.actions.retrieve', - fullyQualifiedName: 'agents.me.actions.retrieve', - httpMethod: 'get', - httpPath: '/agents/me/actions/{actionId}', - }, - { - clientCallName: 'client.agents.me.actions.list', - fullyQualifiedName: 'agents.me.actions.list', - httpMethod: 'get', - httpPath: '/agents/me/actions', - }, { clientCallName: 'client.agents.me.externalAccounts.retrieve', fullyQualifiedName: 'agents.me.externalAccounts.retrieve', httpMethod: 'get', httpPath: '/agents/me/external-accounts/{externalAccountId}', }, + { + clientCallName: 'client.agents.me.externalAccounts.list', + fullyQualifiedName: 'agents.me.externalAccounts.list', + httpMethod: 'get', + httpPath: '/agents/me/external-accounts', + }, { clientCallName: 'client.agents.me.externalAccounts.delete', fullyQualifiedName: 'agents.me.externalAccounts.delete', @@ -534,22 +528,28 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/me/external-accounts/{externalAccountId}', }, { - clientCallName: 'client.agents.me.externalAccounts.externalAccounts', - fullyQualifiedName: 'agents.me.externalAccounts.externalAccounts', + clientCallName: 'client.agents.me.externalAccounts.add', + fullyQualifiedName: 'agents.me.externalAccounts.add', httpMethod: 'post', httpPath: '/agents/me/external-accounts', }, { - clientCallName: 'client.agents.me.externalAccounts.retrieveExternalAccounts', - fullyQualifiedName: 'agents.me.externalAccounts.retrieveExternalAccounts', + clientCallName: 'client.agents.me.actions.retrieve', + fullyQualifiedName: 'agents.me.actions.retrieve', httpMethod: 'get', - httpPath: '/agents/me/external-accounts', + httpPath: '/agents/me/actions/{actionId}', }, { - clientCallName: 'client.agents.deviceCodes.deviceCodes', - fullyQualifiedName: 'agents.deviceCodes.deviceCodes', - httpMethod: 'post', - httpPath: '/agents/{agentId}/device-codes', + clientCallName: 'client.agents.me.actions.list', + fullyQualifiedName: 'agents.me.actions.list', + httpMethod: 'get', + httpPath: '/agents/me/actions', + }, + { + clientCallName: 'client.agents.deviceCodes.getStatus', + fullyQualifiedName: 'agents.deviceCodes.getStatus', + httpMethod: 'get', + httpPath: '/agents/device-codes/{code}/status', }, { clientCallName: 'client.agents.deviceCodes.redeem', @@ -558,10 +558,10 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/agents/device-codes/{code}/redeem', }, { - clientCallName: 'client.agents.deviceCodes.retrieveStatus', - fullyQualifiedName: 'agents.deviceCodes.retrieveStatus', - httpMethod: 'get', - httpPath: '/agents/device-codes/{code}/status', + clientCallName: 'client.agents.deviceCodes.regenerate', + fullyQualifiedName: 'agents.deviceCodes.regenerate', + httpMethod: 'post', + httpPath: '/agents/{agentId}/device-codes', }, { clientCallName: 'client.agents.actions.approve', diff --git a/scripts/detect-breaking-changes b/scripts/detect-breaking-changes index 901a420..8e36678 100755 --- a/scripts/detect-breaking-changes +++ b/scripts/detect-breaking-changes @@ -39,8 +39,8 @@ TEST_PATHS=( tests/api-resources/agents/me/me.test.ts tests/api-resources/agents/me/transactions.test.ts tests/api-resources/agents/me/quotes.test.ts - tests/api-resources/agents/me/actions.test.ts tests/api-resources/agents/me/external-accounts.test.ts + tests/api-resources/agents/me/actions.test.ts tests/api-resources/agents/device-codes.test.ts tests/api-resources/agents/actions.test.ts tests/index.test.ts diff --git a/src/client.ts b/src/client.ts index 87edc0d..e1fdbb4 100644 --- a/src/client.ts +++ b/src/client.ts @@ -153,11 +153,12 @@ import { import { AgentCreateParams, AgentCreateResponse, + AgentListApprovalsParams, + AgentListApprovalsResponse, + AgentListApprovalsResponsesDefaultPagination, AgentListParams, AgentListResponse, AgentListResponsesDefaultPagination, - AgentRetrieveApprovalsParams, - AgentRetrieveApprovalsResponse, AgentRetrieveResponse, AgentUpdateParams, AgentUpdatePolicyParams, @@ -1282,13 +1283,14 @@ export declare namespace LightsparkGrid { type AgentRetrieveResponse as AgentRetrieveResponse, type AgentUpdateResponse as AgentUpdateResponse, type AgentListResponse as AgentListResponse, - type AgentRetrieveApprovalsResponse as AgentRetrieveApprovalsResponse, + type AgentListApprovalsResponse as AgentListApprovalsResponse, type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, type AgentCreateParams as AgentCreateParams, type AgentUpdateParams as AgentUpdateParams, type AgentListParams as AgentListParams, - type AgentRetrieveApprovalsParams as AgentRetrieveApprovalsParams, + type AgentListApprovalsParams as AgentListApprovalsParams, type AgentUpdatePolicyParams as AgentUpdatePolicyParams, }; diff --git a/src/resources/agents/agents.ts b/src/resources/agents/agents.ts index 4fee8c8..3b88d8a 100644 --- a/src/resources/agents/agents.ts +++ b/src/resources/agents/agents.ts @@ -13,21 +13,22 @@ import { } from './actions'; import * as DeviceCodesAPI from './device-codes'; import { - DeviceCodeDeviceCodesResponse, + DeviceCodeGetStatusResponse, DeviceCodeRedeemResponse, - DeviceCodeRetrieveStatusResponse, + DeviceCodeRegenerateResponse, DeviceCodes, } from './device-codes'; +import * as TransactionsAPI from './transactions'; +import { Transactions } from './transactions'; import * as MeAPI from './me/me'; import { Me, - MeListResponse, - MeRetrieveInternalAccountsParams, - MeRetrieveInternalAccountsResponse, - MeTransferInParams, - MeTransferInResponse, - MeTransferOutParams, - MeTransferOutResponse, + MeCreateTransferInParams, + MeCreateTransferInResponse, + MeCreateTransferOutParams, + MeCreateTransferOutResponse, + MeListInternalAccountsParams, + MeRetrieveResponse, } from './me/me'; import { APIPromise } from '../../core/api-promise'; import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../core/pagination'; @@ -41,6 +42,7 @@ import { path } from '../../internal/utils/path'; export class Agents extends APIResource { me: MeAPI.Me = new MeAPI.Me(this._client); deviceCodes: DeviceCodesAPI.DeviceCodes = new DeviceCodesAPI.DeviceCodes(this._client); + transactions: TransactionsAPI.Transactions = new TransactionsAPI.Transactions(this._client); actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); /** @@ -140,14 +142,20 @@ export class Agents extends APIResource { * * @example * ```ts - * const response = await client.agents.retrieveApprovals(); + * // Automatically fetches more pages as needed. + * for await (const agentListApprovalsResponse of client.agents.listApprovals()) { + * // ... + * } * ``` */ - retrieveApprovals( - query: AgentRetrieveApprovalsParams | null | undefined = {}, + listApprovals( + query: AgentListApprovalsParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { - return this._client.get('/agents/approvals', { query, ...options }); + ): PagePromise { + return this._client.getAPIList('/agents/approvals', DefaultPagination, { + query, + ...options, + }); } /** @@ -173,6 +181,8 @@ export class Agents extends APIResource { export type AgentListResponsesDefaultPagination = DefaultPagination; +export type AgentListApprovalsResponsesDefaultPagination = DefaultPagination; + /** * Response returned when an agent is created, including the agent and a device * code for installation. @@ -1167,140 +1177,116 @@ export namespace AgentListResponse { } } -export interface AgentRetrieveApprovalsResponse { +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface AgentListApprovalsResponse { /** - * List of agent actions matching the filter criteria. + * System-generated unique identifier for this action. */ - data: Array; + id: string; /** - * Indicates if more results are available beyond this page. + * The agent that submitted this action. */ - hasMore: boolean; + agentId: string; /** - * Cursor to retrieve the next page of results (only present if hasMore is true). + * When the action was submitted by the agent. */ - nextCursor?: string; + createdAt: string; /** - * Total number of actions matching the criteria (excluding pagination). + * The customer on whose behalf the action was submitted. */ - totalCount?: number; -} + customerId: string; -export namespace AgentRetrieveApprovalsResponse { /** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. + * Platform-specific ID of the customer. */ - export interface Data { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; + platformCustomerId: string; - /** - * When the action was submitted by the agent. - */ - createdAt: string; + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; + /** + * When the action was last updated. + */ + updatedAt: string; - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; - /** - * When the action was last updated. - */ - updatedAt: string; + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: AgentListApprovalsResponse.TransferDetails; +} +export namespace AgentListApprovalsResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. + * Transfer amount in the smallest unit of the specified currency. */ - rejectionReason?: string; + amount: number; /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. + * ISO 4217 currency code for the transfer amount. */ - transaction?: TransferInAPI.Transaction; + currency: string; /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + * ID of the destination account (internal or external). */ - transferDetails?: Data.TransferDetails; - } + destinationAccountId: string; - export namespace Data { /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + * ID of the source account (internal or external). */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + sourceAccountId: string; } } @@ -1766,17 +1752,12 @@ export interface AgentListParams extends DefaultPaginationParams { updatedBefore?: string; } -export interface AgentRetrieveApprovalsParams { +export interface AgentListApprovalsParams extends DefaultPaginationParams { /** * Filter by agent ID */ agentId?: string; - /** - * Cursor for pagination (returned from previous request) - */ - cursor?: string; - /** * Filter by customer ID */ @@ -1942,6 +1923,7 @@ export namespace AgentUpdatePolicyParams { Agents.Me = Me; Agents.DeviceCodes = DeviceCodes; +Agents.Transactions = Transactions; Agents.Actions = Actions; export declare namespace Agents { @@ -1950,34 +1932,36 @@ export declare namespace Agents { type AgentRetrieveResponse as AgentRetrieveResponse, type AgentUpdateResponse as AgentUpdateResponse, type AgentListResponse as AgentListResponse, - type AgentRetrieveApprovalsResponse as AgentRetrieveApprovalsResponse, + type AgentListApprovalsResponse as AgentListApprovalsResponse, type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, type AgentCreateParams as AgentCreateParams, type AgentUpdateParams as AgentUpdateParams, type AgentListParams as AgentListParams, - type AgentRetrieveApprovalsParams as AgentRetrieveApprovalsParams, + type AgentListApprovalsParams as AgentListApprovalsParams, type AgentUpdatePolicyParams as AgentUpdatePolicyParams, }; export { Me as Me, - type MeListResponse as MeListResponse, - type MeRetrieveInternalAccountsResponse as MeRetrieveInternalAccountsResponse, - type MeTransferInResponse as MeTransferInResponse, - type MeTransferOutResponse as MeTransferOutResponse, - type MeRetrieveInternalAccountsParams as MeRetrieveInternalAccountsParams, - type MeTransferInParams as MeTransferInParams, - type MeTransferOutParams as MeTransferOutParams, + type MeRetrieveResponse as MeRetrieveResponse, + type MeCreateTransferInResponse as MeCreateTransferInResponse, + type MeCreateTransferOutResponse as MeCreateTransferOutResponse, + type MeCreateTransferInParams as MeCreateTransferInParams, + type MeCreateTransferOutParams as MeCreateTransferOutParams, + type MeListInternalAccountsParams as MeListInternalAccountsParams, }; export { DeviceCodes as DeviceCodes, - type DeviceCodeDeviceCodesResponse as DeviceCodeDeviceCodesResponse, + type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, - type DeviceCodeRetrieveStatusResponse as DeviceCodeRetrieveStatusResponse, + type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, }; + export { Transactions as Transactions }; + export { Actions as Actions, type ActionApproveResponse as ActionApproveResponse, diff --git a/src/resources/agents/device-codes.ts b/src/resources/agents/device-codes.ts index 12c50ce..8b65cae 100644 --- a/src/resources/agents/device-codes.ts +++ b/src/resources/agents/device-codes.ts @@ -10,19 +10,18 @@ import { path } from '../../internal/utils/path'; */ export class DeviceCodes extends APIResource { /** - * Generate a new device code for an existing agent. Use this when the original - * device code has expired before being redeemed, or when the agent software needs - * to be reinstalled. Any previously issued unredeemed device codes for this agent - * are invalidated. + * Check whether a device code has been redeemed. Use this to poll for agent + * installation completion after creating an agent. * * @example * ```ts - * const response = - * await client.agents.deviceCodes.deviceCodes('agentId'); + * const response = await client.agents.deviceCodes.getStatus( + * 'code', + * ); * ``` */ - deviceCodes(agentID: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/agents/${agentID}/device-codes`, options); + getStatus(code: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/agents/device-codes/${code}/status`, options); } /** @@ -44,38 +43,31 @@ export class DeviceCodes extends APIResource { } /** - * Check whether a device code has been redeemed. Use this to poll for agent - * installation completion after creating an agent. + * Generate a new device code for an existing agent. Use this when the original + * device code has expired before being redeemed, or when the agent software needs + * to be reinstalled. Any previously issued unredeemed device codes for this agent + * are invalidated. * * @example * ```ts - * const response = - * await client.agents.deviceCodes.retrieveStatus('code'); + * const response = await client.agents.deviceCodes.regenerate( + * 'agentId', + * ); * ``` */ - retrieveStatus(code: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/agents/device-codes/${code}/status`, options); + regenerate(agentID: string, options?: RequestOptions): APIPromise { + return this._client.post(path`/agents/${agentID}/device-codes`, options); } } -export interface DeviceCodeDeviceCodesResponse { - /** - * The agent this device code belongs to. - */ - agentId: string; - +export interface DeviceCodeGetStatusResponse { /** - * Human-readable device code used to install and connect the agent software. + * The device code. */ code: string; /** - * Timestamp when this device code expires. - */ - expiresAt: string; - - /** - * Whether this device code has already been redeemed by the agent. + * Whether this device code has been redeemed. */ redeemed: boolean; } @@ -256,22 +248,32 @@ export namespace DeviceCodeRedeemResponse { } } -export interface DeviceCodeRetrieveStatusResponse { +export interface DeviceCodeRegenerateResponse { /** - * The device code. + * The agent this device code belongs to. + */ + agentId: string; + + /** + * Human-readable device code used to install and connect the agent software. */ code: string; /** - * Whether this device code has been redeemed. + * Timestamp when this device code expires. + */ + expiresAt: string; + + /** + * Whether this device code has already been redeemed by the agent. */ redeemed: boolean; } export declare namespace DeviceCodes { export { - type DeviceCodeDeviceCodesResponse as DeviceCodeDeviceCodesResponse, + type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, - type DeviceCodeRetrieveStatusResponse as DeviceCodeRetrieveStatusResponse, + type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, }; } diff --git a/src/resources/agents/index.ts b/src/resources/agents/index.ts index ca176d3..1b99113 100644 --- a/src/resources/agents/index.ts +++ b/src/resources/agents/index.ts @@ -13,28 +13,29 @@ export { type AgentRetrieveResponse, type AgentUpdateResponse, type AgentListResponse, - type AgentRetrieveApprovalsResponse, + type AgentListApprovalsResponse, type AgentUpdatePolicyResponse, type AgentCreateParams, type AgentUpdateParams, type AgentListParams, - type AgentRetrieveApprovalsParams, + type AgentListApprovalsParams, type AgentUpdatePolicyParams, type AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination, } from './agents'; export { DeviceCodes, - type DeviceCodeDeviceCodesResponse, + type DeviceCodeGetStatusResponse, type DeviceCodeRedeemResponse, - type DeviceCodeRetrieveStatusResponse, + type DeviceCodeRegenerateResponse, } from './device-codes'; export { Me, - type MeListResponse, - type MeRetrieveInternalAccountsResponse, - type MeTransferInResponse, - type MeTransferOutResponse, - type MeRetrieveInternalAccountsParams, - type MeTransferInParams, - type MeTransferOutParams, + type MeRetrieveResponse, + type MeCreateTransferInResponse, + type MeCreateTransferOutResponse, + type MeCreateTransferInParams, + type MeCreateTransferOutParams, + type MeListInternalAccountsParams, } from './me/index'; +export { Transactions } from './transactions'; diff --git a/src/resources/agents/me/external-accounts.ts b/src/resources/agents/me/external-accounts.ts index 89b8aea..52ba746 100644 --- a/src/resources/agents/me/external-accounts.ts +++ b/src/resources/agents/me/external-accounts.ts @@ -3,7 +3,9 @@ import { APIResource } from '../../../core/resource'; import * as Shared from '../../shared'; import * as ExternalAccountsAPI from '../../customers/external-accounts'; +import { ExternalAccountsDefaultPagination } from '../../customers/external-accounts'; import { APIPromise } from '../../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; import { buildHeaders } from '../../../internal/headers'; import { RequestOptions } from '../../../internal/request-options'; import { path } from '../../../internal/utils/path'; @@ -32,6 +34,30 @@ export class ExternalAccounts extends APIResource { return this._client.get(path`/agents/me/external-accounts/${externalAccountID}`, options); } + /** + * Retrieve a paginated list of external accounts belonging to the authenticated + * agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the + * agent's policy. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const externalAccount of client.agents.me.externalAccounts.list()) { + * // ... + * } + * ``` + */ + list( + query: ExternalAccountListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + '/agents/me/external-accounts', + DefaultPagination, + { query, ...options }, + ); + } + /** * Delete an external account belonging to the authenticated agent's customer. * Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the agent's policy. @@ -59,7 +85,7 @@ export class ExternalAccounts extends APIResource { * @example * ```ts * const externalAccount = - * await client.agents.me.externalAccounts.externalAccounts({ + * await client.agents.me.externalAccounts.add({ * accountInfo: { * accountType: 'USD_ACCOUNT', * accountNumber: '12345678901', @@ -82,55 +108,27 @@ export class ExternalAccounts extends APIResource { * }); * ``` */ - externalAccounts( - body: ExternalAccountExternalAccountsParams, + add( + body: ExternalAccountAddParams, options?: RequestOptions, ): APIPromise { return this._client.post('/agents/me/external-accounts', { body, ...options }); } - - /** - * Retrieve a paginated list of external accounts belonging to the authenticated - * agent's customer. Requires the MANAGE_EXTERNAL_ACCOUNTS permission in the - * agent's policy. - * - * @example - * ```ts - * const response = - * await client.agents.me.externalAccounts.retrieveExternalAccounts(); - * ``` - */ - retrieveExternalAccounts( - query: ExternalAccountRetrieveExternalAccountsParams | null | undefined = {}, - options?: RequestOptions, - ): APIPromise { - return this._client.get('/agents/me/external-accounts', { query, ...options }); - } } -export interface ExternalAccountRetrieveExternalAccountsResponse { +export interface ExternalAccountListParams extends DefaultPaginationParams { /** - * List of external accounts matching the filter criteria - */ - data: Array; - - /** - * Indicates if more results are available beyond this page - */ - hasMore: boolean; - - /** - * Cursor to retrieve the next page of results (only present if hasMore is true) + * Filter by currency code */ - nextCursor?: string; + currency?: string; /** - * Total number of external accounts matching the criteria (excluding pagination) + * Maximum number of results to return (default 20, max 100) */ - totalCount?: number; + limit?: number; } -export interface ExternalAccountExternalAccountsParams { +export interface ExternalAccountAddParams { /** * Lightning payment destination. Exactly one of `invoice`, `bolt12`, or * `lightningAddress` must be provided. @@ -209,27 +207,11 @@ export interface ExternalAccountExternalAccountsParams { platformAccountId?: string; } -export interface ExternalAccountRetrieveExternalAccountsParams { - /** - * Filter by currency code - */ - currency?: string; - - /** - * Cursor for pagination (returned from previous request) - */ - cursor?: string; - - /** - * Maximum number of results to return (default 20, max 100) - */ - limit?: number; -} - export declare namespace ExternalAccounts { export { - type ExternalAccountRetrieveExternalAccountsResponse as ExternalAccountRetrieveExternalAccountsResponse, - type ExternalAccountExternalAccountsParams as ExternalAccountExternalAccountsParams, - type ExternalAccountRetrieveExternalAccountsParams as ExternalAccountRetrieveExternalAccountsParams, + type ExternalAccountListParams as ExternalAccountListParams, + type ExternalAccountAddParams as ExternalAccountAddParams, }; } + +export { type ExternalAccountsDefaultPagination }; diff --git a/src/resources/agents/me/index.ts b/src/resources/agents/me/index.ts index decc227..3767ec8 100644 --- a/src/resources/agents/me/index.ts +++ b/src/resources/agents/me/index.ts @@ -9,19 +9,17 @@ export { } from './actions'; export { ExternalAccounts, - type ExternalAccountRetrieveExternalAccountsResponse, - type ExternalAccountExternalAccountsParams, - type ExternalAccountRetrieveExternalAccountsParams, + type ExternalAccountListParams, + type ExternalAccountAddParams, } from './external-accounts'; export { Me, - type MeListResponse, - type MeRetrieveInternalAccountsResponse, - type MeTransferInResponse, - type MeTransferOutResponse, - type MeRetrieveInternalAccountsParams, - type MeTransferInParams, - type MeTransferOutParams, + type MeRetrieveResponse, + type MeCreateTransferInResponse, + type MeCreateTransferOutResponse, + type MeCreateTransferInParams, + type MeCreateTransferOutParams, + type MeListInternalAccountsParams, } from './me'; export { Quotes, type QuoteExecuteResponse, type QuoteCreateParams, type QuoteExecuteParams } from './quotes'; export { Transactions, type TransactionListParams } from './transactions'; diff --git a/src/resources/agents/me/me.ts b/src/resources/agents/me/me.ts index 57907d2..e319eb1 100644 --- a/src/resources/agents/me/me.ts +++ b/src/resources/agents/me/me.ts @@ -4,6 +4,7 @@ import { APIResource } from '../../../core/resource'; import * as QuotesAPI from '../../quotes'; import * as TransferInAPI from '../../transfer-in'; import * as InternalAccountsAPI from '../../sandbox/internal-accounts'; +import { InternalAccountsDefaultPagination } from '../../sandbox/internal-accounts'; import * as ActionsAPI from './actions'; import { ActionListParams, @@ -13,17 +14,13 @@ import { Actions, } from './actions'; import * as ExternalAccountsAPI from './external-accounts'; -import { - ExternalAccountExternalAccountsParams, - ExternalAccountRetrieveExternalAccountsParams, - ExternalAccountRetrieveExternalAccountsResponse, - ExternalAccounts, -} from './external-accounts'; +import { ExternalAccountAddParams, ExternalAccountListParams, ExternalAccounts } from './external-accounts'; import * as MeQuotesAPI from './quotes'; import { QuoteCreateParams, QuoteExecuteParams, QuoteExecuteResponse, Quotes } from './quotes'; import * as TransactionsAPI from './transactions'; import { TransactionListParams, Transactions } from './transactions'; import { APIPromise } from '../../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; import { buildHeaders } from '../../../internal/headers'; import { RequestOptions } from '../../../internal/request-options'; @@ -33,10 +30,10 @@ import { RequestOptions } from '../../../internal/request-options'; export class Me extends APIResource { transactions: TransactionsAPI.Transactions = new TransactionsAPI.Transactions(this._client); quotes: MeQuotesAPI.Quotes = new MeQuotesAPI.Quotes(this._client); - actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); externalAccounts: ExternalAccountsAPI.ExternalAccounts = new ExternalAccountsAPI.ExternalAccounts( this._client, ); + actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client); /** * Retrieve the authenticated agent's own profile, policy, and current usage. This @@ -45,32 +42,13 @@ export class Me extends APIResource { * * @example * ```ts - * const mes = await client.agents.me.list(); + * const me = await client.agents.me.retrieve(); * ``` */ - list(options?: RequestOptions): APIPromise { + retrieve(options?: RequestOptions): APIPromise { return this._client.get('/agents/me', options); } - /** - * Retrieve the internal accounts belonging to the customer this agent operates on - * behalf of. Use this to discover available source accounts for transfers and - * quotes, and to verify which accounts are accessible under the agent's - * `accountRestrictions` policy. - * - * @example - * ```ts - * const response = - * await client.agents.me.retrieveInternalAccounts(); - * ``` - */ - retrieveInternalAccounts( - query: MeRetrieveInternalAccountsParams | null | undefined = {}, - options?: RequestOptions, - ): APIPromise { - return this._client.get('/agents/me/internal-accounts', { query, ...options }); - } - /** * Transfer funds from an external account to an internal account for the * authenticated agent's customer. Accounts must belong to the agent's customer. @@ -84,7 +62,7 @@ export class Me extends APIResource { * * @example * ```ts - * const response = await client.agents.me.transferIn({ + * const response = await client.agents.me.createTransferIn({ * destination: { * accountId: * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', @@ -97,7 +75,10 @@ export class Me extends APIResource { * }); * ``` */ - transferIn(params: MeTransferInParams, options?: RequestOptions): APIPromise { + createTransferIn( + params: MeCreateTransferInParams, + options?: RequestOptions, + ): APIPromise { const { 'Idempotency-Key': idempotencyKey, ...body } = params; return this._client.post('/agents/me/transfer-in', { body, @@ -119,7 +100,7 @@ export class Me extends APIResource { * * @example * ```ts - * const response = await client.agents.me.transferOut({ + * const response = await client.agents.me.createTransferOut({ * destination: { * accountId: * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', @@ -132,7 +113,10 @@ export class Me extends APIResource { * }); * ``` */ - transferOut(params: MeTransferOutParams, options?: RequestOptions): APIPromise { + createTransferOut( + params: MeCreateTransferOutParams, + options?: RequestOptions, + ): APIPromise { const { 'Idempotency-Key': idempotencyKey, ...body } = params; return this._client.post('/agents/me/transfer-out', { body, @@ -143,13 +127,38 @@ export class Me extends APIResource { ]), }); } + + /** + * Retrieve the internal accounts belonging to the customer this agent operates on + * behalf of. Use this to discover available source accounts for transfers and + * quotes, and to verify which accounts are accessible under the agent's + * `accountRestrictions` policy. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const internalAccount of client.agents.me.listInternalAccounts()) { + * // ... + * } + * ``` + */ + listInternalAccounts( + query: MeListInternalAccountsParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList( + '/agents/me/internal-accounts', + DefaultPagination, + { query, ...options }, + ); + } } /** * A programmatic agent with scoped permissions and a spending policy, used to * automate payment workflows. */ -export interface MeListResponse { +export interface MeRetrieveResponse { /** * System-generated unique identifier for the agent. */ @@ -186,7 +195,7 @@ export interface MeListResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: MeListResponse.Policy; + policy: MeRetrieveResponse.Policy; /** * Last update timestamp. @@ -197,10 +206,10 @@ export interface MeListResponse { * Real-time counters tracking the agent's spending and transaction activity * against its policy limits. */ - usage: MeListResponse.Usage; + usage: MeRetrieveResponse.Usage; } -export namespace MeListResponse { +export namespace MeRetrieveResponse { /** * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. @@ -384,35 +393,13 @@ export namespace MeListResponse { } } -export interface MeRetrieveInternalAccountsResponse { - /** - * List of internal accounts matching the filter criteria - */ - data: Array; - - /** - * Indicates if more results are available beyond this page - */ - hasMore: boolean; - - /** - * Cursor to retrieve the next page of results (only present if hasMore is true) - */ - nextCursor?: string; - - /** - * Total number of customers matching the criteria (excluding pagination) - */ - totalCount?: number; -} - /** * An action submitted by an agent that may require platform approval before * execution. All agent-initiated operations (quote execution, transfers) are * represented as AgentActions, giving the platform a consistent object to approve, * reject, and audit regardless of the underlying operation type. */ -export interface MeTransferInResponse { +export interface MeCreateTransferInResponse { /** * System-generated unique identifier for this action. */ @@ -489,10 +476,10 @@ export interface MeTransferInResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: MeTransferInResponse.TransferDetails; + transferDetails?: MeCreateTransferInResponse.TransferDetails; } -export namespace MeTransferInResponse { +export namespace MeCreateTransferInResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ @@ -525,7 +512,7 @@ export namespace MeTransferInResponse { * represented as AgentActions, giving the platform a consistent object to approve, * reject, and audit regardless of the underlying operation type. */ -export interface MeTransferOutResponse { +export interface MeCreateTransferOutResponse { /** * System-generated unique identifier for this action. */ @@ -602,10 +589,10 @@ export interface MeTransferOutResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: MeTransferOutResponse.TransferDetails; + transferDetails?: MeCreateTransferOutResponse.TransferDetails; } -export namespace MeTransferOutResponse { +export namespace MeCreateTransferOutResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ @@ -632,31 +619,7 @@ export namespace MeTransferOutResponse { } } -export interface MeRetrieveInternalAccountsParams { - /** - * Filter by currency code - */ - currency?: string; - - /** - * Cursor for pagination (returned from previous request) - */ - cursor?: string; - - /** - * Maximum number of results to return (default 20, max 100) - */ - limit?: number; - - /** - * Filter by internal account type. Use `EMBEDDED_WALLET` to find the - * self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / - * `INTERNAL_CRYPTO` for platform-managed holding accounts. - */ - type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; -} - -export interface MeTransferInParams { +export interface MeCreateTransferInParams { /** * Body param: Destination internal account details */ @@ -680,7 +643,7 @@ export interface MeTransferInParams { 'Idempotency-Key'?: string; } -export interface MeTransferOutParams { +export interface MeCreateTransferOutParams { /** * Body param: Destination external account details */ @@ -704,20 +667,38 @@ export interface MeTransferOutParams { 'Idempotency-Key'?: string; } +export interface MeListInternalAccountsParams extends DefaultPaginationParams { + /** + * Filter by currency code + */ + currency?: string; + + /** + * Maximum number of results to return (default 20, max 100) + */ + limit?: number; + + /** + * Filter by internal account type. Use `EMBEDDED_WALLET` to find the + * self-custodial wallet provisioned for the customer, or `INTERNAL_FIAT` / + * `INTERNAL_CRYPTO` for platform-managed holding accounts. + */ + type?: 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET'; +} + Me.Transactions = Transactions; Me.Quotes = Quotes; -Me.Actions = Actions; Me.ExternalAccounts = ExternalAccounts; +Me.Actions = Actions; export declare namespace Me { export { - type MeListResponse as MeListResponse, - type MeRetrieveInternalAccountsResponse as MeRetrieveInternalAccountsResponse, - type MeTransferInResponse as MeTransferInResponse, - type MeTransferOutResponse as MeTransferOutResponse, - type MeRetrieveInternalAccountsParams as MeRetrieveInternalAccountsParams, - type MeTransferInParams as MeTransferInParams, - type MeTransferOutParams as MeTransferOutParams, + type MeRetrieveResponse as MeRetrieveResponse, + type MeCreateTransferInResponse as MeCreateTransferInResponse, + type MeCreateTransferOutResponse as MeCreateTransferOutResponse, + type MeCreateTransferInParams as MeCreateTransferInParams, + type MeCreateTransferOutParams as MeCreateTransferOutParams, + type MeListInternalAccountsParams as MeListInternalAccountsParams, }; export { Transactions as Transactions, type TransactionListParams as TransactionListParams }; @@ -729,6 +710,12 @@ export declare namespace Me { type QuoteExecuteParams as QuoteExecuteParams, }; + export { + ExternalAccounts as ExternalAccounts, + type ExternalAccountListParams as ExternalAccountListParams, + type ExternalAccountAddParams as ExternalAccountAddParams, + }; + export { Actions as Actions, type ActionRetrieveResponse as ActionRetrieveResponse, @@ -736,11 +723,6 @@ export declare namespace Me { type ActionListResponsesDefaultPagination as ActionListResponsesDefaultPagination, type ActionListParams as ActionListParams, }; - - export { - ExternalAccounts as ExternalAccounts, - type ExternalAccountRetrieveExternalAccountsResponse as ExternalAccountRetrieveExternalAccountsResponse, - type ExternalAccountExternalAccountsParams as ExternalAccountExternalAccountsParams, - type ExternalAccountRetrieveExternalAccountsParams as ExternalAccountRetrieveExternalAccountsParams, - }; } + +export { type InternalAccountsDefaultPagination }; diff --git a/src/resources/agents/transactions.ts b/src/resources/agents/transactions.ts new file mode 100644 index 0000000..cd0f18b --- /dev/null +++ b/src/resources/agents/transactions.ts @@ -0,0 +1,5 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; + +export class Transactions extends APIResource {} diff --git a/src/resources/auth/credentials.ts b/src/resources/auth/credentials.ts index f270bd7..088ce65 100644 --- a/src/resources/auth/credentials.ts +++ b/src/resources/auth/credentials.ts @@ -209,6 +209,8 @@ export class Credentials extends APIResource { * 'id', * { * AuthCredentialVerifyRequest: { + * clientPublicKey: + * '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', * otp: '123456', * type: 'EMAIL_OTP', * }, @@ -595,6 +597,15 @@ export interface CredentialVerifyParams { export namespace CredentialVerifyParams { export interface EmailOtpCredentialVerifyRequest { + /** + * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 + * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters + * total). The matching private key must remain on the client. Grid encrypts the + * session signing key returned in the response to this public key. The key is + * ephemeral and one-time-use per verification request. + */ + clientPublicKey: string; + /** * The one-time password received by the user via email. */ @@ -604,15 +615,6 @@ export namespace CredentialVerifyParams { * Discriminator value identifying this as an email OTP verification. */ type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; - - /** - * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 - * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters - * total). The matching private key must remain on the client. Grid encrypts the - * session signing key returned in the response to this public key. The key is - * ephemeral and one-time-use per verification request. - */ - clientPublicKey?: string; } export interface OAuthCredentialVerifyRequest { diff --git a/src/resources/index.ts b/src/resources/index.ts index 5cdd41d..78c756c 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -7,14 +7,15 @@ export { type AgentRetrieveResponse, type AgentUpdateResponse, type AgentListResponse, - type AgentRetrieveApprovalsResponse, + type AgentListApprovalsResponse, type AgentUpdatePolicyResponse, type AgentCreateParams, type AgentUpdateParams, type AgentListParams, - type AgentRetrieveApprovalsParams, + type AgentListApprovalsParams, type AgentUpdatePolicyParams, type AgentListResponsesDefaultPagination, + type AgentListApprovalsResponsesDefaultPagination, } from './agents/agents'; export { Auth } from './auth/auth'; export { diff --git a/tests/api-resources/agents/agents.test.ts b/tests/api-resources/agents/agents.test.ts index f00bff1..492778d 100644 --- a/tests/api-resources/agents/agents.test.ts +++ b/tests/api-resources/agents/agents.test.ts @@ -129,8 +129,8 @@ describe('resource agents', () => { }); // Mock server tests are disabled - test.skip('retrieveApprovals', async () => { - const responsePromise = client.agents.retrieveApprovals(); + test.skip('listApprovals', async () => { + const responsePromise = client.agents.listApprovals(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -141,10 +141,10 @@ describe('resource agents', () => { }); // Mock server tests are disabled - test.skip('retrieveApprovals: request options and params are passed correctly', async () => { + test.skip('listApprovals: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.agents.retrieveApprovals( + client.agents.listApprovals( { agentId: 'agentId', cursor: 'cursor', diff --git a/tests/api-resources/agents/device-codes.test.ts b/tests/api-resources/agents/device-codes.test.ts index 79fffee..4edf0cc 100644 --- a/tests/api-resources/agents/device-codes.test.ts +++ b/tests/api-resources/agents/device-codes.test.ts @@ -10,8 +10,8 @@ const client = new LightsparkGrid({ describe('resource deviceCodes', () => { // Mock server tests are disabled - test.skip('deviceCodes', async () => { - const responsePromise = client.agents.deviceCodes.deviceCodes('agentId'); + test.skip('getStatus', async () => { + const responsePromise = client.agents.deviceCodes.getStatus('code'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -34,8 +34,8 @@ describe('resource deviceCodes', () => { }); // Mock server tests are disabled - test.skip('retrieveStatus', async () => { - const responsePromise = client.agents.deviceCodes.retrieveStatus('code'); + test.skip('regenerate', async () => { + const responsePromise = client.agents.deviceCodes.regenerate('agentId'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; diff --git a/tests/api-resources/agents/me/external-accounts.test.ts b/tests/api-resources/agents/me/external-accounts.test.ts index a9aa5eb..3cde53b 100644 --- a/tests/api-resources/agents/me/external-accounts.test.ts +++ b/tests/api-resources/agents/me/external-accounts.test.ts @@ -21,6 +21,33 @@ describe('resource externalAccounts', () => { expect(dataAndResponse.response).toBe(rawResponse); }); + // Mock server tests are disabled + test.skip('list', async () => { + const responsePromise = client.agents.me.externalAccounts.list(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.externalAccounts.list( + { + currency: 'currency', + cursor: 'cursor', + limit: 1, + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); + }); + // Mock server tests are disabled test.skip('delete', async () => { const responsePromise = client.agents.me.externalAccounts.delete('externalAccountId'); @@ -34,8 +61,8 @@ describe('resource externalAccounts', () => { }); // Mock server tests are disabled - test.skip('externalAccounts: only required params', async () => { - const responsePromise = client.agents.me.externalAccounts.externalAccounts({ + test.skip('add: only required params', async () => { + const responsePromise = client.agents.me.externalAccounts.add({ accountInfo: { accountNumber: '12345678901', accountType: 'USD_ACCOUNT', @@ -54,8 +81,8 @@ describe('resource externalAccounts', () => { }); // Mock server tests are disabled - test.skip('externalAccounts: required and optional params', async () => { - const response = await client.agents.me.externalAccounts.externalAccounts({ + test.skip('add: required and optional params', async () => { + const response = await client.agents.me.externalAccounts.add({ accountInfo: { accountNumber: '12345678901', accountType: 'USD_ACCOUNT', @@ -84,31 +111,4 @@ describe('resource externalAccounts', () => { platformAccountId: 'ext_acc_123456', }); }); - - // Mock server tests are disabled - test.skip('retrieveExternalAccounts', async () => { - const responsePromise = client.agents.me.externalAccounts.retrieveExternalAccounts(); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // Mock server tests are disabled - test.skip('retrieveExternalAccounts: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.agents.me.externalAccounts.retrieveExternalAccounts( - { - currency: 'currency', - cursor: 'cursor', - limit: 1, - }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(LightsparkGrid.NotFoundError); - }); }); diff --git a/tests/api-resources/agents/me/me.test.ts b/tests/api-resources/agents/me/me.test.ts index 8dfda20..1db676d 100644 --- a/tests/api-resources/agents/me/me.test.ts +++ b/tests/api-resources/agents/me/me.test.ts @@ -10,8 +10,8 @@ const client = new LightsparkGrid({ describe('resource me', () => { // Mock server tests are disabled - test.skip('list', async () => { - const responsePromise = client.agents.me.list(); + test.skip('retrieve', async () => { + const responsePromise = client.agents.me.retrieve(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,8 +22,11 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('retrieveInternalAccounts', async () => { - const responsePromise = client.agents.me.retrieveInternalAccounts(); + test.skip('createTransferIn: only required params', async () => { + const responsePromise = client.agents.me.createTransferIn({ + destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -34,26 +37,20 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('retrieveInternalAccounts: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.agents.me.retrieveInternalAccounts( - { - currency: 'currency', - cursor: 'cursor', - limit: 1, - type: 'INTERNAL_FIAT', - }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(LightsparkGrid.NotFoundError); + test.skip('createTransferIn: required and optional params', async () => { + const response = await client.agents.me.createTransferIn({ + destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, + source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + amount: 12550, + 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', + }); }); // Mock server tests are disabled - test.skip('transferIn: only required params', async () => { - const responsePromise = client.agents.me.transferIn({ - destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, - source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + test.skip('createTransferOut: only required params', async () => { + const responsePromise = client.agents.me.createTransferOut({ + destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -65,21 +62,18 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('transferIn: required and optional params', async () => { - const response = await client.agents.me.transferIn({ - destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, - source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + test.skip('createTransferOut: required and optional params', async () => { + const response = await client.agents.me.createTransferOut({ + destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, + source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, amount: 12550, 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', }); }); // Mock server tests are disabled - test.skip('transferOut: only required params', async () => { - const responsePromise = client.agents.me.transferOut({ - destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, - source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, - }); + test.skip('listInternalAccounts', async () => { + const responsePromise = client.agents.me.listInternalAccounts(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -90,12 +84,18 @@ describe('resource me', () => { }); // Mock server tests are disabled - test.skip('transferOut: required and optional params', async () => { - const response = await client.agents.me.transferOut({ - destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' }, - source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' }, - amount: 12550, - 'Idempotency-Key': '550e8400-e29b-41d4-a716-446655440000', - }); + test.skip('listInternalAccounts: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.agents.me.listInternalAccounts( + { + currency: 'currency', + cursor: 'cursor', + limit: 1, + type: 'INTERNAL_FIAT', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(LightsparkGrid.NotFoundError); }); }); diff --git a/tests/api-resources/auth/credentials.test.ts b/tests/api-resources/auth/credentials.test.ts index 7d5e9f8..d25d578 100644 --- a/tests/api-resources/auth/credentials.test.ts +++ b/tests/api-resources/auth/credentials.test.ts @@ -114,7 +114,12 @@ describe('resource credentials', () => { // Mock server tests are disabled test.skip('verify: only required params', async () => { const responsePromise = client.auth.credentials.verify('id', { - AuthCredentialVerifyRequest: { otp: '123456', type: 'EMAIL_OTP' }, + AuthCredentialVerifyRequest: { + clientPublicKey: + '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + otp: '123456', + type: 'EMAIL_OTP', + }, }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -129,10 +134,10 @@ describe('resource credentials', () => { test.skip('verify: required and optional params', async () => { const response = await client.auth.credentials.verify('id', { AuthCredentialVerifyRequest: { - otp: '123456', - type: 'EMAIL_OTP', clientPublicKey: '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + otp: '123456', + type: 'EMAIL_OTP', }, 'Request-Id': '7c4a8d09-ca37-4e3e-9e0d-8c2b3e9a1f21', }); From a7b47742df949942eedcb61d6a44c1fd6c35bf52 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 21:21:34 +0000 Subject: [PATCH 20/26] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index a1e20cf..8e7d0ec 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-25c9bc1387bc0bbac891dc7bc37d5e83c363a4d5c3e9057a6b24700dc6787073.yml -openapi_spec_hash: b87bf651e75289ba88448c82bc67d827 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-e4abf4c1a8c87a479b472e0e08401923f48ca2ed089393d0fa288ddec6f39508.yml +openapi_spec_hash: 538fcdbd839ea56e4e9131da4ba1ee9d config_hash: ed09c0afe747c9c6bc0beb25176b1409 From 21c1a37b08adf1791280d1352f3a2bbf1d6708fa Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 21:25:50 +0000 Subject: [PATCH 21/26] docs(api): clarify OAUTH credential challenge behavior in auth.credentials --- .stats.yml | 4 ++-- packages/mcp-server/src/local-docs-search.ts | 6 +++--- src/resources/auth/credentials.ts | 22 ++++++++++++-------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/.stats.yml b/.stats.yml index 8e7d0ec..0a7f9b3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-e4abf4c1a8c87a479b472e0e08401923f48ca2ed089393d0fa288ddec6f39508.yml -openapi_spec_hash: 538fcdbd839ea56e4e9131da4ba1ee9d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-cd1e5b4ac2e4a583666777225c5117279ba2b36e22edc4a25b0387e2e6526010.yml +openapi_spec_hash: f65171ea46d9783aaacc520c498bce59 config_hash: ed09c0afe747c9c6bc0beb25176b1409 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 2b1cd4e..da22abf 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -2299,7 +2299,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }", markdown: - "## create\n\n`client.auth.credentials.create(AuthCredentialCreateRequest: { accountId: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { accountId: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { accountId: string; attestation: { attestationObject: string; clientDataJson: string; credentialId: string; transports?: 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'[]; }; challenge: string; nickname: string; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }, Grid-Wallet-Signature?: string, Request-Id?: string): { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n\n**post** `/auth/credentials`\n\nRegister an authentication credential for an Embedded Wallet customer.\n\n**First credential on an internal account**\n\nIf the target internal account does not yet have any authentication credential registered, call this endpoint with the credential details. The response is `201` with the created `AuthMethod`. For `EMAIL_OTP` credentials, this call also triggers a one-time password email to the address on the customer record tied to the internal account; the credential must be activated via `POST /auth/credentials/{id}/verify` before it can sign requests. For `OAUTH` credentials, the supplied `oidcToken` is validated inline against the issuer's `.well-known` OpenID configuration (the token's `iat` must be less than 60 seconds before the request); activation still happens via `POST /auth/credentials/{id}/verify`. For `PASSKEY` credentials, the client completes a WebAuthn registration (`navigator.credentials.create()`) using a `challenge` issued by the platform backend and submits the resulting `attestation` here. The registration response is a plain `AuthMethod` (no inline authentication challenge). To produce the first session, the client follows registration with two further calls: `POST /auth/credentials/{id}/challenge` (carrying the client's ephemeral `clientPublicKey`) returns a Grid-issued WebAuthn challenge plus `requestId`, and `POST /auth/credentials/{id}/verify` (with `Request-Id: `) consumes the resulting assertion and issues the session. The same two-step pattern is used on every subsequent reauthentication. Only one `PASSKEY` credential is supported per internal account in v1.\n\n**Adding an additional credential**\n\nRegistering an additional credential against an internal account that already has one requires a signature from an existing verified credential. Call this endpoint with the new credential's details; if an existing credential is already registered on the internal account the response is `202` with a `payloadToSign` and a `requestId`. Use the session API keypair of an existing verified credential on the same internal account (decrypted client-side from its `encryptedSessionSigningKey`) to build an API-key stamp over `payloadToSign`, then retry the same request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `201` with the created `AuthMethod`. For `EMAIL_OTP`, the OTP email is triggered on the signed retry, and the credential must then be activated via `POST /auth/credentials/{id}/verify`.\n\n\n### Parameters\n\n- `AuthCredentialCreateRequest: { accountId: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { accountId: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { accountId: string; attestation: { attestationObject: string; clientDataJson: string; credentialId: string; transports?: 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'[]; }; challenge: string; nickname: string; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n Strict wrapper around `AuthMethod`. Used directly as the registration response on `POST /auth/credentials` (all three credential types) and inside `AuthCredentialResponseOneOf` for the `EMAIL_OTP` and `OAUTH` branches of `POST /auth/credentials/{id}/challenge`. The only difference from `AuthMethod` is `unevaluatedProperties: false`, which disambiguates the oneOf against `PasskeyAuthChallenge` — without the strictness, an `AuthMethod` with extra fields would ambiguously match both branches.\n\n - `id: string`\n - `accountId: string`\n - `createdAt: string`\n - `nickname: string`\n - `type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'`\n - `updatedAt: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authMethod = await client.auth.credentials.create({ AuthCredentialCreateRequest: { accountId: 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002', type: 'EMAIL_OTP' } });\n\nconsole.log(authMethod);\n```", + "## create\n\n`client.auth.credentials.create(AuthCredentialCreateRequest: { accountId: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { accountId: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { accountId: string; attestation: { attestationObject: string; clientDataJson: string; credentialId: string; transports?: 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'[]; }; challenge: string; nickname: string; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }, Grid-Wallet-Signature?: string, Request-Id?: string): { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n\n**post** `/auth/credentials`\n\nRegister an authentication credential for an Embedded Wallet customer.\n\n**First credential on an internal account**\n\nIf the target internal account does not yet have any authentication credential registered, call this endpoint with the credential details. The response is `201` with the created `AuthMethod`. For `EMAIL_OTP` credentials, this call also triggers a one-time password email to the address on the customer record tied to the internal account; the credential must be activated via `POST /auth/credentials/{id}/verify` before it can sign requests. For `OAUTH` credentials, the supplied `oidcToken` is validated inline against the issuer's `.well-known` OpenID configuration (the token's `iat` must be less than 60 seconds before the request); activation still happens via `POST /auth/credentials/{id}/verify`. For `PASSKEY` credentials, the client completes a WebAuthn registration (`navigator.credentials.create()`) using a `challenge` issued by the platform backend and submits the resulting `attestation` here. The registration response is a plain `AuthMethod` (no inline authentication challenge). To produce the first session, the client follows registration with two further calls: `POST /auth/credentials/{id}/challenge` (carrying the client's ephemeral `clientPublicKey`) returns a Grid-issued WebAuthn challenge plus `requestId`, and `POST /auth/credentials/{id}/verify` (with `Request-Id: `) consumes the resulting assertion and issues the session. The same two-step pattern is used on every subsequent reauthentication. Only one `PASSKEY` credential is supported per internal account in v1.\n\n**Adding an additional credential**\n\nRegistering an additional credential against an internal account that already has one requires a signature from an existing verified credential. Call this endpoint with the new credential's details; if an existing credential is already registered on the internal account the response is `202` with a `payloadToSign` and a `requestId`. Use the session API keypair of an existing verified credential on the same internal account (decrypted client-side from its `encryptedSessionSigningKey`) to build an API-key stamp over `payloadToSign`, then retry the same request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `201` with the created `AuthMethod`. For `EMAIL_OTP`, the OTP email is triggered on the signed retry, and the credential must then be activated via `POST /auth/credentials/{id}/verify`.\n\n\n### Parameters\n\n- `AuthCredentialCreateRequest: { accountId: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { accountId: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { accountId: string; attestation: { attestationObject: string; clientDataJson: string; credentialId: string; transports?: 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'[]; }; challenge: string; nickname: string; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n Strict wrapper around `AuthMethod`. Used directly as the registration response on `POST /auth/credentials` (all three credential types) and inside `AuthCredentialResponseOneOf` for the `EMAIL_OTP` branch of `POST /auth/credentials/{id}/challenge`. The only difference from `AuthMethod` is `unevaluatedProperties: false`, which disambiguates the oneOf against `PasskeyAuthChallenge` — without the strictness, an `AuthMethod` with extra fields would ambiguously match both branches.\n\n - `id: string`\n - `accountId: string`\n - `createdAt: string`\n - `nickname: string`\n - `type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'`\n - `updatedAt: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authMethod = await client.auth.credentials.create({ AuthCredentialCreateRequest: { accountId: 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002', type: 'EMAIL_OTP' } });\n\nconsole.log(authMethod);\n```", perLanguage: { typescript: { method: 'client.auth.credentials.create', @@ -2368,14 +2368,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [ httpMethod: 'post', summary: 'Re-issue an authentication credential challenge', description: - "Re-issue the challenge for an existing authentication credential.\n\nFor `EMAIL_OTP` credentials, this triggers a new one-time password email to the address on file. The response is a plain `AuthMethod`; there is no challenge body to surface because the OTP is delivered out-of-band via email. After the user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete verification and issue a session.\n\nFor `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge for reauthentication. The request body must carry the client's ephemeral `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload the returned challenge is computed from — this seals the resulting session signing key to the client. The response is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The client passes the `challenge` into `navigator.credentials.get()` and submits the resulting assertion to `POST /auth/credentials/{id}/verify` with `Request-Id: ` to receive a session.\n", + "Re-issue the challenge for an existing authentication credential.\n\nFor `EMAIL_OTP` credentials, this triggers a new one-time password email to the address on file. The response is a plain `AuthMethod`; there is no challenge body to surface because the OTP is delivered out-of-band via email. After the user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete verification and issue a session.\n\n`OAUTH` credentials do not have a challenge step. To authenticate or reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` with a fresh OIDC token and a `clientPublicKey`.\n\nFor `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge for reauthentication. The request body must carry the client's ephemeral `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload the returned challenge is computed from — this seals the resulting session signing key to the client. The response is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The client passes the `challenge` into `navigator.credentials.get()` and submits the resulting assertion to `POST /auth/credentials/{id}/verify` with `Request-Id: ` to receive a session.\n", stainlessPath: '(resource) auth.credentials > (method) resend_challenge', qualified: 'client.auth.credentials.resendChallenge', params: ['id: string;', 'clientPublicKey?: string;'], response: "{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; } | { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }", markdown: - "## resend_challenge\n\n`client.auth.credentials.resendChallenge(id: string, clientPublicKey?: string): object | object`\n\n**post** `/auth/credentials/{id}/challenge`\n\nRe-issue the challenge for an existing authentication credential.\n\nFor `EMAIL_OTP` credentials, this triggers a new one-time password email to the address on file. The response is a plain `AuthMethod`; there is no challenge body to surface because the OTP is delivered out-of-band via email. After the user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete verification and issue a session.\n\nFor `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge for reauthentication. The request body must carry the client's ephemeral `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload the returned challenge is computed from — this seals the resulting session signing key to the client. The response is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The client passes the `challenge` into `navigator.credentials.get()` and submits the resulting assertion to `POST /auth/credentials/{id}/verify` with `Request-Id: ` to receive a session.\n\n\n### Parameters\n\n- `id: string`\n\n- `clientPublicKey?: string`\n Required for `PASSKEY` credentials. Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (`04` prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters total). The matching private key must remain on the client. Grid bakes this key into the Turnkey session-creation payload that the returned `challenge` is computed from, so the resulting session signing key is sealed to the client. Ignored for `EMAIL_OTP` and `OAUTH` credentials.\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; } | { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n Discriminated response shape returned from `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` and `OAUTH` credentials the body is a plain `AuthMethod` (wrapped as `AuthMethodResponse` to disambiguate the oneOf). For `PASSKEY` credentials the body is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the Grid-issued `challenge`, `requestId`, and `expiresAt` that drive the subsequent assertion. Registration responses from `POST /auth/credentials` use the simpler `AuthMethodResponse` shape directly for all three credential types.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.credentials.resendChallenge('id');\n\nconsole.log(response);\n```", + "## resend_challenge\n\n`client.auth.credentials.resendChallenge(id: string, clientPublicKey?: string): object | object`\n\n**post** `/auth/credentials/{id}/challenge`\n\nRe-issue the challenge for an existing authentication credential.\n\nFor `EMAIL_OTP` credentials, this triggers a new one-time password email to the address on file. The response is a plain `AuthMethod`; there is no challenge body to surface because the OTP is delivered out-of-band via email. After the user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete verification and issue a session.\n\n`OAUTH` credentials do not have a challenge step. To authenticate or reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` with a fresh OIDC token and a `clientPublicKey`.\n\nFor `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge for reauthentication. The request body must carry the client's ephemeral `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload the returned challenge is computed from — this seals the resulting session signing key to the client. The response is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The client passes the `challenge` into `navigator.credentials.get()` and submits the resulting assertion to `POST /auth/credentials/{id}/verify` with `Request-Id: ` to receive a session.\n\n\n### Parameters\n\n- `id: string`\n\n- `clientPublicKey?: string`\n Required for `PASSKEY` credentials. Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (`04` prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters total). The matching private key must remain on the client. Grid bakes this key into the Turnkey session-creation payload that the returned `challenge` is computed from, so the resulting session signing key is sealed to the client. Ignored for `EMAIL_OTP`.\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; } | { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n Discriminated response shape returned from `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` credentials the body is a plain `AuthMethod` (wrapped as `AuthMethodResponse` to disambiguate the oneOf). For `PASSKEY` credentials the body is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the Grid-issued `challenge`, `requestId`, and `expiresAt` that drive the subsequent assertion. OAuth credentials do not use the challenge endpoint; call `POST /auth/credentials/{id}/verify` with a fresh OIDC token instead. Registration responses from `POST /auth/credentials` use the simpler `AuthMethodResponse` shape directly for all three credential types.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.credentials.resendChallenge('id');\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.auth.credentials.resendChallenge', diff --git a/src/resources/auth/credentials.ts b/src/resources/auth/credentials.ts index 088ce65..ad8c057 100644 --- a/src/resources/auth/credentials.ts +++ b/src/resources/auth/credentials.ts @@ -111,6 +111,10 @@ export class Credentials extends APIResource { * user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete * verification and issue a session. * + * `OAUTH` credentials do not have a challenge step. To authenticate or + * reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` + * with a fresh OIDC token and a `clientPublicKey`. + * * For `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge * for reauthentication. The request body must carry the client's ephemeral * `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload @@ -284,13 +288,14 @@ export interface CredentialListResponse { /** * Discriminated response shape returned from - * `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` and `OAUTH` credentials - * the body is a plain `AuthMethod` (wrapped as `AuthMethodResponse` to - * disambiguate the oneOf). For `PASSKEY` credentials the body is a - * `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the Grid-issued - * `challenge`, `requestId`, and `expiresAt` that drive the subsequent assertion. - * Registration responses from `POST /auth/credentials` use the simpler - * `AuthMethodResponse` shape directly for all three credential types. + * `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` credentials the body is + * a plain `AuthMethod` (wrapped as `AuthMethodResponse` to disambiguate the + * oneOf). For `PASSKEY` credentials the body is a `PasskeyAuthChallenge` — the + * base `AuthMethod` fields plus the Grid-issued `challenge`, `requestId`, and + * `expiresAt` that drive the subsequent assertion. OAuth credentials do not use + * the challenge endpoint; call `POST /auth/credentials/{id}/verify` with a fresh + * OIDC token instead. Registration responses from `POST /auth/credentials` use the + * simpler `AuthMethodResponse` shape directly for all three credential types. */ export type CredentialResendChallengeResponse = | AuthMethod @@ -554,8 +559,7 @@ export interface CredentialResendChallengeParams { * and 32-byte Y coordinates; 130 hex characters total). The matching private key * must remain on the client. Grid bakes this key into the Turnkey session-creation * payload that the returned `challenge` is computed from, so the resulting session - * signing key is sealed to the client. Ignored for `EMAIL_OTP` and `OAUTH` - * credentials. + * signing key is sealed to the client. Ignored for `EMAIL_OTP`. */ clientPublicKey?: string; } From 3793af3229ccc1dc3750849c46563a379048a14a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 21:59:04 +0000 Subject: [PATCH 22/26] feat(api): manual updates --- .stats.yml | 4 +- README.md | 4 +- api.md | 10 + packages/mcp-server/README.md | 13 +- packages/mcp-server/manifest.json | 11 +- packages/mcp-server/src/auth.ts | 10 +- packages/mcp-server/src/code-tool-worker.ts | 2 + packages/mcp-server/src/code-tool.ts | 14 +- packages/mcp-server/src/local-docs-search.ts | 176 +++++++--- packages/mcp-server/src/methods.ts | 12 + scripts/detect-breaking-changes | 1 + src/client.ts | 76 +++-- src/resources/agents/agents.ts | 16 +- src/resources/agents/index.ts | 8 +- src/resources/agents/transactions.ts | 314 +++++++++++++++++- .../api-resources/agents/transactions.test.ts | 48 +++ 16 files changed, 624 insertions(+), 95 deletions(-) create mode 100644 tests/api-resources/agents/transactions.test.ts diff --git a/.stats.yml b/.stats.yml index 0a7f9b3..61b4573 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-cd1e5b4ac2e4a583666777225c5117279ba2b36e22edc4a25b0387e2e6526010.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-30815dbaded9c6b919d0636b7893be1e3c0bbdba6c8d3065e50de7d5dff6a196.yml openapi_spec_hash: f65171ea46d9783aaacc520c498bce59 -config_hash: ed09c0afe747c9c6bc0beb25176b1409 +config_hash: 078d0f235bd5d1ba3b0ebe10b6b9bfd6 diff --git a/README.md b/README.md index 5dd513c..fe3abd0 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ It is generated with [Stainless](https://www.stainless.com/). Use the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application. -[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19) -[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D) +[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwieC1ncmlkLWFnZW50LWFjY2Vzcy10b2tlbiI6Ik15IEFnZW50IEFjY2VzcyBUb2tlbiIsIlgtR3JpZC1TaWduYXR1cmUiOiJNeSBXZWJob29rIFNpZ25hdHVyZSJ9fQ) +[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22x-grid-agent-access-token%22%3A%22My%20Agent%20Access%20Token%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D) > Note: You may need to set environment variables in your MCP client. diff --git a/api.md b/api.md index 9da41b4..9c66665 100644 --- a/api.md +++ b/api.md @@ -616,6 +616,16 @@ Methods: ## Transactions +Types: + +- TransactionApproveResponse +- TransactionRejectResponse + +Methods: + +- client.agents.transactions.approve(actionID, { ...params }) -> TransactionApproveResponse +- client.agents.transactions.reject(actionID, { ...params }) -> TransactionRejectResponse + ## Actions Types: diff --git a/packages/mcp-server/README.md b/packages/mcp-server/README.md index e6a815c..3f76eb2 100644 --- a/packages/mcp-server/README.md +++ b/packages/mcp-server/README.md @@ -11,6 +11,7 @@ You can run the MCP Server directly via `npx`: ```sh export GRID_CLIENT_ID="My Username" export GRID_CLIENT_SECRET="My Password" +export GRID_AGENT_ACCESS_TOKEN="My Agent Access Token" export GRID_WEBHOOK_PUBKEY="My Webhook Signature" npx -y @lightsparkdev/grid-mcp@latest ``` @@ -31,6 +32,7 @@ For clients with a configuration JSON, it might look something like this: "env": { "GRID_CLIENT_ID": "My Username", "GRID_CLIENT_SECRET": "My Password", + "GRID_AGENT_ACCESS_TOKEN": "My Agent Access Token", "GRID_WEBHOOK_PUBKEY": "My Webhook Signature" } } @@ -43,14 +45,14 @@ For clients with a configuration JSON, it might look something like this: If you use Cursor, you can install the MCP server by using the button below. You will need to set your environment variables in Cursor's `mcp.json`, which can be found in Cursor Settings > Tools & MCP > New MCP Server. -[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19) +[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwieC1ncmlkLWFnZW50LWFjY2Vzcy10b2tlbiI6Ik15IEFnZW50IEFjY2VzcyBUb2tlbiIsIlgtR3JpZC1TaWduYXR1cmUiOiJNeSBXZWJob29rIFNpZ25hdHVyZSJ9fQ) ### VS Code If you use MCP, you can install the MCP server by clicking the link below. You will need to set your environment variables in VS Code's `mcp.json`, which can be found via Command Palette > MCP: Open User Configuration. -[Open VS Code](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D) +[Open VS Code](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22x-grid-agent-access-token%22%3A%22My%20Agent%20Access%20Token%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D) ### Claude Code @@ -58,7 +60,7 @@ If you use Claude Code, you can install the MCP server by running the command be environment variables in Claude Code's `.claude.json`, which can be found in your home directory. ``` -claude mcp add lightsparkdev_grid_mcp_api --header "x-grid-client-id: My Username" --header "x-grid-client-secret: My Password" --header "X-Grid-Signature: My Webhook Signature" --transport http https://grid-mcp.stlmcp.com +claude mcp add lightsparkdev_grid_mcp_api --header "x-grid-client-id: My Username" --header "x-grid-client-secret: My Password" --header "x-grid-agent-access-token: My Agent Access Token" --header "X-Grid-Signature: My Webhook Signature" --transport http https://grid-mcp.stlmcp.com ``` ## Code Mode @@ -82,13 +84,14 @@ and repeatably. Launching the client with `--transport=http` launches the server as a remote server using Streamable HTTP transport. The `--port` setting can choose the port it will run on, and the `--socket` setting allows it to run on a Unix socket. -Authorization can be provided via the `Authorization` header using the Basic scheme. +Authorization can be provided via the `Authorization` header using the Basic or Bearer scheme. Additionally, authorization can be provided via the following headers: | Header | Equivalent client option | Security scheme | -| ---------------------- | ------------------------ | ---------------- | +| --------------------------- | ------------------------ | ---------------- | | `x-grid-client-id` | `username` | BasicAuth | | `x-grid-client-secret` | `password` | BasicAuth | +| `x-grid-agent-access-token` | `agentAccessToken` | AgentAuth | | `X-Grid-Signature` | `webhookSignature` | WebhookSignature | A configuration JSON for this server might look like this, assuming the server is hosted at `http://localhost:3000`: diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index 397fd42..5b80b92 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -23,6 +23,7 @@ "env": { "GRID_CLIENT_ID": "${user_config.GRID_CLIENT_ID}", "GRID_CLIENT_SECRET": "${user_config.GRID_CLIENT_SECRET}", + "GRID_AGENT_ACCESS_TOKEN": "${user_config.GRID_AGENT_ACCESS_TOKEN}", "GRID_WEBHOOK_PUBKEY": "${user_config.GRID_WEBHOOK_PUBKEY}" } } @@ -31,13 +32,19 @@ "GRID_CLIENT_ID": { "title": "username", "description": "API token authentication using format `:`", - "required": true, + "required": false, "type": "string" }, "GRID_CLIENT_SECRET": { "title": "password", "description": "API token authentication using format `:`", - "required": true, + "required": false, + "type": "string" + }, + "GRID_AGENT_ACCESS_TOKEN": { + "title": "agent_access_token", + "description": "Bearer access token obtained by redeeming a device code. Required when calling agent-scoped endpoints (e.g. `GET /agents/me/...`). Leave unset for platform-scoped operations.", + "required": false, "type": "string" }, "GRID_WEBHOOK_PUBKEY": { diff --git a/packages/mcp-server/src/auth.ts b/packages/mcp-server/src/auth.ts index 1139d1a..d6feaf1 100644 --- a/packages/mcp-server/src/auth.ts +++ b/packages/mcp-server/src/auth.ts @@ -15,9 +15,11 @@ export const parseClientAuthHeaders = (req: IncomingMessage, required?: boolean) username: rawValue.slice(0, rawValue.search(':')), password: rawValue.slice(rawValue.search(':') + 1), }; + case 'Bearer': + return { agentAccessToken: req.headers.authorization.slice('Bearer '.length) }; default: throw new Error( - 'Unsupported authorization scheme. Expected the "Authorization" header to be a supported scheme (Basic).', + 'Unsupported authorization scheme. Expected the "Authorization" header to be a supported scheme (Basic, Bearer).', ); } } else if (required) { @@ -32,11 +34,15 @@ export const parseClientAuthHeaders = (req: IncomingMessage, required?: boolean) Array.isArray(req.headers['x-grid-client-secret']) ? req.headers['x-grid-client-secret'][0] : req.headers['x-grid-client-secret']; + const agentAccessToken = + Array.isArray(req.headers['x-grid-agent-access-token']) ? + req.headers['x-grid-agent-access-token'][0] + : req.headers['x-grid-agent-access-token']; const webhookSignature = Array.isArray(req.headers['x-grid-signature']) ? req.headers['x-grid-signature'][0] : req.headers['x-grid-signature']; - return { username, password, webhookSignature }; + return { username, password, agentAccessToken, webhookSignature }; }; export const getStainlessApiKey = (req: IncomingMessage, mcpOptions: McpOptions): string | undefined => { diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts index 6471ab4..93d5de5 100644 --- a/packages/mcp-server/src/code-tool-worker.ts +++ b/packages/mcp-server/src/code-tool-worker.ts @@ -201,6 +201,8 @@ const fuse = new Fuse( 'client.agents.deviceCodes.getStatus', 'client.agents.deviceCodes.redeem', 'client.agents.deviceCodes.regenerate', + 'client.agents.transactions.approve', + 'client.agents.transactions.reject', 'client.agents.actions.approve', 'client.agents.actions.reject', ], diff --git a/packages/mcp-server/src/code-tool.ts b/packages/mcp-server/src/code-tool.ts index c61c3fa..6d9c186 100644 --- a/packages/mcp-server/src/code-tool.ts +++ b/packages/mcp-server/src/code-tool.ts @@ -10,7 +10,7 @@ import { asTextContentResult, } from './types'; import { Tool } from '@modelcontextprotocol/sdk/types.js'; -import { readEnv, requireValue } from './util'; +import { readEnv } from './util'; import { WorkerInput, WorkerOutput } from './code-tool-types'; import { getLogger } from './logger'; import { SdkMethod } from './methods'; @@ -150,14 +150,9 @@ const remoteStainlessHandler = async ({ const codeModeEndpoint = readEnv('CODE_MODE_ENDPOINT_URL') ?? 'https://api.stainless.com/api/ai/code-tool'; const localClientEnvs = { - GRID_CLIENT_ID: requireValue( - readEnv('GRID_CLIENT_ID') ?? client.username, - 'set GRID_CLIENT_ID environment variable or provide username client option', - ), - GRID_CLIENT_SECRET: requireValue( - readEnv('GRID_CLIENT_SECRET') ?? client.password, - 'set GRID_CLIENT_SECRET environment variable or provide password client option', - ), + GRID_CLIENT_ID: readEnv('GRID_CLIENT_ID') ?? client.username ?? undefined, + GRID_CLIENT_SECRET: readEnv('GRID_CLIENT_SECRET') ?? client.password ?? undefined, + GRID_AGENT_ACCESS_TOKEN: readEnv('GRID_AGENT_ACCESS_TOKEN') ?? client.agentAccessToken ?? undefined, GRID_WEBHOOK_PUBKEY: readEnv('GRID_WEBHOOK_PUBKEY') ?? client.webhookSignature ?? undefined, LIGHTSPARK_GRID_BASE_URL: readEnv('LIGHTSPARK_GRID_BASE_URL') ?? client.baseURL ?? undefined, }; @@ -299,6 +294,7 @@ const localDenoHandler = async ({ ...(client.baseURL != null ? { baseURL: client.baseURL } : undefined), ...(client.username != null ? { username: client.username } : undefined), ...(client.password != null ? { password: client.password } : undefined), + ...(client.agentAccessToken != null ? { agentAccessToken: client.agentAccessToken } : undefined), ...(client.webhookSignature != null ? { webhookSignature: client.webhookSignature } : undefined), defaultHeaders: { 'X-Stainless-MCP': 'true', diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index da22abf..904b7c9 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -2874,12 +2874,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me.id);", }, python: { method: 'agents.me.retrieve', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nme = client.agents.me.retrieve()\nprint(me.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nme = client.agents.me.retrieve()\nprint(me.id)', }, kotlin: { method: 'agents().me().retrieve', @@ -2887,7 +2887,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeRetrieveParams\nimport com.lightspark.grid.models.agents.me.MeRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val me: MeRetrieveResponse = client.agents().me().retrieve()\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -2914,12 +2915,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.createTransferIn', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", }, python: { method: 'agents.me.create_transfer_in', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nresponse = client.agents.me.create_transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', }, kotlin: { method: 'agents().me().createTransferIn', @@ -2928,7 +2929,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transfer-in \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "destination": {\n "accountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n "source": {\n "accountId": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n "amount": 12550\n }\'', + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transfer-in \\\n -H \'Content-Type: application/json\' \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN" \\\n -d \'{\n "destination": {\n "accountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n "source": {\n "accountId": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n "amount": 12550\n }\'', }, }, }, @@ -2955,12 +2956,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.createTransferOut', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", }, python: { method: 'agents.me.create_transfer_out', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.create_transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nresponse = client.agents.me.create_transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', }, kotlin: { method: 'agents().me().createTransferOut', @@ -2969,7 +2970,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transfer-out \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "destination": {\n "accountId": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n "source": {\n "accountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n "amount": 12550\n }\'', + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transfer-out \\\n -H \'Content-Type: application/json\' \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN" \\\n -d \'{\n "destination": {\n "accountId": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n "source": {\n "accountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n "amount": 12550\n }\'', }, }, }, @@ -2996,12 +2997,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.listInternalAccounts', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const internalAccount of client.agents.me.listInternalAccounts()) {\n console.log(internalAccount.id);\n}", }, python: { method: 'agents.me.list_internal_accounts', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.list_internal_accounts()\npage = page.data[0]\nprint(page.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\npage = client.agents.me.list_internal_accounts()\npage = page.data[0]\nprint(page.id)', }, kotlin: { method: 'agents().me().listInternalAccounts', @@ -3009,7 +3010,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsPage\nimport com.lightspark.grid.models.agents.me.MeListInternalAccountsParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: MeListInternalAccountsPage = client.agents().me().listInternalAccounts()\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/internal-accounts', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/internal-accounts \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3043,12 +3045,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.transactions.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const transaction of client.agents.me.transactions.list()) {\n console.log(transaction);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const transaction of client.agents.me.transactions.list()) {\n console.log(transaction);\n}", }, python: { method: 'agents.me.transactions.list', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.transactions.list()\npage = page.data[0]\nprint(page)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\npage = client.agents.me.transactions.list()\npage = page.data[0]\nprint(page)', }, kotlin: { method: 'agents().me().transactions().list', @@ -3056,7 +3058,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.transactions.TransactionListPage\nimport com.lightspark.grid.models.agents.me.transactions.TransactionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: TransactionListPage = client.agents().me().transactions().list()\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transactions', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transactions \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3078,12 +3081,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.transactions.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst transaction = await client.agents.me.transactions.retrieve('transactionId');\n\nconsole.log(transaction);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst transaction = await client.agents.me.transactions.retrieve('transactionId');\n\nconsole.log(transaction);", }, python: { method: 'agents.me.transactions.retrieve', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\ntransaction = client.agents.me.transactions.retrieve(\n "transactionId",\n)\nprint(transaction)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\ntransaction = client.agents.me.transactions.retrieve(\n "transactionId",\n)\nprint(transaction)', }, kotlin: { method: 'agents().me().transactions().retrieve', @@ -3091,7 +3094,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.transactions.TransactionRetrieveParams\nimport com.lightspark.grid.models.transferin.Transaction\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val transaction: Transaction = client.agents().me().transactions().retrieve("transactionId")\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transactions/$TRANSACTION_ID', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/transactions/$TRANSACTION_ID \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3124,12 +3128,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.quotes.create', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.agents.me.quotes.create({\n destination: {\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n destinationType: 'ACCOUNT',\n },\n lockedCurrencyAmount: 1000,\n lockedCurrencySide: 'SENDING',\n source: {\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n sourceType: 'ACCOUNT',\n },\n});\n\nconsole.log(quote.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst quote = await client.agents.me.quotes.create({\n destination: {\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n destinationType: 'ACCOUNT',\n },\n lockedCurrencyAmount: 1000,\n lockedCurrencySide: 'SENDING',\n source: {\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n sourceType: 'ACCOUNT',\n },\n});\n\nconsole.log(quote.id);", }, python: { method: 'agents.me.quotes.create', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nquote = client.agents.me.quotes.create(\n destination={\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n "destination_type": "ACCOUNT",\n },\n locked_currency_amount=1000,\n locked_currency_side="SENDING",\n source={\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n "source_type": "ACCOUNT",\n },\n)\nprint(quote.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nquote = client.agents.me.quotes.create(\n destination={\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n "destination_type": "ACCOUNT",\n },\n locked_currency_amount=1000,\n locked_currency_side="SENDING",\n source={\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n "source_type": "ACCOUNT",\n },\n)\nprint(quote.id)', }, kotlin: { method: 'agents().me().quotes().create', @@ -3138,7 +3142,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "destination": {\n "accountId": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n "destinationType": "ACCOUNT"\n },\n "lockedCurrencyAmount": 1000,\n "lockedCurrencySide": "SENDING",\n "source": {\n "accountId": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n "sourceType": "ACCOUNT"\n },\n "description": "Invoice #1234 payment",\n "lookupId": "Lookup:019542f5-b3e7-1d02-0000-000000000009",\n "senderCustomerInfo": {\n "FULL_NAME": "bar",\n "NATIONALITY": "bar"\n }\n }\'', + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes \\\n -H \'Content-Type: application/json\' \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN" \\\n -d \'{\n "destination": {\n "accountId": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n "destinationType": "ACCOUNT"\n },\n "lockedCurrencyAmount": 1000,\n "lockedCurrencySide": "SENDING",\n "source": {\n "accountId": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n "sourceType": "ACCOUNT"\n },\n "description": "Invoice #1234 payment",\n "lookupId": "Lookup:019542f5-b3e7-1d02-0000-000000000009",\n "senderCustomerInfo": {\n "FULL_NAME": "bar",\n "NATIONALITY": "bar"\n }\n }\'', }, }, }, @@ -3160,12 +3164,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.quotes.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst quote = await client.agents.me.quotes.retrieve('quoteId');\n\nconsole.log(quote.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst quote = await client.agents.me.quotes.retrieve('quoteId');\n\nconsole.log(quote.id);", }, python: { method: 'agents.me.quotes.retrieve', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nquote = client.agents.me.quotes.retrieve(\n "quoteId",\n)\nprint(quote.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nquote = client.agents.me.quotes.retrieve(\n "quoteId",\n)\nprint(quote.id)', }, kotlin: { method: 'agents().me().quotes().retrieve', @@ -3173,7 +3177,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.quotes.QuoteRetrieveParams\nimport com.lightspark.grid.models.quotes.Quote\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val quote: Quote = client.agents().me().quotes().retrieve("quoteId")\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes/$QUOTE_ID', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes/$QUOTE_ID \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3195,12 +3200,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.quotes.execute', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute(\n 'Quote:019542f5-b3e7-1d02-0000-000000000001',\n);\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.me.quotes.execute(\n 'Quote:019542f5-b3e7-1d02-0000-000000000001',\n);\n\nconsole.log(response.id);", }, python: { method: 'agents.me.quotes.execute', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.me.quotes.execute(\n quote_id="Quote:019542f5-b3e7-1d02-0000-000000000001",\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nresponse = client.agents.me.quotes.execute(\n quote_id="Quote:019542f5-b3e7-1d02-0000-000000000001",\n)\nprint(response.id)', }, kotlin: { method: 'agents().me().quotes().execute', @@ -3209,7 +3214,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes/$QUOTE_ID/execute \\\n -X POST', + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/quotes/$QUOTE_ID/execute \\\n -X POST \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3231,12 +3236,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.externalAccounts.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.agents.me.externalAccounts.list()) {\n console.log(externalAccount.id);\n}", }, python: { method: 'agents.me.external_accounts.list', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.external_accounts.list()\npage = page.data[0]\nprint(page.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\npage = client.agents.me.external_accounts.list()\npage = page.data[0]\nprint(page.id)', }, kotlin: { method: 'agents().me().externalAccounts().list', @@ -3244,7 +3249,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListPage\nimport com.lightspark.grid.models.agents.me.externalaccounts.ExternalAccountListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ExternalAccountListPage = client.agents().me().externalAccounts().list()\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3272,12 +3278,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.externalAccounts.add', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountType: 'USD_ACCOUNT',\n accountNumber: '12345678901',\n routingNumber: '123456789',\n beneficiary: {\n beneficiaryType: 'INDIVIDUAL',\n fullName: 'John Doe',\n birthDate: '1990-01-15',\n nationality: 'US',\n address: {\n line1: '123 Main Street',\n city: 'San Francisco',\n state: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n },\n },\n currency: 'USD',\n});\n\nconsole.log(externalAccount.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst externalAccount = await client.agents.me.externalAccounts.add({\n accountInfo: {\n accountType: 'USD_ACCOUNT',\n accountNumber: '12345678901',\n routingNumber: '123456789',\n beneficiary: {\n beneficiaryType: 'INDIVIDUAL',\n fullName: 'John Doe',\n birthDate: '1990-01-15',\n nationality: 'US',\n address: {\n line1: '123 Main Street',\n city: 'San Francisco',\n state: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n },\n },\n currency: 'USD',\n});\n\nconsole.log(externalAccount.id);", }, python: { method: 'agents.me.external_accounts.add', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.add(\n account_info={\n "account_type": "USD_ACCOUNT",\n "account_number": "12345678901",\n "routing_number": "123456789",\n "beneficiary": {\n "beneficiary_type": "INDIVIDUAL",\n "full_name": "John Doe",\n "birth_date": "1990-01-15",\n "nationality": "US",\n "address": {\n "line1": "123 Main Street",\n "city": "San Francisco",\n "state": "CA",\n "postal_code": "94105",\n "country": "US",\n },\n },\n },\n currency="USD",\n)\nprint(external_account.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nexternal_account = client.agents.me.external_accounts.add(\n account_info={\n "account_type": "USD_ACCOUNT",\n "account_number": "12345678901",\n "routing_number": "123456789",\n "beneficiary": {\n "beneficiary_type": "INDIVIDUAL",\n "full_name": "John Doe",\n "birth_date": "1990-01-15",\n "nationality": "US",\n "address": {\n "line1": "123 Main Street",\n "city": "San Francisco",\n "state": "CA",\n "postal_code": "94105",\n "country": "US",\n },\n },\n },\n currency="USD",\n)\nprint(external_account.id)', }, kotlin: { method: 'agents().me().externalAccounts().add', @@ -3286,7 +3292,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "accountInfo": {\n "accountNumber": "12345678901",\n "accountType": "USD_ACCOUNT",\n "beneficiary": {\n "beneficiaryType": "INDIVIDUAL",\n "fullName": "John Doe",\n "address": {\n "country": "US",\n "line1": "123 Main Street",\n "postalCode": "94105",\n "city": "San Francisco",\n "state": "CA"\n },\n "birthDate": "1990-01-15",\n "nationality": "US"\n },\n "routingNumber": "123456789"\n },\n "currency": "USD",\n "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",\n "platformAccountId": "ext_acc_123456"\n }\'', + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts \\\n -H \'Content-Type: application/json\' \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN" \\\n -d \'{\n "accountInfo": {\n "accountNumber": "12345678901",\n "accountType": "USD_ACCOUNT",\n "beneficiary": {\n "beneficiaryType": "INDIVIDUAL",\n "fullName": "John Doe",\n "address": {\n "country": "US",\n "line1": "123 Main Street",\n "postalCode": "94105",\n "city": "San Francisco",\n "state": "CA"\n },\n "birthDate": "1990-01-15",\n "nationality": "US"\n },\n "routingNumber": "123456789"\n },\n "currency": "USD",\n "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",\n "platformAccountId": "ext_acc_123456"\n }\'', }, }, }, @@ -3308,12 +3314,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.externalAccounts.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccount = await client.agents.me.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst externalAccount = await client.agents.me.externalAccounts.retrieve('externalAccountId');\n\nconsole.log(externalAccount.id);", }, python: { method: 'agents.me.external_accounts.retrieve', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nexternal_account = client.agents.me.external_accounts.retrieve(\n "externalAccountId",\n)\nprint(external_account.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nexternal_account = client.agents.me.external_accounts.retrieve(\n "externalAccountId",\n)\nprint(external_account.id)', }, kotlin: { method: 'agents().me().externalAccounts().retrieve', @@ -3322,7 +3328,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts/$EXTERNAL_ACCOUNT_ID', + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts/$EXTERNAL_ACCOUNT_ID \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3342,12 +3348,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.externalAccounts.delete', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nawait client.agents.me.externalAccounts.delete('externalAccountId');", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nawait client.agents.me.externalAccounts.delete('externalAccountId');", }, python: { method: 'agents.me.external_accounts.delete', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nclient.agents.me.external_accounts.delete(\n "externalAccountId",\n)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nclient.agents.me.external_accounts.delete(\n "externalAccountId",\n)', }, kotlin: { method: 'agents().me().externalAccounts().delete', @@ -3356,7 +3362,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, http: { example: - 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts/$EXTERNAL_ACCOUNT_ID \\\n -X DELETE', + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/external-accounts/$EXTERNAL_ACCOUNT_ID \\\n -X DELETE \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3382,12 +3388,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.actions.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", }, python: { method: 'agents.me.actions.list', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\npage = client.agents.me.actions.list()\npage = page.data[0]\nprint(page.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\npage = client.agents.me.actions.list()\npage = page.data[0]\nprint(page.id)', }, kotlin: { method: 'agents().me().actions().list', @@ -3395,7 +3401,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionListPage\nimport com.lightspark.grid.models.agents.me.actions.ActionListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ActionListPage = client.agents().me().actions().list()\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3417,12 +3424,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ typescript: { method: 'client.agents.me.actions.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", }, python: { method: 'agents.me.actions.retrieve', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', }, kotlin: { method: 'agents().me().actions().retrieve', @@ -3430,7 +3437,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val action: ActionRetrieveResponse = client.agents().me().actions().retrieve("actionId")\n}', }, http: { - example: 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions/$ACTION_ID', + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/me/actions/$ACTION_ID \\\n -H "Authorization: Bearer $GRID_AGENT_ACCESS_TOKEN"', }, }, }, @@ -3540,6 +3548,78 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, }, + { + name: 'approve', + endpoint: '/agents/{agentId}/actions/{actionId}/approve', + httpMethod: 'post', + summary: 'Approve an agent action', + description: + "Approve a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n", + stainlessPath: '(resource) agents.transactions > (method) approve', + qualified: 'client.agents.transactions.approve', + params: ['agentId: string;', 'actionId: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## approve\n\n`client.agents.transactions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.transactions.approve', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.transactions.approve', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.transactions.approve(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().transactions().approve', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.transactions.TransactionApproveParams\nimport com.lightspark.grid.models.agents.transactions.TransactionApproveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: TransactionApproveParams = TransactionApproveParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: TransactionApproveResponse = client.agents().transactions().approve(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID/actions/$ACTION_ID/approve \\\n -X POST \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, + { + name: 'reject', + endpoint: '/agents/{agentId}/actions/{actionId}/reject', + httpMethod: 'post', + summary: 'Reject an agent action', + description: + "Reject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n", + stainlessPath: '(resource) agents.transactions > (method) reject', + qualified: 'client.agents.transactions.reject', + params: ['agentId: string;', 'actionId: string;', 'reason?: string;'], + response: + "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", + markdown: + "## reject\n\n`client.agents.transactions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + perLanguage: { + typescript: { + method: 'client.agents.transactions.reject', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + }, + python: { + method: 'agents.transactions.reject', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.transactions.reject(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + }, + kotlin: { + method: 'agents().transactions().reject', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.transactions.TransactionRejectParams\nimport com.lightspark.grid.models.agents.transactions.TransactionRejectResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: TransactionRejectParams = TransactionRejectParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: TransactionRejectResponse = client.agents().transactions().reject(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/agents/$AGENT_ID/actions/$ACTION_ID/reject \\\n -X POST \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET"', + }, + }, + }, { name: 'approve', endpoint: '/agents/{agentId}/actions/{actionId}/approve', @@ -3618,17 +3698,17 @@ const EMBEDDED_READMES: { language: string; content: string }[] = [ { language: 'kotlin', content: - '# Lightspark Grid Kotlin API Library\n\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.lightspark.grid/lightspark-grid-kotlin)](https://central.sonatype.com/artifact/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n[![javadoc](https://javadoc.io/badge2/com.lightspark.grid/lightspark-grid-kotlin/0.0.1/javadoc.svg)](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n\n\nThe Lightspark Grid Kotlin SDK provides convenient access to the [Lightspark Grid REST API](grid.lightspark.com) from applications written in Kotlin.\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n\n\nKDocs are available on [javadoc.io](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1).\n\n\n\n## Installation\n\n\n\n### Gradle\n\n~~~kotlin\nimplementation("com.lightspark.grid:lightspark-grid-kotlin:0.0.1")\n~~~\n\n### Maven\n\n~~~xml\n\n com.lightspark.grid\n lightspark-grid-kotlin\n 0.0.1\n\n~~~\n\n\n\n## Requirements\n\nThis library requires Java 8 or later.\n\n## Usage\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\n## Client configuration\n\nConfigure the client using system properties or environment variables:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n```\n\nOr manually:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .username("My Username")\n .password("My Password")\n .build()\n```\n\nOr using a combination of the two approaches:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n // Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n // Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\n .fromEnv()\n .username("My Username")\n .build()\n```\n\nSee this table for the available options:\n\n| Setter | System property | Environment variable | Required | Default value |\n| ------------------ | ---------------------------------- | -------------------------- | -------- | ---------------------------------------------- |\n| `username` | `lightsparkgrid.gridClientId` | `GRID_CLIENT_ID` | true | - |\n| `password` | `lightsparkgrid.gridClientSecret` | `GRID_CLIENT_SECRET` | true | - |\n| `webhookSignature` | `lightsparkgrid.gridWebhookPubkey` | `GRID_WEBHOOK_PUBKEY` | false | - |\n| `baseUrl` | `lightsparkgrid.baseUrl` | `LIGHTSPARK_GRID_BASE_URL` | true | `"https://api.lightspark.com/grid/2025-10-13"` |\n\nSystem properties take precedence over environment variables.\n\n> [!TIP]\n> Don\'t create more than one client in the same application. Each client has a connection pool and\n> thread pools, which are more efficient to share between requests.\n\n### Modifying configuration\n\nTo temporarily use a modified client configuration, while reusing the same connection and thread pools, call `withOptions()` on any client or service:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\n\nval clientWithOptions: LightsparkGridClient = client.withOptions {\n it.baseUrl("https://example.com")\n it.maxRetries(42)\n}\n```\n\nThe `withOptions()` method does not affect the original client or service.\n\n## Requests and responses\n\nTo send a request to the Lightspark Grid API, build an instance of some `Params` class and pass it to the corresponding client method. When the response is received, it will be deserialized into an instance of a Kotlin class.\n\nFor example, `client.quotes().create(...)` should be called with an instance of `QuoteCreateParams`, and it will return an instance of `Quote`.\n\n## Immutability\n\nEach class in the SDK has an associated [builder](https://blogs.oracle.com/javamagazine/post/exploring-joshua-blochs-builder-design-pattern-in-java) or factory method for constructing it.\n\nEach class is [immutable](https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html) once constructed. If the class has an associated builder, then it has a `toBuilder()` method, which can be used to convert it back to a builder for making a modified copy.\n\nBecause each class is immutable, builder modification will _never_ affect already built class instances.\n\n## Asynchronous execution\n\nThe default client is synchronous. To switch to asynchronous execution, call the `async()` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.async().quotes().create(params)\n```\n\nOr create an asynchronous client from the beginning:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClientAsync\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClientAsync\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClientAsync = LightsparkGridOkHttpClientAsync.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\nThe asynchronous client supports the same options as the synchronous one, except most methods are [suspending](https://kotlinlang.org/docs/coroutines-guide.html).\n\n\n\n## File uploads\n\nThe SDK defines methods that accept files.\n\nTo upload a file, pass a [`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.nio.file.Paths\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(Paths.get("/path/to/file"))\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr an arbitrary [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(URL("https://example.com//path/to/file").openStream())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr a `ByteArray`:\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file("content".toByteArray())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nNote that when passing a non-`Path` its filename is unknown so it will not be included in the request. To manually set a filename, pass a [`MultipartField`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.MultipartField\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.io.InputStream\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(MultipartField.builder()\n .value(URL("https://example.com//path/to/file").openStream())\n .filename("/path/to/file")\n .build())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\n\n\n## Raw responses\n\nThe SDK defines methods that deserialize responses into instances of Kotlin classes. However, these methods don\'t provide access to the response headers, status code, or the raw response body.\n\nTo access this data, prefix any HTTP method call on a client or service with `withRawResponse()`:\n\n```kotlin\nimport com.lightspark.grid.core.http.Headers\nimport com.lightspark.grid.core.http.HttpResponseFor\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: HttpResponseFor = client.quotes().withRawResponse().create(params)\n\nval statusCode: Int = quote.statusCode()\nval headers: Headers = quote.headers()\n```\n\nYou can still deserialize the response into an instance of a Kotlin class if needed:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval parsedQuote: Quote = quote.parse()\n```\n\n## Error handling\n\nThe SDK throws custom unchecked exception types:\n\n- [`LightsparkGridServiceException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridServiceException.kt): Base class for HTTP errors. See this table for which exception subclass is thrown for each HTTP status code:\n\n | Status | Exception |\n | ------ | -------------------------------------------------- |\n | 400 | [`BadRequestException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/BadRequestException.kt) |\n | 401 | [`UnauthorizedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnauthorizedException.kt) |\n | 403 | [`PermissionDeniedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/PermissionDeniedException.kt) |\n | 404 | [`NotFoundException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/NotFoundException.kt) |\n | 422 | [`UnprocessableEntityException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnprocessableEntityException.kt) |\n | 429 | [`RateLimitException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/RateLimitException.kt) |\n | 5xx | [`InternalServerException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/InternalServerException.kt) |\n | others | [`UnexpectedStatusCodeException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnexpectedStatusCodeException.kt) |\n\n- [`LightsparkGridIoException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridIoException.kt): I/O networking errors.\n\n- [`LightsparkGridRetryableException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridRetryableException.kt): Generic error indicating a failure that could be retried by the client.\n\n- [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt): Failure to interpret successfully parsed data. For example, when accessing a property that\'s supposed to be required, but the API unexpectedly omitted it from the response.\n\n- [`LightsparkGridException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridException.kt): Base class for all exceptions. Most errors will result in one of the previously mentioned ones, but completely generic errors may be thrown using the base class.\n\n## Pagination\n\nThe SDK defines methods that return a paginated lists of results. It provides convenient ways to access the results either one page at a time or item-by-item across all pages.\n\n### Auto-pagination\n\nTo iterate through all results across all pages, use the `autoPager()` method, which automatically fetches more pages as needed.\n\nWhen using the synchronous client, the method returns a [`Sequence`](https://kotlinlang.org/docs/sequences.html)\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\n\nval page: CustomerListPage = client.customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\nWhen using the asynchronous client, the method returns a [`Flow`](https://kotlinlang.org/docs/flow.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPageAsync\n\nval page: CustomerListPageAsync = client.async().customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\n### Manual pagination\n\nTo access individual page items and manually request the next page, use the `items()`,\n`hasNextPage()`, and `nextPage()` methods:\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\nimport com.lightspark.grid.models.customers.CustomerOneOf\n\nval page: CustomerListPage = client.customers().list()\nwhile (true) {\n for (customer in page.items()) {\n println(customer)\n }\n\n if (!page.hasNextPage()) {\n break\n }\n\n page = page.nextPage()\n}\n```\n\n## Logging\n\nThe SDK uses the standard [OkHttp logging interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor).\n\nEnable logging by setting the `LIGHTSPARK_GRID_LOG` environment variable to `info`:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=debug\n```\n\n## ProGuard and R8\n\nAlthough the SDK uses reflection, it is still usable with [ProGuard](https://github.com/Guardsquare/proguard) and [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization) because `lightspark-grid-kotlin-core` is published with a [configuration file](lightspark-grid-kotlin-core/src/main/resources/META-INF/proguard/lightspark-grid-kotlin-core.pro) containing [keep rules](https://www.guardsquare.com/manual/configuration/usage).\n\nProGuard and R8 should automatically detect and use the published rules, but you can also manually copy the keep rules if necessary.\n\n\n\n\n\n## Jackson\n\nThe SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.18.2 by default.\n\nThe SDK throws an exception if it detects an incompatible Jackson version at runtime (e.g. if the default version was overridden in your Maven or Gradle config).\n\nIf the SDK threw an exception, but you\'re _certain_ the version is compatible, then disable the version check using the `checkJacksonVersionCompatibility` on [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt).\n\n> [!CAUTION]\n> We make no guarantee that the SDK works correctly when the Jackson version check is disabled.\n\nAlso note that there are bugs in older Jackson versions that can affect the SDK. We don\'t work around all Jackson bugs ([example](https://github.com/FasterXML/jackson-databind/issues/3240)) and expect users to upgrade Jackson for those instead.\n\n## Network options\n\n### Retries\n\nThe SDK automatically retries 2 times by default, with a short exponential backoff between requests.\n\nOnly the following error types are retried:\n- Connection errors (for example, due to a network connectivity problem)\n- 408 Request Timeout\n- 409 Conflict\n- 429 Rate Limit\n- 5xx Internal\n\nThe API may also explicitly instruct the SDK to retry or not retry a request.\n\nTo set a custom number of retries, configure the client using the `maxRetries` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .maxRetries(4)\n .build()\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default.\n\nTo set a custom timeout, configure the method call using the `timeout` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().timeout(Duration.ofSeconds(30)).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .timeout(Duration.ofSeconds(30))\n .build()\n```\n\n### Proxies\n\nTo route requests through a proxy, configure the client using the `proxy` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.net.InetSocketAddress\nimport java.net.Proxy\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(Proxy(\n Proxy.Type.HTTP, InetSocketAddress(\n "https://example.com", 8080\n )\n ))\n .build()\n```\n\nIf the proxy responds with `407 Proxy Authentication Required`, supply credentials by also configuring `proxyAuthenticator`:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.core.http.ProxyAuthenticator\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(...)\n // Or a custom implementation of `ProxyAuthenticator`.\n .proxyAuthenticator(ProxyAuthenticator.basic("username", "password"))\n .build()\n```\n\n### Connection pooling\n\nTo customize the underlying OkHttp connection pool, configure the client using the `maxIdleConnections` and `keepAliveDuration` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `maxIdleConnections` is set, then `keepAliveDuration` must be set, and vice versa.\n .maxIdleConnections(10)\n .keepAliveDuration(Duration.ofMinutes(2))\n .build()\n```\n\nIf both options are unset, OkHttp\'s default connection pool settings are used.\n\n### HTTPS\n\n> [!NOTE]\n> Most applications should not call these methods, and instead use the system defaults. The defaults include\n> special optimizations that can be lost if the implementations are modified.\n\nTo configure how HTTPS connections are secured, configure the client using the `sslSocketFactory`, `trustManager`, and `hostnameVerifier` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `sslSocketFactory` is set, then `trustManager` must be set, and vice versa.\n .sslSocketFactory(yourSSLSocketFactory)\n .trustManager(yourTrustManager)\n .hostnameVerifier(yourHostnameVerifier)\n .build()\n```\n\n\n\n### Custom HTTP client\n\nThe SDK consists of three artifacts:\n- `lightspark-grid-kotlin-core`\n - Contains core SDK logic\n - Does not depend on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClient.kt), [`LightsparkGridClientAsync`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsync.kt), [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt), and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), all of which can work with any HTTP client\n- `lightspark-grid-kotlin-client-okhttp`\n - Depends on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) and [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), which provide a way to construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), respectively, using OkHttp\n- `lightspark-grid-kotlin`\n - Depends on and exposes the APIs of both `lightspark-grid-kotlin-core` and `lightspark-grid-kotlin-client-okhttp`\n - Does not have its own logic\n\nThis structure allows replacing the SDK\'s default HTTP client without pulling in unnecessary dependencies.\n\n#### Customized [`OkHttpClient`](https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html)\n\n> [!TIP]\n> Try the available [network options](#network-options) before replacing the default client.\n\nTo use a customized `OkHttpClient`:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Copy `lightspark-grid-kotlin-client-okhttp`\'s [`OkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/OkHttpClient.kt) class into your code and customize it\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your customized client\n\n### Completely custom HTTP client\n\nTo use a completely custom HTTP client:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Write a class that implements the [`HttpClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/http/HttpClient.kt) interface\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your new client class\n\n## Undocumented API functionality\n\nThe SDK is typed for convenient usage of the documented API. However, it also supports working with undocumented or not yet supported parts of the API.\n\n### Parameters\n\nTo set undocumented parameters, call the `putAdditionalHeader`, `putAdditionalQueryParam`, or `putAdditionalBodyProperty` methods on any `Params` class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .putAdditionalHeader("Secret-Header", "42")\n .putAdditionalQueryParam("secret_query_param", "42")\n .putAdditionalBodyProperty("secretProperty", JsonValue.from("42"))\n .build()\n```\n\nThese can be accessed on the built object later using the `_additionalHeaders()`, `_additionalQueryParams()`, and `_additionalBodyProperties()` methods.\n\nTo set undocumented parameters on _nested_ headers, query params, or body classes, call the `putAdditionalProperty` method on the nested class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.transferin.InternalAccountReference\nimport com.lightspark.grid.models.transferin.TransferInCreateParams\n\nval params: TransferInCreateParams = TransferInCreateParams.builder()\n .destination(InternalAccountReference.builder()\n .putAdditionalProperty("secretProperty", JsonValue.from("42"))\n .build())\n .build()\n```\n\nThese properties can be accessed on the nested built object later using the `_additionalProperties()` method.\n\nTo set a documented parameter or property to an undocumented or not yet supported _value_, pass a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) object to its setter:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(JsonValue.from(42))\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n```\n\nThe most straightforward way to create a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) is using its `from(...)` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\n\n// Create primitive JSON values\nval nullValue: JsonValue = JsonValue.from(null)\nval booleanValue: JsonValue = JsonValue.from(true)\nval numberValue: JsonValue = JsonValue.from(42)\nval stringValue: JsonValue = JsonValue.from("Hello World!")\n\n// Create a JSON array value equivalent to `["Hello", "World"]`\nval arrayValue: JsonValue = JsonValue.from(listOf(\n "Hello", "World"\n))\n\n// Create a JSON object value equivalent to `{ "a": 1, "b": 2 }`\nval objectValue: JsonValue = JsonValue.from(mapOf(\n "a" to 1, "b" to 2\n))\n\n// Create an arbitrarily nested JSON equivalent to:\n// {\n// "a": [1, 2],\n// "b": [3, 4]\n// }\nval complexValue: JsonValue = JsonValue.from(mapOf(\n "a" to listOf(\n 1, 2\n ), "b" to listOf(\n 3, 4\n )\n))\n```\n\nNormally a `Builder` class\'s `build` method will throw [`IllegalStateException`](https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html) if any required parameter or property is unset.\n\nTo forcibly omit a required parameter or property, pass [`JsonMissing`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.JsonMissing\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .destination(JsonMissing.of())\n .build()\n```\n\n### Response properties\n\nTo access undocumented response properties, call the `_additionalProperties()` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonBoolean\nimport com.lightspark.grid.core.JsonNull\nimport com.lightspark.grid.core.JsonNumber\nimport com.lightspark.grid.core.JsonValue\n\nval additionalProperties: Map = client.quotes().create(params)._additionalProperties()\nval secretPropertyValue: JsonValue = additionalProperties.get("secretProperty")\n\nval result = when (secretPropertyValue) {\n is JsonNull -> "It\'s null!"\n is JsonBoolean -> "It\'s a boolean!"\n is JsonNumber -> "It\'s a number!"\n // Other types include `JsonMissing`, `JsonString`, `JsonArray`, and `JsonObject`\n else -> "It\'s something else!"\n}\n```\n\nTo access a property\'s raw JSON value, which may be undocumented, call its `_` prefixed method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonField\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\n\nval destination: JsonField = client.quotes().create(params)._destination()\n\nif (destination.isMissing()) {\n // The property is absent from the JSON response\n} else if (destination.isNull()) {\n // The property was set to literal null\n} else {\n // Check if value was provided as a string\n // Other methods include `asNumber()`, `asBoolean()`, etc.\n val jsonString: String? = destination.asString();\n\n // Try to deserialize into a custom type\n val myObject: MyClass = destination.asUnknown()!!.convert(MyClass::class.java)\n}\n```\n\n### Response validation\n\nIn rare cases, the API may return a response that doesn\'t match the expected type. For example, the SDK may expect a property to contain a `String`, but the API could return something else.\n\nBy default, the SDK will not throw an exception in this case. It will throw [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt) only if you directly access the property.\n\nValidating the response is _not_ forwards compatible with new types from the API for existing fields.\n\nIf you would still prefer to check that the response is completely well-typed upfront, then either call `validate()`:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(params).validate()\n```\n\nOr configure the method call to validate the response using the `responseValidation` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().responseValidation(true).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .responseValidation(true)\n .build()\n```\n\n## FAQ\n\n### Why don\'t you use plain `enum` classes?\n\nKotlin `enum` classes are not trivially [forwards compatible](https://www.stainless.com/blog/making-java-enums-forwards-compatible). Using them in the SDK could cause runtime exceptions if the API is updated to respond with a new enum value.\n\n### Why do you represent fields using `JsonField` instead of just plain `T`?\n\nUsing `JsonField` enables a few features:\n\n- Allowing usage of [undocumented API functionality](#undocumented-api-functionality)\n- Lazily [validating the API response against the expected shape](#response-validation)\n- Representing absent vs explicitly null values\n\n### Why don\'t you use [`data` classes](https://kotlinlang.org/docs/data-classes.html)?\n\nIt is not [backwards compatible to add new fields to a data class](https://kotlinlang.org/docs/api-guidelines-backward-compatibility.html#avoid-using-data-classes-in-your-api) and we don\'t want to introduce a breaking change every time we add a field to a class.\n\n### Why don\'t you use checked exceptions?\n\nChecked exceptions are widely considered a mistake in the Java programming language. In fact, they were omitted from Kotlin for this reason.\n\nChecked exceptions:\n\n- Are verbose to handle\n- Encourage error handling at the wrong level of abstraction, where nothing can be done about the error\n- Are tedious to propagate due to the [function coloring problem](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function)\n- Don\'t play well with lambdas (also due to the function coloring problem)\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-kotlin-sdk/issues) with questions, bugs, or suggestions.\n', + '# Lightspark Grid Kotlin API Library\n\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.lightspark.grid/lightspark-grid-kotlin)](https://central.sonatype.com/artifact/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n[![javadoc](https://javadoc.io/badge2/com.lightspark.grid/lightspark-grid-kotlin/0.0.1/javadoc.svg)](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1)\n\n\nThe Lightspark Grid Kotlin SDK provides convenient access to the [Lightspark Grid REST API](grid.lightspark.com) from applications written in Kotlin.\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwieC1ncmlkLWFnZW50LWFjY2Vzcy10b2tlbiI6Ik15IEFnZW50IEFjY2VzcyBUb2tlbiIsIlgtR3JpZC1TaWduYXR1cmUiOiJNeSBXZWJob29rIFNpZ25hdHVyZSJ9fQ)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22x-grid-agent-access-token%22%3A%22My%20Agent%20Access%20Token%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n\n\nKDocs are available on [javadoc.io](https://javadoc.io/doc/com.lightspark.grid/lightspark-grid-kotlin/0.0.1).\n\n\n\n## Installation\n\n\n\n### Gradle\n\n~~~kotlin\nimplementation("com.lightspark.grid:lightspark-grid-kotlin:0.0.1")\n~~~\n\n### Maven\n\n~~~xml\n\n com.lightspark.grid\n lightspark-grid-kotlin\n 0.0.1\n\n~~~\n\n\n\n## Requirements\n\nThis library requires Java 8 or later.\n\n## Usage\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridAgentAccessToken`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_AGENT_ACCESS_TOKEN`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\n## Client configuration\n\nConfigure the client using system properties or environment variables:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridAgentAccessToken`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_AGENT_ACCESS_TOKEN`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n```\n\nOr manually:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .username("My Username")\n .password("My Password")\n .build()\n```\n\nOr using a combination of the two approaches:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n // Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridAgentAccessToken`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n // Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_AGENT_ACCESS_TOKEN`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\n .fromEnv()\n .username("My Username")\n .build()\n```\n\nSee this table for the available options:\n\n| Setter | System property | Environment variable | Required | Default value |\n| ------------------ | ------------------------------------- | -------------------------- | -------- | ---------------------------------------------- |\n| `username` | `lightsparkgrid.gridClientId` | `GRID_CLIENT_ID` | false | - |\n| `password` | `lightsparkgrid.gridClientSecret` | `GRID_CLIENT_SECRET` | false | - |\n| `agentAccessToken` | `lightsparkgrid.gridAgentAccessToken` | `GRID_AGENT_ACCESS_TOKEN` | false | - |\n| `webhookSignature` | `lightsparkgrid.gridWebhookPubkey` | `GRID_WEBHOOK_PUBKEY` | false | - |\n| `baseUrl` | `lightsparkgrid.baseUrl` | `LIGHTSPARK_GRID_BASE_URL` | true | `"https://api.lightspark.com/grid/2025-10-13"` |\n\nSystem properties take precedence over environment variables.\n\n> [!TIP]\n> Don\'t create more than one client in the same application. Each client has a connection pool and\n> thread pools, which are more efficient to share between requests.\n\n### Modifying configuration\n\nTo temporarily use a modified client configuration, while reusing the same connection and thread pools, call `withOptions()` on any client or service:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\n\nval clientWithOptions: LightsparkGridClient = client.withOptions {\n it.baseUrl("https://example.com")\n it.maxRetries(42)\n}\n```\n\nThe `withOptions()` method does not affect the original client or service.\n\n## Requests and responses\n\nTo send a request to the Lightspark Grid API, build an instance of some `Params` class and pass it to the corresponding client method. When the response is received, it will be deserialized into an instance of a Kotlin class.\n\nFor example, `client.quotes().create(...)` should be called with an instance of `QuoteCreateParams`, and it will return an instance of `Quote`.\n\n## Immutability\n\nEach class in the SDK has an associated [builder](https://blogs.oracle.com/javamagazine/post/exploring-joshua-blochs-builder-design-pattern-in-java) or factory method for constructing it.\n\nEach class is [immutable](https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html) once constructed. If the class has an associated builder, then it has a `toBuilder()` method, which can be used to convert it back to a builder for making a modified copy.\n\nBecause each class is immutable, builder modification will _never_ affect already built class instances.\n\n## Asynchronous execution\n\nThe default client is synchronous. To switch to asynchronous execution, call the `async()` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridAgentAccessToken`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_AGENT_ACCESS_TOKEN`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.async().quotes().create(params)\n```\n\nOr create an asynchronous client from the beginning:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClientAsync\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClientAsync\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\n// Configures using the `lightsparkgrid.gridClientId`, `lightsparkgrid.gridClientSecret`, `lightsparkgrid.gridAgentAccessToken`, `lightsparkgrid.gridWebhookPubkey` and `lightsparkgrid.baseUrl` system properties\n// Or configures using the `GRID_CLIENT_ID`, `GRID_CLIENT_SECRET`, `GRID_AGENT_ACCESS_TOKEN`, `GRID_WEBHOOK_PUBKEY` and `LIGHTSPARK_GRID_BASE_URL` environment variables\nval client: LightsparkGridClientAsync = LightsparkGridOkHttpClientAsync.fromEnv()\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: Quote = client.quotes().create(params)\n```\n\nThe asynchronous client supports the same options as the synchronous one, except most methods are [suspending](https://kotlinlang.org/docs/coroutines-guide.html).\n\n\n\n## File uploads\n\nThe SDK defines methods that accept files.\n\nTo upload a file, pass a [`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.nio.file.Paths\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(Paths.get("/path/to/file"))\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr an arbitrary [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(URL("https://example.com//path/to/file").openStream())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nOr a `ByteArray`:\n\n```kotlin\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file("content".toByteArray())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\nNote that when passing a non-`Path` its filename is unknown so it will not be included in the request. To manually set a filename, pass a [`MultipartField`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.MultipartField\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams\nimport com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse\nimport java.io.InputStream\nimport java.net.URL\n\nval params: BulkUploadCsvParams = BulkUploadCsvParams.builder()\n .file(MultipartField.builder()\n .value(URL("https://example.com//path/to/file").openStream())\n .filename("/path/to/file")\n .build())\n .build()\nval response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)\n```\n\n\n\n## Raw responses\n\nThe SDK defines methods that deserialize responses into instances of Kotlin classes. However, these methods don\'t provide access to the response headers, status code, or the raw response body.\n\nTo access this data, prefix any HTTP method call on a client or service with `withRawResponse()`:\n\n```kotlin\nimport com.lightspark.grid.core.http.Headers\nimport com.lightspark.grid.core.http.HttpResponseFor\nimport com.lightspark.grid.models.quotes.Quote\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(QuoteDestinationOneOf.AccountDestination.builder()\n .accountId("ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\nval quote: HttpResponseFor = client.quotes().withRawResponse().create(params)\n\nval statusCode: Int = quote.statusCode()\nval headers: Headers = quote.headers()\n```\n\nYou can still deserialize the response into an instance of a Kotlin class if needed:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval parsedQuote: Quote = quote.parse()\n```\n\n## Error handling\n\nThe SDK throws custom unchecked exception types:\n\n- [`LightsparkGridServiceException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridServiceException.kt): Base class for HTTP errors. See this table for which exception subclass is thrown for each HTTP status code:\n\n | Status | Exception |\n | ------ | -------------------------------------------------- |\n | 400 | [`BadRequestException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/BadRequestException.kt) |\n | 401 | [`UnauthorizedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnauthorizedException.kt) |\n | 403 | [`PermissionDeniedException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/PermissionDeniedException.kt) |\n | 404 | [`NotFoundException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/NotFoundException.kt) |\n | 422 | [`UnprocessableEntityException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnprocessableEntityException.kt) |\n | 429 | [`RateLimitException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/RateLimitException.kt) |\n | 5xx | [`InternalServerException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/InternalServerException.kt) |\n | others | [`UnexpectedStatusCodeException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/UnexpectedStatusCodeException.kt) |\n\n- [`LightsparkGridIoException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridIoException.kt): I/O networking errors.\n\n- [`LightsparkGridRetryableException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridRetryableException.kt): Generic error indicating a failure that could be retried by the client.\n\n- [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt): Failure to interpret successfully parsed data. For example, when accessing a property that\'s supposed to be required, but the API unexpectedly omitted it from the response.\n\n- [`LightsparkGridException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridException.kt): Base class for all exceptions. Most errors will result in one of the previously mentioned ones, but completely generic errors may be thrown using the base class.\n\n## Pagination\n\nThe SDK defines methods that return a paginated lists of results. It provides convenient ways to access the results either one page at a time or item-by-item across all pages.\n\n### Auto-pagination\n\nTo iterate through all results across all pages, use the `autoPager()` method, which automatically fetches more pages as needed.\n\nWhen using the synchronous client, the method returns a [`Sequence`](https://kotlinlang.org/docs/sequences.html)\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\n\nval page: CustomerListPage = client.customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\nWhen using the asynchronous client, the method returns a [`Flow`](https://kotlinlang.org/docs/flow.html):\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPageAsync\n\nval page: CustomerListPageAsync = client.async().customers().list()\npage.autoPager()\n .take(50)\n .forEach { customer -> println(customer) }\n```\n\n### Manual pagination\n\nTo access individual page items and manually request the next page, use the `items()`,\n`hasNextPage()`, and `nextPage()` methods:\n\n```kotlin\nimport com.lightspark.grid.models.customers.CustomerListPage\nimport com.lightspark.grid.models.customers.CustomerOneOf\n\nval page: CustomerListPage = client.customers().list()\nwhile (true) {\n for (customer in page.items()) {\n println(customer)\n }\n\n if (!page.hasNextPage()) {\n break\n }\n\n page = page.nextPage()\n}\n```\n\n## Logging\n\nThe SDK uses the standard [OkHttp logging interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor).\n\nEnable logging by setting the `LIGHTSPARK_GRID_LOG` environment variable to `info`:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging:\n\n```sh\nexport LIGHTSPARK_GRID_LOG=debug\n```\n\n## ProGuard and R8\n\nAlthough the SDK uses reflection, it is still usable with [ProGuard](https://github.com/Guardsquare/proguard) and [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization) because `lightspark-grid-kotlin-core` is published with a [configuration file](lightspark-grid-kotlin-core/src/main/resources/META-INF/proguard/lightspark-grid-kotlin-core.pro) containing [keep rules](https://www.guardsquare.com/manual/configuration/usage).\n\nProGuard and R8 should automatically detect and use the published rules, but you can also manually copy the keep rules if necessary.\n\n\n\n\n\n## Jackson\n\nThe SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.18.2 by default.\n\nThe SDK throws an exception if it detects an incompatible Jackson version at runtime (e.g. if the default version was overridden in your Maven or Gradle config).\n\nIf the SDK threw an exception, but you\'re _certain_ the version is compatible, then disable the version check using the `checkJacksonVersionCompatibility` on [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt).\n\n> [!CAUTION]\n> We make no guarantee that the SDK works correctly when the Jackson version check is disabled.\n\nAlso note that there are bugs in older Jackson versions that can affect the SDK. We don\'t work around all Jackson bugs ([example](https://github.com/FasterXML/jackson-databind/issues/3240)) and expect users to upgrade Jackson for those instead.\n\n## Network options\n\n### Retries\n\nThe SDK automatically retries 2 times by default, with a short exponential backoff between requests.\n\nOnly the following error types are retried:\n- Connection errors (for example, due to a network connectivity problem)\n- 408 Request Timeout\n- 409 Conflict\n- 429 Rate Limit\n- 5xx Internal\n\nThe API may also explicitly instruct the SDK to retry or not retry a request.\n\nTo set a custom number of retries, configure the client using the `maxRetries` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .maxRetries(4)\n .build()\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default.\n\nTo set a custom timeout, configure the method call using the `timeout` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().timeout(Duration.ofSeconds(30)).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .timeout(Duration.ofSeconds(30))\n .build()\n```\n\n### Proxies\n\nTo route requests through a proxy, configure the client using the `proxy` method:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.net.InetSocketAddress\nimport java.net.Proxy\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(Proxy(\n Proxy.Type.HTTP, InetSocketAddress(\n "https://example.com", 8080\n )\n ))\n .build()\n```\n\nIf the proxy responds with `407 Proxy Authentication Required`, supply credentials by also configuring `proxyAuthenticator`:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.core.http.ProxyAuthenticator\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .proxy(...)\n // Or a custom implementation of `ProxyAuthenticator`.\n .proxyAuthenticator(ProxyAuthenticator.basic("username", "password"))\n .build()\n```\n\n### Connection pooling\n\nTo customize the underlying OkHttp connection pool, configure the client using the `maxIdleConnections` and `keepAliveDuration` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport java.time.Duration\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `maxIdleConnections` is set, then `keepAliveDuration` must be set, and vice versa.\n .maxIdleConnections(10)\n .keepAliveDuration(Duration.ofMinutes(2))\n .build()\n```\n\nIf both options are unset, OkHttp\'s default connection pool settings are used.\n\n### HTTPS\n\n> [!NOTE]\n> Most applications should not call these methods, and instead use the system defaults. The defaults include\n> special optimizations that can be lost if the implementations are modified.\n\nTo configure how HTTPS connections are secured, configure the client using the `sslSocketFactory`, `trustManager`, and `hostnameVerifier` methods:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n // If `sslSocketFactory` is set, then `trustManager` must be set, and vice versa.\n .sslSocketFactory(yourSSLSocketFactory)\n .trustManager(yourTrustManager)\n .hostnameVerifier(yourHostnameVerifier)\n .build()\n```\n\n\n\n### Custom HTTP client\n\nThe SDK consists of three artifacts:\n- `lightspark-grid-kotlin-core`\n - Contains core SDK logic\n - Does not depend on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClient.kt), [`LightsparkGridClientAsync`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsync.kt), [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt), and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), all of which can work with any HTTP client\n- `lightspark-grid-kotlin-client-okhttp`\n - Depends on [OkHttp](https://square.github.io/okhttp)\n - Exposes [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) and [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), which provide a way to construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) and [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), respectively, using OkHttp\n- `lightspark-grid-kotlin`\n - Depends on and exposes the APIs of both `lightspark-grid-kotlin-core` and `lightspark-grid-kotlin-client-okhttp`\n - Does not have its own logic\n\nThis structure allows replacing the SDK\'s default HTTP client without pulling in unnecessary dependencies.\n\n#### Customized [`OkHttpClient`](https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html)\n\n> [!TIP]\n> Try the available [network options](#network-options) before replacing the default client.\n\nTo use a customized `OkHttpClient`:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Copy `lightspark-grid-kotlin-client-okhttp`\'s [`OkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/OkHttpClient.kt) class into your code and customize it\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your customized client\n\n### Completely custom HTTP client\n\nTo use a completely custom HTTP client:\n\n1. Replace your [`lightspark-grid-kotlin` dependency](#installation) with `lightspark-grid-kotlin-core`\n2. Write a class that implements the [`HttpClient`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/http/HttpClient.kt) interface\n3. Construct [`LightsparkGridClientImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientImpl.kt) or [`LightsparkGridClientAsyncImpl`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/client/LightsparkGridClientAsyncImpl.kt), similarly to [`LightsparkGridOkHttpClient`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClient.kt) or [`LightsparkGridOkHttpClientAsync`](lightspark-grid-kotlin-client-okhttp/src/main/kotlin/com/lightspark/grid/client/okhttp/LightsparkGridOkHttpClientAsync.kt), using your new client class\n\n## Undocumented API functionality\n\nThe SDK is typed for convenient usage of the documented API. However, it also supports working with undocumented or not yet supported parts of the API.\n\n### Parameters\n\nTo set undocumented parameters, call the `putAdditionalHeader`, `putAdditionalQueryParam`, or `putAdditionalBodyProperty` methods on any `Params` class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .putAdditionalHeader("Secret-Header", "42")\n .putAdditionalQueryParam("secret_query_param", "42")\n .putAdditionalBodyProperty("secretProperty", JsonValue.from("42"))\n .build()\n```\n\nThese can be accessed on the built object later using the `_additionalHeaders()`, `_additionalQueryParams()`, and `_additionalBodyProperties()` methods.\n\nTo set undocumented parameters on _nested_ headers, query params, or body classes, call the `putAdditionalProperty` method on the nested class:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.transferin.InternalAccountReference\nimport com.lightspark.grid.models.transferin.TransferInCreateParams\n\nval params: TransferInCreateParams = TransferInCreateParams.builder()\n .destination(InternalAccountReference.builder()\n .putAdditionalProperty("secretProperty", JsonValue.from("42"))\n .build())\n .build()\n```\n\nThese properties can be accessed on the nested built object later using the `_additionalProperties()` method.\n\nTo set a documented parameter or property to an undocumented or not yet supported _value_, pass a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) object to its setter:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .destination(JsonValue.from(42))\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n```\n\nThe most straightforward way to create a [`JsonValue`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt) is using its `from(...)` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonValue\n\n// Create primitive JSON values\nval nullValue: JsonValue = JsonValue.from(null)\nval booleanValue: JsonValue = JsonValue.from(true)\nval numberValue: JsonValue = JsonValue.from(42)\nval stringValue: JsonValue = JsonValue.from("Hello World!")\n\n// Create a JSON array value equivalent to `["Hello", "World"]`\nval arrayValue: JsonValue = JsonValue.from(listOf(\n "Hello", "World"\n))\n\n// Create a JSON object value equivalent to `{ "a": 1, "b": 2 }`\nval objectValue: JsonValue = JsonValue.from(mapOf(\n "a" to 1, "b" to 2\n))\n\n// Create an arbitrarily nested JSON equivalent to:\n// {\n// "a": [1, 2],\n// "b": [3, 4]\n// }\nval complexValue: JsonValue = JsonValue.from(mapOf(\n "a" to listOf(\n 1, 2\n ), "b" to listOf(\n 3, 4\n )\n))\n```\n\nNormally a `Builder` class\'s `build` method will throw [`IllegalStateException`](https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html) if any required parameter or property is unset.\n\nTo forcibly omit a required parameter or property, pass [`JsonMissing`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/core/Values.kt):\n\n```kotlin\nimport com.lightspark.grid.core.JsonMissing\nimport com.lightspark.grid.models.quotes.QuoteCreateParams\nimport com.lightspark.grid.models.quotes.QuoteSourceOneOf\n\nval params: QuoteCreateParams = QuoteCreateParams.builder()\n .lockedCurrencyAmount(10000L)\n .lockedCurrencySide(QuoteCreateParams.LockedCurrencySide.SENDING)\n .source(QuoteSourceOneOf.AccountQuoteSource.builder()\n .accountId("InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .destination(JsonMissing.of())\n .build()\n```\n\n### Response properties\n\nTo access undocumented response properties, call the `_additionalProperties()` method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonBoolean\nimport com.lightspark.grid.core.JsonNull\nimport com.lightspark.grid.core.JsonNumber\nimport com.lightspark.grid.core.JsonValue\n\nval additionalProperties: Map = client.quotes().create(params)._additionalProperties()\nval secretPropertyValue: JsonValue = additionalProperties.get("secretProperty")\n\nval result = when (secretPropertyValue) {\n is JsonNull -> "It\'s null!"\n is JsonBoolean -> "It\'s a boolean!"\n is JsonNumber -> "It\'s a number!"\n // Other types include `JsonMissing`, `JsonString`, `JsonArray`, and `JsonObject`\n else -> "It\'s something else!"\n}\n```\n\nTo access a property\'s raw JSON value, which may be undocumented, call its `_` prefixed method:\n\n```kotlin\nimport com.lightspark.grid.core.JsonField\nimport com.lightspark.grid.models.quotes.QuoteDestinationOneOf\n\nval destination: JsonField = client.quotes().create(params)._destination()\n\nif (destination.isMissing()) {\n // The property is absent from the JSON response\n} else if (destination.isNull()) {\n // The property was set to literal null\n} else {\n // Check if value was provided as a string\n // Other methods include `asNumber()`, `asBoolean()`, etc.\n val jsonString: String? = destination.asString();\n\n // Try to deserialize into a custom type\n val myObject: MyClass = destination.asUnknown()!!.convert(MyClass::class.java)\n}\n```\n\n### Response validation\n\nIn rare cases, the API may return a response that doesn\'t match the expected type. For example, the SDK may expect a property to contain a `String`, but the API could return something else.\n\nBy default, the SDK will not throw an exception in this case. It will throw [`LightsparkGridInvalidDataException`](lightspark-grid-kotlin-core/src/main/kotlin/com/lightspark/grid/errors/LightsparkGridInvalidDataException.kt) only if you directly access the property.\n\nValidating the response is _not_ forwards compatible with new types from the API for existing fields.\n\nIf you would still prefer to check that the response is completely well-typed upfront, then either call `validate()`:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(params).validate()\n```\n\nOr configure the method call to validate the response using the `responseValidation` method:\n\n```kotlin\nimport com.lightspark.grid.models.quotes.Quote\n\nval quote: Quote = client.quotes().create(\n params, RequestOptions.builder().responseValidation(true).build()\n)\n```\n\nOr configure the default for all method calls at the client level:\n\n```kotlin\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\n\nval client: LightsparkGridClient = LightsparkGridOkHttpClient.builder()\n .fromEnv()\n .responseValidation(true)\n .build()\n```\n\n## FAQ\n\n### Why don\'t you use plain `enum` classes?\n\nKotlin `enum` classes are not trivially [forwards compatible](https://www.stainless.com/blog/making-java-enums-forwards-compatible). Using them in the SDK could cause runtime exceptions if the API is updated to respond with a new enum value.\n\n### Why do you represent fields using `JsonField` instead of just plain `T`?\n\nUsing `JsonField` enables a few features:\n\n- Allowing usage of [undocumented API functionality](#undocumented-api-functionality)\n- Lazily [validating the API response against the expected shape](#response-validation)\n- Representing absent vs explicitly null values\n\n### Why don\'t you use [`data` classes](https://kotlinlang.org/docs/data-classes.html)?\n\nIt is not [backwards compatible to add new fields to a data class](https://kotlinlang.org/docs/api-guidelines-backward-compatibility.html#avoid-using-data-classes-in-your-api) and we don\'t want to introduce a breaking change every time we add a field to a class.\n\n### Why don\'t you use checked exceptions?\n\nChecked exceptions are widely considered a mistake in the Java programming language. In fact, they were omitted from Kotlin for this reason.\n\nChecked exceptions:\n\n- Are verbose to handle\n- Encourage error handling at the wrong level of abstraction, where nothing can be done about the error\n- Are tedious to propagate due to the [function coloring problem](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function)\n- Don\'t play well with lambdas (also due to the function coloring problem)\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-kotlin-sdk/issues) with questions, bugs, or suggestions.\n', }, { language: 'python', content: - '# Lightspark Grid Python API library\n\n\n[![PyPI version](https://img.shields.io/pypi/v/grid.svg?label=pypi%20(stable))](https://pypi.org/project/grid/)\n\nThe Lightspark Grid Python library provides convenient access to the Lightspark Grid REST API from any Python 3.9+\napplication. The library includes type definitions for all request params and response fields,\nand offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n## Documentation\n\n The full API of this library can be found in [api.md](api.md).\n\n## Installation\n\n```sh\n# install from this staging repo\npip install git+ssh://git@github.com/stainless-sdks/grid-python.git\n```\n> [!NOTE]\n> Once this package is [published to PyPI](https://www.stainless.com/docs/guides/publish), this will become: `pip install grid`\n\n## Usage\n\nThe full API of this library can be found in [api.md](api.md).\n\n```python\nimport os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\n\nquote = client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\nprint(quote.id)\n```\n\nWhile you can provide a `username` keyword argument,\nwe recommend using [python-dotenv](https://pypi.org/project/python-dotenv/)\nto add `GRID_CLIENT_ID="My Username"` to your `.env` file\nso that your Username is not stored in source control.\n\n## Async usage\n\nSimply import `AsyncLightsparkGrid` instead of `LightsparkGrid` and use `await` with each API call:\n\n```python\nimport os\nimport asyncio\nfrom grid import AsyncLightsparkGrid\n\nclient = AsyncLightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\n\nasync def main() -> None:\n quote = await client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n )\n print(quote.id)\n\nasyncio.run(main())\n```\n\nFunctionality between the synchronous and asynchronous clients is otherwise identical.\n\n### With aiohttp\n\nBy default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.\n\nYou can enable this by installing `aiohttp`:\n\n```sh\n# install from this staging repo\npip install \'grid[aiohttp] @ git+ssh://git@github.com/stainless-sdks/grid-python.git\'\n```\n\nThen you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:\n\n```python\nimport os\nimport asyncio\nfrom grid import DefaultAioHttpClient\nfrom grid import AsyncLightsparkGrid\n\nasync def main() -> None:\n async with AsyncLightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n http_client=DefaultAioHttpClient(),\n) as client:\n quote = await client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n )\n print(quote.id)\n\nasyncio.run(main())\n```\n\n\n\n## Using types\n\nNested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:\n\n- Serializing back into JSON, `model.to_json()`\n- Converting to a dictionary, `model.to_dict()`\n\nTyped requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`.\n\n## Pagination\n\nList methods in the Lightspark Grid API are paginated.\n\nThis library provides auto-paginating iterators with each list response, so you do not have to request successive pages manually:\n\n```python\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\nall_customers = []\n# Automatically fetches more pages as needed.\nfor customer in client.customers.list():\n # Do something with customer here\n all_customers.append(customer)\nprint(all_customers)\n```\n\nOr, asynchronously:\n\n```python\nimport asyncio\nfrom grid import AsyncLightsparkGrid\n\nclient = AsyncLightsparkGrid()\n\nasync def main() -> None:\n all_customers = []\n # Iterate through items across all pages, issuing requests as needed.\n async for customer in client.customers.list():\n all_customers.append(customer)\n print(all_customers)\n\nasyncio.run(main())\n```\n\nAlternatively, you can use the `.has_next_page()`, `.next_page_info()`, or `.get_next_page()` methods for more granular control working with pages:\n\n```python\nfirst_page = await client.customers.list()\nif first_page.has_next_page():\n print(f"will fetch next page using these details: {first_page.next_page_info()}")\n next_page = await first_page.get_next_page()\n print(f"number of items we just fetched: {len(next_page.data)}")\n\n# Remove `await` for non-async usage.\n```\n\nOr just work directly with the returned data:\n\n```python\nfirst_page = await client.customers.list()\n\nprint(f"next page cursor: {first_page.next_cursor}") # => "next page cursor: ..."\nfor customer in first_page.data:\n print(customer)\n\n# Remove `await` for non-async usage.\n```\n\n## Nested params\n\nNested parameters are dictionaries, typed using `TypedDict`, for example:\n\n```python\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\ntransaction = client.transfer_in.create(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n)\nprint(transaction.destination)\n```\n\n## File uploads\n\nRequest parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.\n\n```python\nfrom pathlib import Path\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\nclient.customers.bulk.upload_csv(\n file=Path("/path/to/file"),\n)\n```\n\nThe async client uses the exact same interface. If you pass a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance, the file contents will be read asynchronously automatically.\n\n## Handling errors\n\nWhen the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `grid.APIConnectionError` is raised.\n\nWhen the API returns a non-success status code (that is, 4xx or 5xx\nresponse), a subclass of `grid.APIStatusError` is raised, containing `status_code` and `response` properties.\n\nAll errors inherit from `grid.APIError`.\n\n```python\nimport grid\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\ntry:\n client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n )\nexcept grid.APIConnectionError as e:\n print("The server could not be reached")\n print(e.__cause__) # an underlying Exception, likely raised within httpx.\nexcept grid.RateLimitError as e:\n print("A 429 status code was received; we should back off a bit.")\nexcept grid.APIStatusError as e:\n print("Another non-200-range status code was received")\n print(e.status_code)\n print(e.response)\n```\n\nError codes are as follows:\n\n| Status Code | Error Type |\n| ----------- | -------------------------- |\n| 400 | `BadRequestError` |\n| 401 | `AuthenticationError` |\n| 403 | `PermissionDeniedError` |\n| 404 | `NotFoundError` |\n| 422 | `UnprocessableEntityError` |\n| 429 | `RateLimitError` |\n| >=500 | `InternalServerError` |\n| N/A | `APIConnectionError` |\n\n### Retries\n\nCertain errors are automatically retried 2 times by default, with a short exponential backoff.\nConnection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,\n429 Rate Limit, and >=500 Internal errors are all retried by default.\n\nYou can use the `max_retries` option to configure or disable retry settings:\n\n```python\nfrom grid import LightsparkGrid\n\n# Configure the default for all requests:\nclient = LightsparkGrid(\n # default is 2\n max_retries=0,\n)\n\n# Or, configure per-request:\nclient.with_options(max_retries = 5).quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\n```\n\n### Timeouts\n\nBy default requests time out after 1 minute. You can configure this with a `timeout` option,\nwhich accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:\n\n```python\nfrom grid import LightsparkGrid\n\n# Configure the default for all requests:\nclient = LightsparkGrid(\n # 20 seconds (default is 1 minute)\n timeout=20.0,\n)\n\n# More granular control:\nclient = LightsparkGrid(\n timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0),\n)\n\n# Override per-request:\nclient.with_options(timeout = 5.0).quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\n```\n\nOn timeout, an `APITimeoutError` is thrown.\n\nNote that requests that time out are [retried twice by default](#retries).\n\n\n\n## Advanced\n\n### Logging\n\nWe use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module.\n\nYou can enable logging by setting the environment variable `LIGHTSPARK_GRID_LOG` to `info`.\n\n```shell\n$ export LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging.\n\n### How to tell whether `None` means `null` or missing\n\nIn an API response, a field may be explicitly `null`, or missing entirely; in either case, its value is `None` in this library. You can differentiate the two cases with `.model_fields_set`:\n\n```py\nif response.my_field is None:\n if \'my_field\' not in response.model_fields_set:\n print(\'Got json like {}, without a "my_field" key present at all.\')\n else:\n print(\'Got json like {"my_field": null}.\')\n```\n\n### Accessing raw response data (e.g. headers)\n\nThe "raw" Response object can be accessed by prefixing `.with_raw_response.` to any HTTP method call, e.g.,\n\n```py\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.quotes.with_raw_response.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\nprint(response.headers.get(\'X-My-Header\'))\n\nquote = response.parse() # get the object that `quotes.create()` would have returned\nprint(quote.id)\n```\n\nThese methods return an [`APIResponse`](https://github.com/stainless-sdks/grid-python/tree/main/src/grid/_response.py) object.\n\nThe async client returns an [`AsyncAPIResponse`](https://github.com/stainless-sdks/grid-python/tree/main/src/grid/_response.py) with the same structure, the only difference being `await`able methods for reading the response content.\n\n#### `.with_streaming_response`\n\nThe above interface eagerly reads the full response body when you make the request, which may not always be what you want.\n\nTo stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.\n\n```python\nwith client.quotes.with_streaming_response.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n) as response :\n print(response.headers.get(\'X-My-Header\'))\n\n for line in response.iter_lines():\n print(line)\n```\n\nThe context manager is required so that the response will reliably be closed.\n\n### Making custom/undocumented requests\n\nThis library is typed for convenient access to the documented API.\n\nIf you need to access undocumented endpoints, params, or response properties, the library can still be used.\n\n#### Undocumented endpoints\n\nTo make requests to undocumented endpoints, you can make requests using `client.get`, `client.post`, and other\nhttp verbs. Options on the client will be respected (such as retries) when making this request.\n\n```py\nimport httpx\n\nresponse = client.post(\n "/foo",\n cast_to=httpx.Response,\n body={"my_param": True},\n)\n\nprint(response.headers.get("x-foo"))\n```\n\n#### Undocumented request params\n\nIf you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` request\noptions.\n\n#### Undocumented response properties\n\nTo access undocumented response properties, you can access the extra fields like `response.unknown_prop`. You\ncan also get all the extra fields on the Pydantic model as a dict with\n[`response.model_extra`](https://docs.pydantic.dev/latest/api/base_model/#pydantic.BaseModel.model_extra).\n\n### Configuring the HTTP client\n\nYou can directly override the [httpx client](https://www.python-httpx.org/api/#client) to customize it for your use case, including:\n\n- Support for [proxies](https://www.python-httpx.org/advanced/proxies/)\n- Custom [transports](https://www.python-httpx.org/advanced/transports/)\n- Additional [advanced](https://www.python-httpx.org/advanced/clients/) functionality\n\n```python\nimport httpx\nfrom grid import LightsparkGrid, DefaultHttpxClient\n\nclient = LightsparkGrid(\n # Or use the `LIGHTSPARK_GRID_BASE_URL` env var\n base_url="http://my.test.server.example.com:8083",\n http_client=DefaultHttpxClient(proxy="http://my.test.proxy.example.com", transport=httpx.HTTPTransport(local_address="0.0.0.0")),\n)\n```\n\nYou can also customize the client on a per-request basis by using `with_options()`:\n\n```python\nclient.with_options(http_client=DefaultHttpxClient(...))\n```\n\n### Managing HTTP resources\n\nBy default the library closes underlying HTTP connections whenever the client is [garbage collected](https://docs.python.org/3/reference/datamodel.html#object.__del__). You can manually close the client using the `.close()` method if desired, or with a context manager that closes when exiting.\n\n```py\nfrom grid import LightsparkGrid\n\nwith LightsparkGrid() as client:\n # make requests here\n ...\n\n# HTTP client is now closed\n```\n\n## Versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes that only affect static types, without breaking runtime behavior.\n2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n3. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/stainless-sdks/grid-python/issues) with questions, bugs, or suggestions.\n\n### Determining the installed version\n\nIf you\'ve upgraded to the latest version but aren\'t seeing any new features you were expecting then your python environment is likely still using an older version.\n\nYou can determine the version that is being used at runtime with:\n\n```py\nimport grid\nprint(grid.__version__)\n```\n\n## Requirements\n\nPython 3.9 or higher.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n', + '# Lightspark Grid Python API library\n\n\n[![PyPI version](https://img.shields.io/pypi/v/grid.svg?label=pypi%20(stable))](https://pypi.org/project/grid/)\n\nThe Lightspark Grid Python library provides convenient access to the Lightspark Grid REST API from any Python 3.9+\napplication. The library includes type definitions for all request params and response fields,\nand offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).\n\n\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwieC1ncmlkLWFnZW50LWFjY2Vzcy10b2tlbiI6Ik15IEFnZW50IEFjY2VzcyBUb2tlbiIsIlgtR3JpZC1TaWduYXR1cmUiOiJNeSBXZWJob29rIFNpZ25hdHVyZSJ9fQ)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22x-grid-agent-access-token%22%3A%22My%20Agent%20Access%20Token%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n## Documentation\n\n The full API of this library can be found in [api.md](api.md).\n\n## Installation\n\n```sh\n# install from this staging repo\npip install git+ssh://git@github.com/stainless-sdks/grid-python.git\n```\n> [!NOTE]\n> Once this package is [published to PyPI](https://www.stainless.com/docs/guides/publish), this will become: `pip install grid`\n\n## Usage\n\nThe full API of this library can be found in [api.md](api.md).\n\n```python\nimport os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\n\nquote = client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\nprint(quote.id)\n```\n\nWhile you can provide a `username` keyword argument,\nwe recommend using [python-dotenv](https://pypi.org/project/python-dotenv/)\nto add `GRID_CLIENT_ID="My Username"` to your `.env` file\nso that your Username is not stored in source control.\n\n## Async usage\n\nSimply import `AsyncLightsparkGrid` instead of `LightsparkGrid` and use `await` with each API call:\n\n```python\nimport os\nimport asyncio\nfrom grid import AsyncLightsparkGrid\n\nclient = AsyncLightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\n\nasync def main() -> None:\n quote = await client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n )\n print(quote.id)\n\nasyncio.run(main())\n```\n\nFunctionality between the synchronous and asynchronous clients is otherwise identical.\n\n### With aiohttp\n\nBy default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.\n\nYou can enable this by installing `aiohttp`:\n\n```sh\n# install from this staging repo\npip install \'grid[aiohttp] @ git+ssh://git@github.com/stainless-sdks/grid-python.git\'\n```\n\nThen you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:\n\n```python\nimport os\nimport asyncio\nfrom grid import DefaultAioHttpClient\nfrom grid import AsyncLightsparkGrid\n\nasync def main() -> None:\n async with AsyncLightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n http_client=DefaultAioHttpClient(),\n) as client:\n quote = await client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n )\n print(quote.id)\n\nasyncio.run(main())\n```\n\n\n\n## Using types\n\nNested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:\n\n- Serializing back into JSON, `model.to_json()`\n- Converting to a dictionary, `model.to_dict()`\n\nTyped requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`.\n\n## Pagination\n\nList methods in the Lightspark Grid API are paginated.\n\nThis library provides auto-paginating iterators with each list response, so you do not have to request successive pages manually:\n\n```python\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\nall_customers = []\n# Automatically fetches more pages as needed.\nfor customer in client.customers.list():\n # Do something with customer here\n all_customers.append(customer)\nprint(all_customers)\n```\n\nOr, asynchronously:\n\n```python\nimport asyncio\nfrom grid import AsyncLightsparkGrid\n\nclient = AsyncLightsparkGrid()\n\nasync def main() -> None:\n all_customers = []\n # Iterate through items across all pages, issuing requests as needed.\n async for customer in client.customers.list():\n all_customers.append(customer)\n print(all_customers)\n\nasyncio.run(main())\n```\n\nAlternatively, you can use the `.has_next_page()`, `.next_page_info()`, or `.get_next_page()` methods for more granular control working with pages:\n\n```python\nfirst_page = await client.customers.list()\nif first_page.has_next_page():\n print(f"will fetch next page using these details: {first_page.next_page_info()}")\n next_page = await first_page.get_next_page()\n print(f"number of items we just fetched: {len(next_page.data)}")\n\n# Remove `await` for non-async usage.\n```\n\nOr just work directly with the returned data:\n\n```python\nfirst_page = await client.customers.list()\n\nprint(f"next page cursor: {first_page.next_cursor}") # => "next page cursor: ..."\nfor customer in first_page.data:\n print(customer)\n\n# Remove `await` for non-async usage.\n```\n\n## Nested params\n\nNested parameters are dictionaries, typed using `TypedDict`, for example:\n\n```python\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\ntransaction = client.transfer_in.create(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n)\nprint(transaction.destination)\n```\n\n## File uploads\n\nRequest parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.\n\n```python\nfrom pathlib import Path\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\nclient.customers.bulk.upload_csv(\n file=Path("/path/to/file"),\n)\n```\n\nThe async client uses the exact same interface. If you pass a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance, the file contents will be read asynchronously automatically.\n\n## Handling errors\n\nWhen the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `grid.APIConnectionError` is raised.\n\nWhen the API returns a non-success status code (that is, 4xx or 5xx\nresponse), a subclass of `grid.APIStatusError` is raised, containing `status_code` and `response` properties.\n\nAll errors inherit from `grid.APIError`.\n\n```python\nimport grid\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\n\ntry:\n client.quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n )\nexcept grid.APIConnectionError as e:\n print("The server could not be reached")\n print(e.__cause__) # an underlying Exception, likely raised within httpx.\nexcept grid.RateLimitError as e:\n print("A 429 status code was received; we should back off a bit.")\nexcept grid.APIStatusError as e:\n print("Another non-200-range status code was received")\n print(e.status_code)\n print(e.response)\n```\n\nError codes are as follows:\n\n| Status Code | Error Type |\n| ----------- | -------------------------- |\n| 400 | `BadRequestError` |\n| 401 | `AuthenticationError` |\n| 403 | `PermissionDeniedError` |\n| 404 | `NotFoundError` |\n| 422 | `UnprocessableEntityError` |\n| 429 | `RateLimitError` |\n| >=500 | `InternalServerError` |\n| N/A | `APIConnectionError` |\n\n### Retries\n\nCertain errors are automatically retried 2 times by default, with a short exponential backoff.\nConnection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,\n429 Rate Limit, and >=500 Internal errors are all retried by default.\n\nYou can use the `max_retries` option to configure or disable retry settings:\n\n```python\nfrom grid import LightsparkGrid\n\n# Configure the default for all requests:\nclient = LightsparkGrid(\n # default is 2\n max_retries=0,\n)\n\n# Or, configure per-request:\nclient.with_options(max_retries = 5).quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\n```\n\n### Timeouts\n\nBy default requests time out after 1 minute. You can configure this with a `timeout` option,\nwhich accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:\n\n```python\nfrom grid import LightsparkGrid\n\n# Configure the default for all requests:\nclient = LightsparkGrid(\n # 20 seconds (default is 1 minute)\n timeout=20.0,\n)\n\n# More granular control:\nclient = LightsparkGrid(\n timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0),\n)\n\n# Override per-request:\nclient.with_options(timeout = 5.0).quotes.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\n```\n\nOn timeout, an `APITimeoutError` is thrown.\n\nNote that requests that time out are [retried twice by default](#retries).\n\n\n\n## Advanced\n\n### Logging\n\nWe use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module.\n\nYou can enable logging by setting the environment variable `LIGHTSPARK_GRID_LOG` to `info`.\n\n```shell\n$ export LIGHTSPARK_GRID_LOG=info\n```\n\nOr to `debug` for more verbose logging.\n\n### How to tell whether `None` means `null` or missing\n\nIn an API response, a field may be explicitly `null`, or missing entirely; in either case, its value is `None` in this library. You can differentiate the two cases with `.model_fields_set`:\n\n```py\nif response.my_field is None:\n if \'my_field\' not in response.model_fields_set:\n print(\'Got json like {}, without a "my_field" key present at all.\')\n else:\n print(\'Got json like {"my_field": null}.\')\n```\n\n### Accessing raw response data (e.g. headers)\n\nThe "raw" Response object can be accessed by prefixing `.with_raw_response.` to any HTTP method call, e.g.,\n\n```py\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.quotes.with_raw_response.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n)\nprint(response.headers.get(\'X-My-Header\'))\n\nquote = response.parse() # get the object that `quotes.create()` would have returned\nprint(quote.id)\n```\n\nThese methods return an [`APIResponse`](https://github.com/stainless-sdks/grid-python/tree/main/src/grid/_response.py) object.\n\nThe async client returns an [`AsyncAPIResponse`](https://github.com/stainless-sdks/grid-python/tree/main/src/grid/_response.py) with the same structure, the only difference being `await`able methods for reading the response content.\n\n#### `.with_streaming_response`\n\nThe above interface eagerly reads the full response body when you make the request, which may not always be what you want.\n\nTo stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.\n\n```python\nwith client.quotes.with_streaming_response.create(\n destination={\n "destination_type": "ACCOUNT",\n "account_id": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",\n },\n locked_currency_amount=10000,\n locked_currency_side="SENDING",\n source={\n "source_type": "ACCOUNT",\n "account_id": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",\n },\n) as response :\n print(response.headers.get(\'X-My-Header\'))\n\n for line in response.iter_lines():\n print(line)\n```\n\nThe context manager is required so that the response will reliably be closed.\n\n### Making custom/undocumented requests\n\nThis library is typed for convenient access to the documented API.\n\nIf you need to access undocumented endpoints, params, or response properties, the library can still be used.\n\n#### Undocumented endpoints\n\nTo make requests to undocumented endpoints, you can make requests using `client.get`, `client.post`, and other\nhttp verbs. Options on the client will be respected (such as retries) when making this request.\n\n```py\nimport httpx\n\nresponse = client.post(\n "/foo",\n cast_to=httpx.Response,\n body={"my_param": True},\n)\n\nprint(response.headers.get("x-foo"))\n```\n\n#### Undocumented request params\n\nIf you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` request\noptions.\n\n#### Undocumented response properties\n\nTo access undocumented response properties, you can access the extra fields like `response.unknown_prop`. You\ncan also get all the extra fields on the Pydantic model as a dict with\n[`response.model_extra`](https://docs.pydantic.dev/latest/api/base_model/#pydantic.BaseModel.model_extra).\n\n### Configuring the HTTP client\n\nYou can directly override the [httpx client](https://www.python-httpx.org/api/#client) to customize it for your use case, including:\n\n- Support for [proxies](https://www.python-httpx.org/advanced/proxies/)\n- Custom [transports](https://www.python-httpx.org/advanced/transports/)\n- Additional [advanced](https://www.python-httpx.org/advanced/clients/) functionality\n\n```python\nimport httpx\nfrom grid import LightsparkGrid, DefaultHttpxClient\n\nclient = LightsparkGrid(\n # Or use the `LIGHTSPARK_GRID_BASE_URL` env var\n base_url="http://my.test.server.example.com:8083",\n http_client=DefaultHttpxClient(proxy="http://my.test.proxy.example.com", transport=httpx.HTTPTransport(local_address="0.0.0.0")),\n)\n```\n\nYou can also customize the client on a per-request basis by using `with_options()`:\n\n```python\nclient.with_options(http_client=DefaultHttpxClient(...))\n```\n\n### Managing HTTP resources\n\nBy default the library closes underlying HTTP connections whenever the client is [garbage collected](https://docs.python.org/3/reference/datamodel.html#object.__del__). You can manually close the client using the `.close()` method if desired, or with a context manager that closes when exiting.\n\n```py\nfrom grid import LightsparkGrid\n\nwith LightsparkGrid() as client:\n # make requests here\n ...\n\n# HTTP client is now closed\n```\n\n## Versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes that only affect static types, without breaking runtime behavior.\n2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n3. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/stainless-sdks/grid-python/issues) with questions, bugs, or suggestions.\n\n### Determining the installed version\n\nIf you\'ve upgraded to the latest version but aren\'t seeing any new features you were expecting then your python environment is likely still using an older version.\n\nYou can determine the version that is being used at runtime with:\n\n```py\nimport grid\nprint(grid.__version__)\n```\n\n## Requirements\n\nPython 3.9 or higher.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n', }, { language: 'typescript', content: - "# Lightspark Grid TypeScript API Library\n\n[![NPM version](https://img.shields.io/npm/v/@lightsparkdev/grid.svg?label=npm%20(stable))](https://npmjs.org/package/@lightsparkdev/grid) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/@lightsparkdev/grid) [![JSR Version](https://jsr.io/badges/@lightsparkdev/grid)](https://jsr.io/@lightsparkdev/grid)\n\nThis library provides convenient access to the Lightspark Grid REST API from server-side TypeScript or JavaScript.\n\n\n\nThe full API of this library can be found in [api.md](api.md).\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwiWC1HcmlkLVNpZ25hdHVyZSI6Ik15IFdlYmhvb2sgU2lnbmF0dXJlIn19)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n## Installation\n\n```sh\nnpm install @lightsparkdev/grid\n```\n\n### Installation from JSR\n\n```sh\ndeno add jsr:@lightsparkdev/grid\nnpx jsr add @lightsparkdev/grid\n```\n\nThese commands will make the module importable from the `@lightsparkdev/grid` scope:\n\nYou can also [import directly from JSR](https://jsr.io/docs/using-packages#importing-with-jsr-specifiers) without an install step if you're using the Deno JavaScript runtime:\n\n```ts\nimport LightsparkGrid from 'jsr:@lightsparkdev/grid';\n```\n\n## Usage\n\nThe full API of this library can be found in [api.md](api.md).\n\n\n```js\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst quote = await client.quotes.create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n});\n\nconsole.log(quote.id);\n```\n\n\n\n### Request & Response types\n\nThis library includes TypeScript definitions for all request params and response fields. You may import and use them like so:\n\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst params: LightsparkGrid.QuoteCreateParams = {\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n};\nconst quote: LightsparkGrid.Quote = await client.quotes.create(params);\n```\n\nDocumentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors.\n\n## File uploads\n\nRequest parameters that correspond to file uploads can be passed in many different forms:\n- `File` (or an object with the same structure)\n- a `fetch` `Response` (or an object with the same structure)\n- an `fs.ReadStream`\n- the return value of our `toFile` helper\n\n```ts\nimport fs from 'fs';\nimport LightsparkGrid, { toFile } from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// If you have access to Node `fs` we recommend using `fs.createReadStream()`:\nawait client.customers.bulk.uploadCsv({ file: fs.createReadStream('/path/to/file') });\n\n// Or if you have the web `File` API you can pass a `File` instance:\nawait client.customers.bulk.uploadCsv({ file: new File(['my bytes'], 'file') });\n\n// You can also pass a `fetch` `Response`:\nawait client.customers.bulk.uploadCsv({ file: await fetch('https://somesite/file') });\n\n// Finally, if none of the above are convenient, you can use our `toFile` helper:\nawait client.customers.bulk.uploadCsv({ file: await toFile(Buffer.from('my bytes'), 'file') });\nawait client.customers.bulk.uploadCsv({ file: await toFile(new Uint8Array([0, 1, 2]), 'file') });\n```\n\n\n\n## Handling errors\n\nWhen the library is unable to connect to the API,\nor if the API returns a non-success status code (i.e., 4xx or 5xx response),\na subclass of `APIError` will be thrown:\n\n\n```ts\nconst quote = await client.quotes\n .create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n })\n .catch(async (err) => {\n if (err instanceof LightsparkGrid.APIError) {\n console.log(err.status); // 400\n console.log(err.name); // BadRequestError\n console.log(err.headers); // {server: 'nginx', ...}\n } else {\n throw err;\n }\n });\n```\n\nError codes are as follows:\n\n| Status Code | Error Type |\n| ----------- | -------------------------- |\n| 400 | `BadRequestError` |\n| 401 | `AuthenticationError` |\n| 403 | `PermissionDeniedError` |\n| 404 | `NotFoundError` |\n| 422 | `UnprocessableEntityError` |\n| 429 | `RateLimitError` |\n| >=500 | `InternalServerError` |\n| N/A | `APIConnectionError` |\n\n### Retries\n\nCertain errors will be automatically retried 2 times by default, with a short exponential backoff.\nConnection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,\n429 Rate Limit, and >=500 Internal errors will all be retried by default.\n\nYou can use the `maxRetries` option to configure or disable this:\n\n\n```js\n// Configure the default for all requests:\nconst client = new LightsparkGrid({\n maxRetries: 0, // default is 2\n});\n\n// Or, configure per-request:\nawait client.quotes.create({\n destination: { destinationType: 'ACCOUNT', accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { sourceType: 'ACCOUNT', accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n}, {\n maxRetries: 5,\n});\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default. You can configure this with a `timeout` option:\n\n\n```ts\n// Configure the default for all requests:\nconst client = new LightsparkGrid({\n timeout: 20 * 1000, // 20 seconds (default is 1 minute)\n});\n\n// Override per-request:\nawait client.quotes.create({\n destination: { destinationType: 'ACCOUNT', accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { sourceType: 'ACCOUNT', accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n}, {\n timeout: 5 * 1000,\n});\n```\n\nOn timeout, an `APIConnectionTimeoutError` is thrown.\n\nNote that requests which time out will be [retried twice by default](#retries).\n\n## Auto-pagination\n\nList methods in the LightsparkGrid API are paginated.\nYou can use the `for await … of` syntax to iterate through items across all pages:\n\n```ts\nasync function fetchAllCustomerOneoves(params) {\n const allCustomerOneoves = [];\n // Automatically fetches more pages as needed.\n for await (const customerOneOf of client.customers.list()) {\n allCustomerOneoves.push(customerOneOf);\n }\n return allCustomerOneoves;\n}\n```\n\nAlternatively, you can request a single page at a time:\n\n```ts\nlet page = await client.customers.list();\nfor (const customerOneOf of page.data) {\n console.log(customerOneOf);\n}\n\n// Convenience methods are provided for manually paginating:\nwhile (page.hasNextPage()) {\n page = await page.getNextPage();\n // ...\n}\n```\n\n\n\n## Advanced Usage\n\n### Accessing raw Response data (e.g., headers)\n\nThe \"raw\" `Response` returned by `fetch()` can be accessed through the `.asResponse()` method on the `APIPromise` type that all methods return.\nThis method returns as soon as the headers for a successful response are received and does not consume the response body, so you are free to write custom parsing or streaming logic.\n\nYou can also use the `.withResponse()` method to get the raw `Response` along with the parsed data.\nUnlike `.asResponse()` this method consumes the body, returning once it is parsed.\n\n\n```ts\nconst client = new LightsparkGrid();\n\nconst response = await client.quotes\n .create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n })\n .asResponse();\nconsole.log(response.headers.get('X-My-Header'));\nconsole.log(response.statusText); // access the underlying Response object\n\nconst { data: quote, response: raw } = await client.quotes\n .create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n })\n .withResponse();\nconsole.log(raw.headers.get('X-My-Header'));\nconsole.log(quote.id);\n```\n\n### Logging\n\n> [!IMPORTANT]\n> All log messages are intended for debugging only. The format and content of log messages\n> may change between releases.\n\n#### Log levels\n\nThe log level can be configured in two ways:\n\n1. Via the `LIGHTSPARK_GRID_LOG` environment variable\n2. Using the `logLevel` client option (overrides the environment variable if set)\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n logLevel: 'debug', // Show all log messages\n});\n```\n\nAvailable log levels, from most to least verbose:\n\n- `'debug'` - Show debug messages, info, warnings, and errors\n- `'info'` - Show info messages, warnings, and errors\n- `'warn'` - Show warnings and errors (default)\n- `'error'` - Show only errors\n- `'off'` - Disable all logging\n\nAt the `'debug'` level, all HTTP requests and responses are logged, including headers and bodies.\nSome authentication-related headers are redacted, but sensitive data in request and response bodies\nmay still be visible.\n\n#### Custom logger\n\nBy default, this library logs to `globalThis.console`. You can also provide a custom logger.\nMost logging libraries are supported, including [pino](https://www.npmjs.com/package/pino), [winston](https://www.npmjs.com/package/winston), [bunyan](https://www.npmjs.com/package/bunyan), [consola](https://www.npmjs.com/package/consola), [signale](https://www.npmjs.com/package/signale), and [@std/log](https://jsr.io/@std/log). If your logger doesn't work, please open an issue.\n\nWhen providing a custom logger, the `logLevel` option still controls which messages are emitted, messages\nbelow the configured level will not be sent to your logger.\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\nimport pino from 'pino';\n\nconst logger = pino();\n\nconst client = new LightsparkGrid({\n logger: logger.child({ name: 'LightsparkGrid' }),\n logLevel: 'debug', // Send all messages to pino, allowing it to filter\n});\n```\n\n### Making custom/undocumented requests\n\nThis library is typed for convenient access to the documented API. If you need to access undocumented\nendpoints, params, or response properties, the library can still be used.\n\n#### Undocumented endpoints\n\nTo make requests to undocumented endpoints, you can use `client.get`, `client.post`, and other HTTP verbs.\nOptions on the client, such as retries, will be respected when making these requests.\n\n```ts\nawait client.post('/some/path', {\n body: { some_prop: 'foo' },\n query: { some_query_arg: 'bar' },\n});\n```\n\n#### Undocumented request params\n\nTo make requests using undocumented parameters, you may use `// @ts-expect-error` on the undocumented\nparameter. This library doesn't validate at runtime that the request matches the type, so any extra values you\nsend will be sent as-is.\n\n```ts\nclient.quotes.create({\n // ...\n // @ts-expect-error baz is not yet public\n baz: 'undocumented option',\n});\n```\n\nFor requests with the `GET` verb, any extra params will be in the query, all other requests will send the\nextra param in the body.\n\nIf you want to explicitly send an extra argument, you can do so with the `query`, `body`, and `headers` request\noptions.\n\n#### Undocumented response properties\n\nTo access undocumented response properties, you may access the response object with `// @ts-expect-error` on\nthe response object, or cast the response object to the requisite type. Like the request params, we do not\nvalidate or strip extra properties from the response from the API.\n\n### Customizing the fetch client\n\nBy default, this library expects a global `fetch` function is defined.\n\nIf you want to use a different `fetch` function, you can either polyfill the global:\n\n```ts\nimport fetch from 'my-fetch';\n\nglobalThis.fetch = fetch;\n```\n\nOr pass it to the client:\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\nimport fetch from 'my-fetch';\n\nconst client = new LightsparkGrid({ fetch });\n```\n\n### Fetch options\n\nIf you want to set custom `fetch` options without overriding the `fetch` function, you can provide a `fetchOptions` object when instantiating the client or making a request. (Request-specific options override client options.)\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n fetchOptions: {\n // `RequestInit` options\n },\n});\n```\n\n#### Configuring proxies\n\nTo modify proxy behavior, you can provide custom `fetchOptions` that add runtime-specific proxy\noptions to requests:\n\n **Node** [[docs](https://github.com/nodejs/undici/blob/main/docs/docs/api/ProxyAgent.md#example---proxyagent-with-fetch)]\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\nimport * as undici from 'undici';\n\nconst proxyAgent = new undici.ProxyAgent('http://localhost:8888');\nconst client = new LightsparkGrid({\n fetchOptions: {\n dispatcher: proxyAgent,\n },\n});\n```\n\n **Bun** [[docs](https://bun.sh/guides/http/proxy)]\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n fetchOptions: {\n proxy: 'http://localhost:8888',\n },\n});\n```\n\n **Deno** [[docs](https://docs.deno.com/api/deno/~/Deno.createHttpClient)]\n\n```ts\nimport LightsparkGrid from 'jsr:@lightsparkdev/grid';\n\nconst httpClient = Deno.createHttpClient({ proxy: { url: 'http://localhost:8888' } });\nconst client = new LightsparkGrid({\n fetchOptions: {\n client: httpClient,\n },\n});\n```\n\n## Frequently Asked Questions\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes that only affect static types, without breaking runtime behavior.\n2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n3. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-js-sdk/issues) with questions, bugs, or suggestions.\n\n## Requirements\n\nTypeScript >= 4.9 is supported.\n\nThe following runtimes are supported:\n\n- Web browsers (Up-to-date Chrome, Firefox, Safari, Edge, and more)\n- Node.js 20 LTS or later ([non-EOL](https://endoflife.date/nodejs)) versions.\n- Deno v1.28.0 or higher.\n- Bun 1.0 or later.\n- Cloudflare Workers.\n- Vercel Edge Runtime.\n- Jest 28 or greater with the `\"node\"` environment (`\"jsdom\"` is not supported at this time).\n- Nitro v2.6 or greater.\n\nNote that React Native is not supported at this time.\n\nIf you are interested in other runtime environments, please open or upvote an issue on GitHub.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n", + "# Lightspark Grid TypeScript API Library\n\n[![NPM version](https://img.shields.io/npm/v/@lightsparkdev/grid.svg?label=npm%20(stable))](https://npmjs.org/package/@lightsparkdev/grid) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/@lightsparkdev/grid) [![JSR Version](https://jsr.io/badges/@lightsparkdev/grid)](https://jsr.io/@lightsparkdev/grid)\n\nThis library provides convenient access to the Lightspark Grid REST API from server-side TypeScript or JavaScript.\n\n\n\nThe full API of this library can be found in [api.md](api.md).\n\nIt is generated with [Stainless](https://www.stainless.com/).\n\n## MCP Server\n\nUse the Lightspark Grid MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40lightsparkdev%2Fgrid-mcp&config=eyJuYW1lIjoiQGxpZ2h0c3BhcmtkZXYvZ3JpZC1tY3AiLCJ0cmFuc3BvcnQiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9ncmlkLW1jcC5zdGxtY3AuY29tIiwiaGVhZGVycyI6eyJ4LWdyaWQtY2xpZW50LWlkIjoiTXkgVXNlcm5hbWUiLCJ4LWdyaWQtY2xpZW50LXNlY3JldCI6Ik15IFBhc3N3b3JkIiwieC1ncmlkLWFnZW50LWFjY2Vzcy10b2tlbiI6Ik15IEFnZW50IEFjY2VzcyBUb2tlbiIsIlgtR3JpZC1TaWduYXR1cmUiOiJNeSBXZWJob29rIFNpZ25hdHVyZSJ9fQ)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40lightsparkdev%2Fgrid-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fgrid-mcp.stlmcp.com%22%2C%22headers%22%3A%7B%22x-grid-client-id%22%3A%22My%20Username%22%2C%22x-grid-client-secret%22%3A%22My%20Password%22%2C%22x-grid-agent-access-token%22%3A%22My%20Agent%20Access%20Token%22%2C%22X-Grid-Signature%22%3A%22My%20Webhook%20Signature%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n## Installation\n\n```sh\nnpm install @lightsparkdev/grid\n```\n\n### Installation from JSR\n\n```sh\ndeno add jsr:@lightsparkdev/grid\nnpx jsr add @lightsparkdev/grid\n```\n\nThese commands will make the module importable from the `@lightsparkdev/grid` scope:\n\nYou can also [import directly from JSR](https://jsr.io/docs/using-packages#importing-with-jsr-specifiers) without an install step if you're using the Deno JavaScript runtime:\n\n```ts\nimport LightsparkGrid from 'jsr:@lightsparkdev/grid';\n```\n\n## Usage\n\nThe full API of this library can be found in [api.md](api.md).\n\n\n```js\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst quote = await client.quotes.create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n});\n\nconsole.log(quote.id);\n```\n\n\n\n### Request & Response types\n\nThis library includes TypeScript definitions for all request params and response fields. You may import and use them like so:\n\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst params: LightsparkGrid.QuoteCreateParams = {\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n};\nconst quote: LightsparkGrid.Quote = await client.quotes.create(params);\n```\n\nDocumentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors.\n\n## File uploads\n\nRequest parameters that correspond to file uploads can be passed in many different forms:\n- `File` (or an object with the same structure)\n- a `fetch` `Response` (or an object with the same structure)\n- an `fs.ReadStream`\n- the return value of our `toFile` helper\n\n```ts\nimport fs from 'fs';\nimport LightsparkGrid, { toFile } from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// If you have access to Node `fs` we recommend using `fs.createReadStream()`:\nawait client.customers.bulk.uploadCsv({ file: fs.createReadStream('/path/to/file') });\n\n// Or if you have the web `File` API you can pass a `File` instance:\nawait client.customers.bulk.uploadCsv({ file: new File(['my bytes'], 'file') });\n\n// You can also pass a `fetch` `Response`:\nawait client.customers.bulk.uploadCsv({ file: await fetch('https://somesite/file') });\n\n// Finally, if none of the above are convenient, you can use our `toFile` helper:\nawait client.customers.bulk.uploadCsv({ file: await toFile(Buffer.from('my bytes'), 'file') });\nawait client.customers.bulk.uploadCsv({ file: await toFile(new Uint8Array([0, 1, 2]), 'file') });\n```\n\n\n\n## Handling errors\n\nWhen the library is unable to connect to the API,\nor if the API returns a non-success status code (i.e., 4xx or 5xx response),\na subclass of `APIError` will be thrown:\n\n\n```ts\nconst quote = await client.quotes\n .create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n })\n .catch(async (err) => {\n if (err instanceof LightsparkGrid.APIError) {\n console.log(err.status); // 400\n console.log(err.name); // BadRequestError\n console.log(err.headers); // {server: 'nginx', ...}\n } else {\n throw err;\n }\n });\n```\n\nError codes are as follows:\n\n| Status Code | Error Type |\n| ----------- | -------------------------- |\n| 400 | `BadRequestError` |\n| 401 | `AuthenticationError` |\n| 403 | `PermissionDeniedError` |\n| 404 | `NotFoundError` |\n| 422 | `UnprocessableEntityError` |\n| 429 | `RateLimitError` |\n| >=500 | `InternalServerError` |\n| N/A | `APIConnectionError` |\n\n### Retries\n\nCertain errors will be automatically retried 2 times by default, with a short exponential backoff.\nConnection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,\n429 Rate Limit, and >=500 Internal errors will all be retried by default.\n\nYou can use the `maxRetries` option to configure or disable this:\n\n\n```js\n// Configure the default for all requests:\nconst client = new LightsparkGrid({\n maxRetries: 0, // default is 2\n});\n\n// Or, configure per-request:\nawait client.quotes.create({\n destination: { destinationType: 'ACCOUNT', accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { sourceType: 'ACCOUNT', accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n}, {\n maxRetries: 5,\n});\n```\n\n### Timeouts\n\nRequests time out after 1 minute by default. You can configure this with a `timeout` option:\n\n\n```ts\n// Configure the default for all requests:\nconst client = new LightsparkGrid({\n timeout: 20 * 1000, // 20 seconds (default is 1 minute)\n});\n\n// Override per-request:\nawait client.quotes.create({\n destination: { destinationType: 'ACCOUNT', accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: { sourceType: 'ACCOUNT', accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n}, {\n timeout: 5 * 1000,\n});\n```\n\nOn timeout, an `APIConnectionTimeoutError` is thrown.\n\nNote that requests which time out will be [retried twice by default](#retries).\n\n## Auto-pagination\n\nList methods in the LightsparkGrid API are paginated.\nYou can use the `for await … of` syntax to iterate through items across all pages:\n\n```ts\nasync function fetchAllCustomerOneoves(params) {\n const allCustomerOneoves = [];\n // Automatically fetches more pages as needed.\n for await (const customerOneOf of client.customers.list()) {\n allCustomerOneoves.push(customerOneOf);\n }\n return allCustomerOneoves;\n}\n```\n\nAlternatively, you can request a single page at a time:\n\n```ts\nlet page = await client.customers.list();\nfor (const customerOneOf of page.data) {\n console.log(customerOneOf);\n}\n\n// Convenience methods are provided for manually paginating:\nwhile (page.hasNextPage()) {\n page = await page.getNextPage();\n // ...\n}\n```\n\n\n\n## Advanced Usage\n\n### Accessing raw Response data (e.g., headers)\n\nThe \"raw\" `Response` returned by `fetch()` can be accessed through the `.asResponse()` method on the `APIPromise` type that all methods return.\nThis method returns as soon as the headers for a successful response are received and does not consume the response body, so you are free to write custom parsing or streaming logic.\n\nYou can also use the `.withResponse()` method to get the raw `Response` along with the parsed data.\nUnlike `.asResponse()` this method consumes the body, returning once it is parsed.\n\n\n```ts\nconst client = new LightsparkGrid();\n\nconst response = await client.quotes\n .create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n })\n .asResponse();\nconsole.log(response.headers.get('X-My-Header'));\nconsole.log(response.statusText); // access the underlying Response object\n\nconst { data: quote, response: raw } = await client.quotes\n .create({\n destination: {\n destinationType: 'ACCOUNT',\n accountId: 'ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123',\n },\n lockedCurrencyAmount: 10000,\n lockedCurrencySide: 'SENDING',\n source: {\n sourceType: 'ACCOUNT',\n accountId: 'InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965',\n },\n })\n .withResponse();\nconsole.log(raw.headers.get('X-My-Header'));\nconsole.log(quote.id);\n```\n\n### Logging\n\n> [!IMPORTANT]\n> All log messages are intended for debugging only. The format and content of log messages\n> may change between releases.\n\n#### Log levels\n\nThe log level can be configured in two ways:\n\n1. Via the `LIGHTSPARK_GRID_LOG` environment variable\n2. Using the `logLevel` client option (overrides the environment variable if set)\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n logLevel: 'debug', // Show all log messages\n});\n```\n\nAvailable log levels, from most to least verbose:\n\n- `'debug'` - Show debug messages, info, warnings, and errors\n- `'info'` - Show info messages, warnings, and errors\n- `'warn'` - Show warnings and errors (default)\n- `'error'` - Show only errors\n- `'off'` - Disable all logging\n\nAt the `'debug'` level, all HTTP requests and responses are logged, including headers and bodies.\nSome authentication-related headers are redacted, but sensitive data in request and response bodies\nmay still be visible.\n\n#### Custom logger\n\nBy default, this library logs to `globalThis.console`. You can also provide a custom logger.\nMost logging libraries are supported, including [pino](https://www.npmjs.com/package/pino), [winston](https://www.npmjs.com/package/winston), [bunyan](https://www.npmjs.com/package/bunyan), [consola](https://www.npmjs.com/package/consola), [signale](https://www.npmjs.com/package/signale), and [@std/log](https://jsr.io/@std/log). If your logger doesn't work, please open an issue.\n\nWhen providing a custom logger, the `logLevel` option still controls which messages are emitted, messages\nbelow the configured level will not be sent to your logger.\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\nimport pino from 'pino';\n\nconst logger = pino();\n\nconst client = new LightsparkGrid({\n logger: logger.child({ name: 'LightsparkGrid' }),\n logLevel: 'debug', // Send all messages to pino, allowing it to filter\n});\n```\n\n### Making custom/undocumented requests\n\nThis library is typed for convenient access to the documented API. If you need to access undocumented\nendpoints, params, or response properties, the library can still be used.\n\n#### Undocumented endpoints\n\nTo make requests to undocumented endpoints, you can use `client.get`, `client.post`, and other HTTP verbs.\nOptions on the client, such as retries, will be respected when making these requests.\n\n```ts\nawait client.post('/some/path', {\n body: { some_prop: 'foo' },\n query: { some_query_arg: 'bar' },\n});\n```\n\n#### Undocumented request params\n\nTo make requests using undocumented parameters, you may use `// @ts-expect-error` on the undocumented\nparameter. This library doesn't validate at runtime that the request matches the type, so any extra values you\nsend will be sent as-is.\n\n```ts\nclient.quotes.create({\n // ...\n // @ts-expect-error baz is not yet public\n baz: 'undocumented option',\n});\n```\n\nFor requests with the `GET` verb, any extra params will be in the query, all other requests will send the\nextra param in the body.\n\nIf you want to explicitly send an extra argument, you can do so with the `query`, `body`, and `headers` request\noptions.\n\n#### Undocumented response properties\n\nTo access undocumented response properties, you may access the response object with `// @ts-expect-error` on\nthe response object, or cast the response object to the requisite type. Like the request params, we do not\nvalidate or strip extra properties from the response from the API.\n\n### Customizing the fetch client\n\nBy default, this library expects a global `fetch` function is defined.\n\nIf you want to use a different `fetch` function, you can either polyfill the global:\n\n```ts\nimport fetch from 'my-fetch';\n\nglobalThis.fetch = fetch;\n```\n\nOr pass it to the client:\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\nimport fetch from 'my-fetch';\n\nconst client = new LightsparkGrid({ fetch });\n```\n\n### Fetch options\n\nIf you want to set custom `fetch` options without overriding the `fetch` function, you can provide a `fetchOptions` object when instantiating the client or making a request. (Request-specific options override client options.)\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n fetchOptions: {\n // `RequestInit` options\n },\n});\n```\n\n#### Configuring proxies\n\nTo modify proxy behavior, you can provide custom `fetchOptions` that add runtime-specific proxy\noptions to requests:\n\n **Node** [[docs](https://github.com/nodejs/undici/blob/main/docs/docs/api/ProxyAgent.md#example---proxyagent-with-fetch)]\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\nimport * as undici from 'undici';\n\nconst proxyAgent = new undici.ProxyAgent('http://localhost:8888');\nconst client = new LightsparkGrid({\n fetchOptions: {\n dispatcher: proxyAgent,\n },\n});\n```\n\n **Bun** [[docs](https://bun.sh/guides/http/proxy)]\n\n```ts\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n fetchOptions: {\n proxy: 'http://localhost:8888',\n },\n});\n```\n\n **Deno** [[docs](https://docs.deno.com/api/deno/~/Deno.createHttpClient)]\n\n```ts\nimport LightsparkGrid from 'jsr:@lightsparkdev/grid';\n\nconst httpClient = Deno.createHttpClient({ proxy: { url: 'http://localhost:8888' } });\nconst client = new LightsparkGrid({\n fetchOptions: {\n client: httpClient,\n },\n});\n```\n\n## Frequently Asked Questions\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes that only affect static types, without breaking runtime behavior.\n2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n3. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/lightsparkdev/grid-js-sdk/issues) with questions, bugs, or suggestions.\n\n## Requirements\n\nTypeScript >= 4.9 is supported.\n\nThe following runtimes are supported:\n\n- Web browsers (Up-to-date Chrome, Firefox, Safari, Edge, and more)\n- Node.js 20 LTS or later ([non-EOL](https://endoflife.date/nodejs)) versions.\n- Deno v1.28.0 or higher.\n- Bun 1.0 or later.\n- Cloudflare Workers.\n- Vercel Edge Runtime.\n- Jest 28 or greater with the `\"node\"` environment (`\"jsdom\"` is not supported at this time).\n- Nitro v2.6 or greater.\n\nNote that React Native is not supported at this time.\n\nIf you are interested in other runtime environments, please open or upvote an issue on GitHub.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n", }, ]; diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts index 95baf12..3c00aa6 100644 --- a/packages/mcp-server/src/methods.ts +++ b/packages/mcp-server/src/methods.ts @@ -563,6 +563,18 @@ export const sdkMethods: SdkMethod[] = [ httpMethod: 'post', httpPath: '/agents/{agentId}/device-codes', }, + { + clientCallName: 'client.agents.transactions.approve', + fullyQualifiedName: 'agents.transactions.approve', + httpMethod: 'post', + httpPath: '/agents/{agentId}/actions/{actionId}/approve', + }, + { + clientCallName: 'client.agents.transactions.reject', + fullyQualifiedName: 'agents.transactions.reject', + httpMethod: 'post', + httpPath: '/agents/{agentId}/actions/{actionId}/reject', + }, { clientCallName: 'client.agents.actions.approve', fullyQualifiedName: 'agents.actions.approve', diff --git a/scripts/detect-breaking-changes b/scripts/detect-breaking-changes index 8e36678..4010ac7 100755 --- a/scripts/detect-breaking-changes +++ b/scripts/detect-breaking-changes @@ -42,6 +42,7 @@ TEST_PATHS=( tests/api-resources/agents/me/external-accounts.test.ts tests/api-resources/agents/me/actions.test.ts tests/api-resources/agents/device-codes.test.ts + tests/api-resources/agents/transactions.test.ts tests/api-resources/agents/actions.test.ts tests/index.test.ts ) diff --git a/src/client.ts b/src/client.ts index e1fdbb4..0cfa5cc 100644 --- a/src/client.ts +++ b/src/client.ts @@ -209,12 +209,17 @@ export interface ClientOptions { /** * API token authentication using format `:` */ - username?: string | undefined; + username?: string | null | undefined; /** * API token authentication using format `:` */ - password?: string | undefined; + password?: string | null | undefined; + + /** + * Bearer access token obtained by redeeming a device code. Required when calling agent-scoped endpoints (e.g. `GET /agents/me/...`). Leave unset for platform-scoped operations. + */ + agentAccessToken?: string | null | undefined; /** * Secp256r1 (P-256) asymmetric signature of the webhook payload, which can be used to verify that the webhook was sent by Grid. @@ -303,8 +308,9 @@ export interface ClientOptions { * API Client for interfacing with the Lightspark Grid API. */ export class LightsparkGrid { - username: string; - password: string; + username: string | null; + password: string | null; + agentAccessToken: string | null; webhookSignature: string | null; baseURL: string; @@ -322,8 +328,9 @@ export class LightsparkGrid { /** * API Client for interfacing with the Lightspark Grid API. * - * @param {string | undefined} [opts.username=process.env['GRID_CLIENT_ID'] ?? undefined] - * @param {string | undefined} [opts.password=process.env['GRID_CLIENT_SECRET'] ?? undefined] + * @param {string | null | undefined} [opts.username=process.env['GRID_CLIENT_ID'] ?? null] + * @param {string | null | undefined} [opts.password=process.env['GRID_CLIENT_SECRET'] ?? null] + * @param {string | null | undefined} [opts.agentAccessToken=process.env['GRID_AGENT_ACCESS_TOKEN'] ?? null] * @param {string | null | undefined} [opts.webhookSignature=process.env['GRID_WEBHOOK_PUBKEY'] ?? null] * @param {string} [opts.baseURL=process.env['LIGHTSPARK_GRID_BASE_URL'] ?? https://api.lightspark.com/grid/2025-10-13] - Override the default base URL for the API. * @param {number} [opts.timeout=1 minute] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. @@ -335,25 +342,16 @@ export class LightsparkGrid { */ constructor({ baseURL = readEnv('LIGHTSPARK_GRID_BASE_URL'), - username = readEnv('GRID_CLIENT_ID'), - password = readEnv('GRID_CLIENT_SECRET'), + username = readEnv('GRID_CLIENT_ID') ?? null, + password = readEnv('GRID_CLIENT_SECRET') ?? null, + agentAccessToken = readEnv('GRID_AGENT_ACCESS_TOKEN') ?? null, webhookSignature = readEnv('GRID_WEBHOOK_PUBKEY') ?? null, ...opts }: ClientOptions = {}) { - if (username === undefined) { - throw new Errors.LightsparkGridError( - "The GRID_CLIENT_ID environment variable is missing or empty; either provide it, or instantiate the LightsparkGrid client with an username option, like new LightsparkGrid({ username: 'My Username' }).", - ); - } - if (password === undefined) { - throw new Errors.LightsparkGridError( - "The GRID_CLIENT_SECRET environment variable is missing or empty; either provide it, or instantiate the LightsparkGrid client with an password option, like new LightsparkGrid({ password: 'My Password' }).", - ); - } - const options: ClientOptions = { username, password, + agentAccessToken, webhookSignature, ...opts, baseURL: baseURL || `https://api.lightspark.com/grid/2025-10-13`, @@ -390,6 +388,7 @@ export class LightsparkGrid { this.username = username; this.password = password; + this.agentAccessToken = agentAccessToken; this.webhookSignature = webhookSignature; } @@ -408,6 +407,7 @@ export class LightsparkGrid { fetchOptions: this.fetchOptions, username: this.username, password: this.password, + agentAccessToken: this.agentAccessToken, webhookSignature: this.webhookSignature, ...options, }); @@ -426,11 +426,38 @@ export class LightsparkGrid { } protected validateHeaders({ values, nulls }: NullableHeaders) { - return; + if (this.username && this.password && values.get('authorization')) { + return; + } + if (nulls.has('authorization')) { + return; + } + + if (this.agentAccessToken && values.get('authorization')) { + return; + } + if (nulls.has('authorization')) { + return; + } + + if (this.webhookSignature && values.get('x-grid-signature')) { + return; + } + if (nulls.has('x-grid-signature')) { + return; + } + + throw new Error( + 'Could not resolve authentication method. Expected one of username, password, agentAccessToken or webhookSignature to be set. Or for one of the "Authorization", "Authorization" or "X-Grid-Signature" headers to be explicitly omitted', + ); } protected async authHeaders(opts: FinalRequestOptions): Promise { - return buildHeaders([await this.basicAuth(opts), await this.webhookSignatureAuth(opts)]); + return buildHeaders([ + await this.basicAuth(opts), + await this.agentAuth(opts), + await this.webhookSignatureAuth(opts), + ]); } protected async basicAuth(opts: FinalRequestOptions): Promise { @@ -447,6 +474,13 @@ export class LightsparkGrid { return buildHeaders([{ Authorization }]); } + protected async agentAuth(opts: FinalRequestOptions): Promise { + if (this.agentAccessToken == null) { + return undefined; + } + return buildHeaders([{ Authorization: `Bearer ${this.agentAccessToken}` }]); + } + protected async webhookSignatureAuth(opts: FinalRequestOptions): Promise { if (this.webhookSignature == null) { return undefined; diff --git a/src/resources/agents/agents.ts b/src/resources/agents/agents.ts index 3b88d8a..52eff5b 100644 --- a/src/resources/agents/agents.ts +++ b/src/resources/agents/agents.ts @@ -19,7 +19,13 @@ import { DeviceCodes, } from './device-codes'; import * as TransactionsAPI from './transactions'; -import { Transactions } from './transactions'; +import { + TransactionApproveParams, + TransactionApproveResponse, + TransactionRejectParams, + TransactionRejectResponse, + Transactions, +} from './transactions'; import * as MeAPI from './me/me'; import { Me, @@ -1960,7 +1966,13 @@ export declare namespace Agents { type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, }; - export { Transactions as Transactions }; + export { + Transactions as Transactions, + type TransactionApproveResponse as TransactionApproveResponse, + type TransactionRejectResponse as TransactionRejectResponse, + type TransactionApproveParams as TransactionApproveParams, + type TransactionRejectParams as TransactionRejectParams, + }; export { Actions as Actions, diff --git a/src/resources/agents/index.ts b/src/resources/agents/index.ts index 1b99113..b2c9b3c 100644 --- a/src/resources/agents/index.ts +++ b/src/resources/agents/index.ts @@ -38,4 +38,10 @@ export { type MeCreateTransferOutParams, type MeListInternalAccountsParams, } from './me/index'; -export { Transactions } from './transactions'; +export { + Transactions, + type TransactionApproveResponse, + type TransactionRejectResponse, + type TransactionApproveParams, + type TransactionRejectParams, +} from './transactions'; diff --git a/src/resources/agents/transactions.ts b/src/resources/agents/transactions.ts index cd0f18b..c0b9709 100644 --- a/src/resources/agents/transactions.ts +++ b/src/resources/agents/transactions.ts @@ -1,5 +1,317 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; +import * as QuotesAPI from '../quotes'; +import * as TransferInAPI from '../transfer-in'; +import { APIPromise } from '../../core/api-promise'; +import { RequestOptions } from '../../internal/request-options'; +import { path } from '../../internal/utils/path'; -export class Transactions extends APIResource {} +/** + * Endpoints for creating and managing agents (experimental), called by the partner's backend using platform credentials. Covers the full agent lifecycle: creation, policy configuration, pausing, deletion, the device code installation flow, and approving or rejecting transactions initiated by agents. + */ +export class Transactions extends APIResource { + /** + * Approve a pending agent action, allowing Grid to proceed with execution. The + * action must have status `PENDING_APPROVAL`. Once approved, Grid executes the + * underlying operation (quote execution or transfer) and the action transitions to + * `APPROVED`. For `EXECUTE_QUOTE` actions, note that the underlying quote may have + * expired between submission and approval — in that case the action will + * transition to `FAILED` instead. This endpoint is called by the platform's + * backend using platform credentials, not by the agent itself. + * + * @example + * ```ts + * const response = await client.agents.transactions.approve( + * 'actionId', + * { agentId: 'agentId' }, + * ); + * ``` + */ + approve( + actionID: string, + params: TransactionApproveParams, + options?: RequestOptions, + ): APIPromise { + const { agentId } = params; + return this._client.post(path`/agents/${agentId}/actions/${actionID}/approve`, options); + } + + /** + * Reject a pending agent action, preventing execution. The action must have status + * `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the + * underlying operation is not executed. This endpoint is called by the platform's + * backend using platform credentials, not by the agent itself. + * + * @example + * ```ts + * const response = await client.agents.transactions.reject( + * 'actionId', + * { agentId: 'agentId' }, + * ); + * ``` + */ + reject( + actionID: string, + params: TransactionRejectParams, + options?: RequestOptions, + ): APIPromise { + const { agentId, ...body } = params; + return this._client.post(path`/agents/${agentId}/actions/${actionID}/reject`, { body, ...options }); + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface TransactionApproveResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: TransactionApproveResponse.TransferDetails; +} + +export namespace TransactionApproveResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +/** + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. + */ +export interface TransactionRejectResponse { + /** + * System-generated unique identifier for this action. + */ + id: string; + + /** + * The agent that submitted this action. + */ + agentId: string; + + /** + * When the action was submitted by the agent. + */ + createdAt: string; + + /** + * The customer on whose behalf the action was submitted. + */ + customerId: string; + + /** + * Platform-specific ID of the customer. + */ + platformCustomerId: string; + + /** + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + */ + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + + /** + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | + */ + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + + /** + * When the action was last updated. + */ + updatedAt: string; + + /** + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. + */ + quote?: QuotesAPI.Quote; + + /** + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. + */ + rejectionReason?: string; + + /** + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. + */ + transaction?: TransferInAPI.Transaction; + + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + transferDetails?: TransactionRejectResponse.TransferDetails; +} + +export namespace TransactionRejectResponse { + /** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ + export interface TransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; + } +} + +export interface TransactionApproveParams { + /** + * System-generated unique agent identifier + */ + agentId: string; +} + +export interface TransactionRejectParams { + /** + * Path param: System-generated unique agent identifier + */ + agentId: string; + + /** + * Body param: Optional human-readable reason for the rejection, stored on the + * action and visible to the platform. + */ + reason?: string; +} + +export declare namespace Transactions { + export { + type TransactionApproveResponse as TransactionApproveResponse, + type TransactionRejectResponse as TransactionRejectResponse, + type TransactionApproveParams as TransactionApproveParams, + type TransactionRejectParams as TransactionRejectParams, + }; +} diff --git a/tests/api-resources/agents/transactions.test.ts b/tests/api-resources/agents/transactions.test.ts new file mode 100644 index 0000000..b90dc95 --- /dev/null +++ b/tests/api-resources/agents/transactions.test.ts @@ -0,0 +1,48 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import LightsparkGrid from '@lightsparkdev/grid'; + +const client = new LightsparkGrid({ + username: 'My Username', + password: 'My Password', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource transactions', () => { + // Mock server tests are disabled + test.skip('approve: only required params', async () => { + const responsePromise = client.agents.transactions.approve('actionId', { agentId: 'agentId' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('approve: required and optional params', async () => { + const response = await client.agents.transactions.approve('actionId', { agentId: 'agentId' }); + }); + + // Mock server tests are disabled + test.skip('reject: only required params', async () => { + const responsePromise = client.agents.transactions.reject('actionId', { agentId: 'agentId' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('reject: required and optional params', async () => { + const response = await client.agents.transactions.reject('actionId', { + agentId: 'agentId', + reason: "Transaction amount exceeds customer's current risk limit.", + }); + }); +}); From b9a0cad025b82396a7a8286f09d36e0cee3c6bf9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 22:26:49 +0000 Subject: [PATCH 23/26] feat(api): manual updates --- .stats.yml | 4 +- api.md | 3 + packages/mcp-server/src/local-docs-search.ts | 50 +- src/client.ts | 5 + src/resources/agents/actions.ts | 59 +- src/resources/agents/agents.ts | 1322 +++--------------- src/resources/agents/device-codes.ts | 154 +- src/resources/agents/index.ts | 2 + src/resources/agents/me/actions.ts | 59 +- src/resources/agents/me/me.ts | 248 +--- src/resources/agents/me/quotes.ts | 30 +- src/resources/agents/transactions.ts | 59 +- src/resources/index.ts | 2 + src/resources/shared.ts | 25 + src/resources/webhooks.ts | 29 +- 15 files changed, 287 insertions(+), 1764 deletions(-) diff --git a/.stats.yml b/.stats.yml index 61b4573..cd43a2f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-30815dbaded9c6b919d0636b7893be1e3c0bbdba6c8d3065e50de7d5dff6a196.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-1e7b74129bd31dc7d1834845bbc0d7260563e1c06b05ba90e64d8f128bb56ccb.yml openapi_spec_hash: f65171ea46d9783aaacc520c498bce59 -config_hash: 078d0f235bd5d1ba3b0ebe10b6b9bfd6 +config_hash: 231ac27e9893a2263935613007e29b45 diff --git a/api.md b/api.md index 9c66665..0e09c2b 100644 --- a/api.md +++ b/api.md @@ -4,6 +4,7 @@ Types: - AedBeneficiary - AedExternalAccountCreateInfo +- AgentTransferDetails - BdtBeneficiary - BdtExternalAccountCreateInfo - BrlExternalAccountCreateInfo @@ -528,6 +529,8 @@ Methods: Types: +- AgentPolicy +- AgentUsage - AgentCreateResponse - AgentRetrieveResponse - AgentUpdateResponse diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 904b7c9..168c9e9 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -2597,9 +2597,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ "policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; };", ], response: - "{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }", + '{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }', markdown: - "## create\n\n`client.agents.create(customerId: string, name: string, policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }): { agent: object; deviceCode: object; }`\n\n**post** `/agents`\n\nCreate a new agent with a specified policy. Returns the created agent and a device code that must be redeemed by the agent software to complete installation.\n\n\n### Parameters\n\n- `customerId: string`\n The ID of the customer this agent will operate on behalf of.\n\n- `name: string`\n Human-readable name to identify the agent.\n\n- `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n Policy governing what an agent can do, how it executes actions, and its spending boundaries.\n - `defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n - `permissions: string[]`\n List of permissions granted to the agent.\n - `spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }`\n Spending limits that cap the agent's transaction amounts and frequency. All amount fields are integers in the smallest unit of the specified currency. When a transaction is denominated in a different currency, Grid converts using the exchange rate at evaluation time.\n - `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n\n### Returns\n\n- `{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }`\n Response returned when an agent is created, including the agent and a device code for installation.\n\n - `agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n - `deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n},\n});\n\nconsole.log(agent);\n```", + "## create\n\n`client.agents.create(customerId: string, name: string, policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }): { agent: object; deviceCode: object; }`\n\n**post** `/agents`\n\nCreate a new agent with a specified policy. Returns the created agent and a device code that must be redeemed by the agent software to complete installation.\n\n\n### Parameters\n\n- `customerId: string`\n The ID of the customer this agent will operate on behalf of.\n\n- `name: string`\n Human-readable name to identify the agent.\n\n- `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n Policy governing what an agent can do, how it executes actions, and its spending boundaries.\n - `defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n - `permissions: string[]`\n List of permissions granted to the agent.\n - `spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }`\n Spending limits that cap the agent's transaction amounts and frequency. All amount fields are integers in the smallest unit of the specified currency. When a transaction is denominated in a different currency, Grid converts using the exchange rate at evaluation time.\n - `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n\n### Returns\n\n- `{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }`\n Response returned when an agent is created, including the agent and a device code for installation.\n\n - `agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n - `deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n},\n});\n\nconsole.log(agent);\n```", perLanguage: { typescript: { method: 'client.agents.create', @@ -2614,7 +2614,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ kotlin: { method: 'agents().create', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentCreateParams\nimport com.lightspark.grid.models.agents.AgentCreateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: AgentCreateParams = AgentCreateParams.builder()\n .customerId("Customer:019542f5-b3e7-1d02-0000-000000000001")\n .name("Payroll Automation Agent")\n .policy(AgentCreateParams.Policy.builder()\n .defaultExecutionMode(AgentCreateParams.Policy.DefaultExecutionMode.AUTO)\n .addPermission(AgentCreateParams.Policy.Permission.VIEW_TRANSACTIONS)\n .spendingLimits(AgentCreateParams.Policy.SpendingLimits.builder()\n .currency("USD")\n .perTransactionLimit(50000L)\n .build())\n .build())\n .build()\n val agent: AgentCreateResponse = client.agents().create(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentCreateParams\nimport com.lightspark.grid.models.agents.AgentCreateResponse\nimport com.lightspark.grid.models.agents.AgentPolicy\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: AgentCreateParams = AgentCreateParams.builder()\n .customerId("Customer:019542f5-b3e7-1d02-0000-000000000001")\n .name("Payroll Automation Agent")\n .policy(AgentPolicy.builder()\n .defaultExecutionMode(AgentPolicy.DefaultExecutionMode.AUTO)\n .addPermission(AgentPolicy.Permission.VIEW_TRANSACTIONS)\n .spendingLimits(AgentPolicy.SpendingLimits.builder()\n .currency("USD")\n .perTransactionLimit(50000L)\n .build())\n .build())\n .build()\n val agent: AgentCreateResponse = client.agents().create(params)\n}', }, http: { example: @@ -2642,9 +2642,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'updatedBefore?: string;', ], response: - "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## list\n\n`client.agents.list(createdAfter?: string, createdBefore?: string, cursor?: string, customerId?: string, isConnected?: boolean, isPaused?: boolean, limit?: number, updatedAfter?: string, updatedBefore?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents`\n\nRetrieve a paginated list of agents for the authenticated platform.\n\n### Parameters\n\n- `createdAfter?: string`\n Filter agents created after this timestamp (inclusive)\n\n- `createdBefore?: string`\n Filter agents created before this timestamp (inclusive)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `isConnected?: boolean`\n Filter by connection status (whether the device code has been redeemed)\n\n- `isPaused?: boolean`\n Filter by paused status\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `updatedAfter?: string`\n Filter agents updated after this timestamp (inclusive)\n\n- `updatedBefore?: string`\n Filter agents updated before this timestamp (inclusive)\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListResponse of client.agents.list()) {\n console.log(agentListResponse);\n}\n```", + "## list\n\n`client.agents.list(createdAfter?: string, createdBefore?: string, cursor?: string, customerId?: string, isConnected?: boolean, isPaused?: boolean, limit?: number, updatedAfter?: string, updatedBefore?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**get** `/agents`\n\nRetrieve a paginated list of agents for the authenticated platform.\n\n### Parameters\n\n- `createdAfter?: string`\n Filter agents created after this timestamp (inclusive)\n\n- `createdBefore?: string`\n Filter agents created before this timestamp (inclusive)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `isConnected?: boolean`\n Filter by connection status (whether the device code has been redeemed)\n\n- `isPaused?: boolean`\n Filter by paused status\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `updatedAfter?: string`\n Filter agents updated after this timestamp (inclusive)\n\n- `updatedBefore?: string`\n Filter agents updated before this timestamp (inclusive)\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListResponse of client.agents.list()) {\n console.log(agentListResponse);\n}\n```", perLanguage: { typescript: { method: 'client.agents.list', @@ -2688,7 +2688,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## list_approvals\n\n`client.agents.listApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse);\n}\n```", + "## list_approvals\n\n`client.agents.listApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse);\n}\n```", perLanguage: { typescript: { method: 'client.agents.listApprovals', @@ -2721,9 +2721,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.agents.retrieve', params: ['agentId: string;'], response: - "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## retrieve\n\n`client.agents.retrieve(agentId: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/{agentId}`\n\nRetrieve an agent by its system-generated ID.\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.retrieve('agentId');\n\nconsole.log(agent);\n```", + "## retrieve\n\n`client.agents.retrieve(agentId: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**get** `/agents/{agentId}`\n\nRetrieve an agent by its system-generated ID.\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.retrieve('agentId');\n\nconsole.log(agent);\n```", perLanguage: { typescript: { method: 'client.agents.retrieve', @@ -2756,9 +2756,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.agents.update', params: ['agentId: string;', 'isPaused?: boolean;', 'name?: string;'], response: - "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## update\n\n`client.agents.update(agentId: string, isPaused?: boolean, name?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**patch** `/agents/{agentId}`\n\nUpdate an agent's name or paused state.\n\n### Parameters\n\n- `agentId: string`\n\n- `isPaused?: boolean`\n Set to true to pause the agent or false to resume it.\n\n- `name?: string`\n Updated name for the agent.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.update('agentId');\n\nconsole.log(agent);\n```", + "## update\n\n`client.agents.update(agentId: string, isPaused?: boolean, name?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**patch** `/agents/{agentId}`\n\nUpdate an agent's name or paused state.\n\n### Parameters\n\n- `agentId: string`\n\n- `isPaused?: boolean`\n Set to true to pause the agent or false to resume it.\n\n- `name?: string`\n Updated name for the agent.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.update('agentId');\n\nconsole.log(agent);\n```", perLanguage: { typescript: { method: 'client.agents.update', @@ -2832,9 +2832,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; };', ], response: - "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## update_policy\n\n`client.agents.updatePolicy(agentId: string, accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }, approvalThresholds?: { amount?: number; currency?: string; }, defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED', permissions?: string[], spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**patch** `/agents/{agentId}/policy`\n\nPartially update an agent's policy. Only provided fields will be updated; omitted fields retain their current values. Policy changes take effect immediately.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]`\n Per-account rules that override the agent's default policy for specific accounts.\n - `allowedAccountIds?: string[]`\n If set, restricts the agent to operate only on the specified internal account IDs. Null means the agent can access all accounts.\n\n- `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n - `amount?: number`\n If set, any transaction above this amount (in the smallest unit of the specified currency) will require explicit approval even when the agent's defaultExecutionMode is AUTO. Null means no threshold override.\n - `currency?: string`\n ISO 4217 currency code that the amount threshold is denominated in. Required when amount is set.\n\n- `defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n\n- `permissions?: string[]`\n Updated list of permissions. Replaces the entire permissions list when provided.\n\n- `spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }`\n Partial update to spending limits. Only provided fields will be updated; omitted fields retain their current values.\n - `currency?: string`\n ISO 4217 currency code that all amount limits are denominated in. Updating this recasts all existing limits into the new currency denomination.\n - `dailyLimit?: number`\n Maximum daily spend. Set to null to remove the daily limit.\n - `dailyTransactionLimit?: number`\n Maximum number of transactions per day.\n - `monthlyLimit?: number`\n Maximum monthly spend. Set to null to remove the monthly limit.\n - `perTransactionLimit?: number`\n Maximum amount per transaction.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.updatePolicy('agentId');\n\nconsole.log(response);\n```", + "## update_policy\n\n`client.agents.updatePolicy(agentId: string, accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }, approvalThresholds?: { amount?: number; currency?: string; }, defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED', permissions?: string[], spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**patch** `/agents/{agentId}/policy`\n\nPartially update an agent's policy. Only provided fields will be updated; omitted fields retain their current values. Policy changes take effect immediately.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]`\n Per-account rules that override the agent's default policy for specific accounts.\n - `allowedAccountIds?: string[]`\n If set, restricts the agent to operate only on the specified internal account IDs. Null means the agent can access all accounts.\n\n- `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n - `amount?: number`\n If set, any transaction above this amount (in the smallest unit of the specified currency) will require explicit approval even when the agent's defaultExecutionMode is AUTO. Null means no threshold override.\n - `currency?: string`\n ISO 4217 currency code that the amount threshold is denominated in. Required when amount is set.\n\n- `defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n\n- `permissions?: string[]`\n Updated list of permissions. Replaces the entire permissions list when provided.\n\n- `spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }`\n Partial update to spending limits. Only provided fields will be updated; omitted fields retain their current values.\n - `currency?: string`\n ISO 4217 currency code that all amount limits are denominated in. Updating this recasts all existing limits into the new currency denomination.\n - `dailyLimit?: number`\n Maximum daily spend. Set to null to remove the daily limit.\n - `dailyTransactionLimit?: number`\n Maximum number of transactions per day.\n - `monthlyLimit?: number`\n Maximum monthly spend. Set to null to remove the monthly limit.\n - `perTransactionLimit?: number`\n Maximum amount per transaction.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.updatePolicy('agentId');\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.updatePolicy', @@ -2867,9 +2867,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) agents.me > (method) retrieve', qualified: 'client.agents.me.retrieve', response: - "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", + "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## retrieve\n\n`client.agents.me.retrieve(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me);\n```", + "## retrieve\n\n`client.agents.me.retrieve(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me);\n```", perLanguage: { typescript: { method: 'client.agents.me.retrieve', @@ -2910,7 +2910,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.me.createTransferIn', @@ -2951,7 +2951,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.me.createTransferOut', @@ -3195,7 +3195,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## execute\n\n`client.agents.me.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/me/quotes/{quoteId}/execute`\n\nExecute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(response);\n```", + "## execute\n\n`client.agents.me.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/quotes/{quoteId}/execute`\n\nExecute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.me.quotes.execute', @@ -3383,7 +3383,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", + "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", perLanguage: { typescript: { method: 'client.agents.me.actions.list', @@ -3419,7 +3419,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", + "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", perLanguage: { typescript: { method: 'client.agents.me.actions.retrieve', @@ -3523,9 +3523,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.agents.deviceCodes.redeem', params: ['code: string;'], response: - "{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; }", + "{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; }", markdown: - "## redeem\n\n`client.agents.deviceCodes.redeem(code: string): { accessToken: string; agentId: string; agentName: string; policy: object; }`\n\n**post** `/agents/device-codes/{code}/redeem`\n\nRedeem a device code to obtain agent credentials. This endpoint is called by the agent software during installation. On success, returns a Bearer access token that the agent uses for all subsequent API calls. The token is returned only once and must be stored securely.\nThis endpoint does not require platform authentication — the device code itself serves as proof of authorization.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; }`\n\n - `accessToken: string`\n - `agentId: string`\n - `agentName: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(response);\n```", + "## redeem\n\n`client.agents.deviceCodes.redeem(code: string): { accessToken: string; agentId: string; agentName: string; policy: agent_policy; }`\n\n**post** `/agents/device-codes/{code}/redeem`\n\nRedeem a device code to obtain agent credentials. This endpoint is called by the agent software during installation. On success, returns a Bearer access token that the agent uses for all subsequent API calls. The token is returned only once and must be stored securely.\nThis endpoint does not require platform authentication — the device code itself serves as proof of authorization.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; }`\n\n - `accessToken: string`\n - `agentId: string`\n - `agentName: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.deviceCodes.redeem', @@ -3561,7 +3561,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## approve\n\n`client.agents.transactions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## approve\n\n`client.agents.transactions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.transactions.approve', @@ -3597,7 +3597,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## reject\n\n`client.agents.transactions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## reject\n\n`client.agents.transactions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.transactions.reject', @@ -3633,7 +3633,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## approve\n\n`client.agents.actions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## approve\n\n`client.agents.actions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.actions.approve', @@ -3669,7 +3669,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## reject\n\n`client.agents.actions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: object; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## reject\n\n`client.agents.actions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.agents.actions.reject', diff --git a/src/client.ts b/src/client.ts index 0cfa5cc..bc37d0c 100644 --- a/src/client.ts +++ b/src/client.ts @@ -159,11 +159,13 @@ import { AgentListParams, AgentListResponse, AgentListResponsesDefaultPagination, + AgentPolicy, AgentRetrieveResponse, AgentUpdateParams, AgentUpdatePolicyParams, AgentUpdatePolicyResponse, AgentUpdateResponse, + AgentUsage, Agents, } from './resources/agents/agents'; import { Auth } from './resources/auth/auth'; @@ -1313,6 +1315,8 @@ export declare namespace LightsparkGrid { export { Agents as Agents, + type AgentPolicy as AgentPolicy, + type AgentUsage as AgentUsage, type AgentCreateResponse as AgentCreateResponse, type AgentRetrieveResponse as AgentRetrieveResponse, type AgentUpdateResponse as AgentUpdateResponse, @@ -1330,6 +1334,7 @@ export declare namespace LightsparkGrid { export type AedBeneficiary = API.AedBeneficiary; export type AedExternalAccountCreateInfo = API.AedExternalAccountCreateInfo; + export type AgentTransferDetails = API.AgentTransferDetails; export type BdtBeneficiary = API.BdtBeneficiary; export type BdtExternalAccountCreateInfo = API.BdtExternalAccountCreateInfo; export type BrlExternalAccountCreateInfo = API.BrlExternalAccountCreateInfo; diff --git a/src/resources/agents/actions.ts b/src/resources/agents/actions.ts index 9682735..29c51f7 100644 --- a/src/resources/agents/actions.ts +++ b/src/resources/agents/actions.ts @@ -2,6 +2,7 @@ import { APIResource } from '../../core/resource'; import * as QuotesAPI from '../quotes'; +import * as Shared from '../shared'; import * as TransferInAPI from '../transfer-in'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; @@ -144,34 +145,7 @@ export interface ActionApproveResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: ActionApproveResponse.TransferDetails; -} - -export namespace ActionApproveResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } /** @@ -257,34 +231,7 @@ export interface ActionRejectResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: ActionRejectResponse.TransferDetails; -} - -export namespace ActionRejectResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } export interface ActionApproveParams { diff --git a/src/resources/agents/agents.ts b/src/resources/agents/agents.ts index 52eff5b..510248c 100644 --- a/src/resources/agents/agents.ts +++ b/src/resources/agents/agents.ts @@ -1,7 +1,9 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; +import * as AgentsAPI from './agents'; import * as QuotesAPI from '../quotes'; +import * as Shared from '../shared'; import * as TransferInAPI from '../transfer-in'; import * as ActionsAPI from './actions'; import { @@ -189,6 +191,184 @@ export type AgentListResponsesDefaultPagination = DefaultPagination; +/** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ +export interface AgentPolicy { + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * List of permissions granted to the agent. + */ + permissions: Array< + 'VIEW_TRANSACTIONS' | 'CREATE_TRANSFERS' | 'CREATE_QUOTES' | 'EXECUTE_QUOTES' | 'MANAGE_EXTERNAL_ACCOUNTS' + >; + + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + spendingLimits: AgentPolicy.SpendingLimits; + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + accountRestrictions?: AgentPolicy.AccountRestrictions; + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + approvalThresholds?: AgentPolicy.ApprovalThresholds; +} + +export namespace AgentPolicy { + /** + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. + */ + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } + + /** + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. + */ + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } + + /** + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. + */ + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } +} + +/** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ +export interface AgentUsage { + /** + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + dailySpend: number; + + /** + * Number of transactions initiated by the agent today. + */ + dailyTransactionCount: number; + + /** + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. + */ + monthlySpend: number; + + /** + * The date when daily usage counters will reset. + */ + dailyResetDate?: string; + + /** + * The year-month (YYYY-MM) when monthly usage counters will reset. + */ + monthlyResetMonth?: string; +} + /** * Response returned when an agent is created, including the agent and a device * code for installation. @@ -245,7 +425,7 @@ export namespace AgentCreateResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: Agent.Policy; + policy: AgentsAPI.AgentPolicy; /** * Last update timestamp. @@ -256,191 +436,7 @@ export namespace AgentCreateResponse { * Real-time counters tracking the agent's spending and transaction activity * against its policy limits. */ - usage: Agent.Usage; - } - - export namespace Agent { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - export interface Usage { - /** - * Total amount spent by the agent today, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - dailySpend: number; - - /** - * Number of transactions initiated by the agent today. - */ - dailyTransactionCount: number; - - /** - * Total amount spent by the agent this month, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - monthlySpend: number; - - /** - * The date when daily usage counters will reset. - */ - dailyResetDate?: string; - - /** - * The year-month (YYYY-MM) when monthly usage counters will reset. - */ - monthlyResetMonth?: string; - } + usage: AgentsAPI.AgentUsage; } export interface DeviceCode { @@ -507,7 +503,7 @@ export interface AgentRetrieveResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: AgentRetrieveResponse.Policy; + policy: AgentPolicy; /** * Last update timestamp. @@ -518,191 +514,7 @@ export interface AgentRetrieveResponse { * Real-time counters tracking the agent's spending and transaction activity * against its policy limits. */ - usage: AgentRetrieveResponse.Usage; -} - -export namespace AgentRetrieveResponse { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - export interface Usage { - /** - * Total amount spent by the agent today, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - dailySpend: number; - - /** - * Number of transactions initiated by the agent today. - */ - dailyTransactionCount: number; - - /** - * Total amount spent by the agent this month, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - monthlySpend: number; - - /** - * The date when daily usage counters will reset. - */ - dailyResetDate?: string; - - /** - * The year-month (YYYY-MM) when monthly usage counters will reset. - */ - monthlyResetMonth?: string; - } + usage: AgentUsage; } /** @@ -746,202 +558,18 @@ export interface AgentUpdateResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: AgentUpdateResponse.Policy; - - /** - * Last update timestamp. - */ - updatedAt: string; - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - usage: AgentUpdateResponse.Usage; -} - -export namespace AgentUpdateResponse { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - export interface Usage { - /** - * Total amount spent by the agent today, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - dailySpend: number; - - /** - * Number of transactions initiated by the agent today. - */ - dailyTransactionCount: number; - - /** - * Total amount spent by the agent this month, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - monthlySpend: number; - - /** - * The date when daily usage counters will reset. - */ - dailyResetDate?: string; + policy: AgentPolicy; - /** - * The year-month (YYYY-MM) when monthly usage counters will reset. - */ - monthlyResetMonth?: string; - } + /** + * Last update timestamp. + */ + updatedAt: string; + + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: AgentUsage; } /** @@ -985,7 +613,7 @@ export interface AgentListResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: AgentListResponse.Policy; + policy: AgentPolicy; /** * Last update timestamp. @@ -996,191 +624,7 @@ export interface AgentListResponse { * Real-time counters tracking the agent's spending and transaction activity * against its policy limits. */ - usage: AgentListResponse.Usage; -} - -export namespace AgentListResponse { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - export interface Usage { - /** - * Total amount spent by the agent today, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - dailySpend: number; - - /** - * Number of transactions initiated by the agent today. - */ - dailyTransactionCount: number; - - /** - * Total amount spent by the agent this month, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - monthlySpend: number; - - /** - * The date when daily usage counters will reset. - */ - dailyResetDate?: string; - - /** - * The year-month (YYYY-MM) when monthly usage counters will reset. - */ - monthlyResetMonth?: string; - } + usage: AgentUsage; } /** @@ -1266,34 +710,7 @@ export interface AgentListApprovalsResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: AgentListApprovalsResponse.TransferDetails; -} - -export namespace AgentListApprovalsResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } /** @@ -1337,7 +754,7 @@ export interface AgentUpdatePolicyResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: AgentUpdatePolicyResponse.Policy; + policy: AgentPolicy; /** * Last update timestamp. @@ -1348,191 +765,7 @@ export interface AgentUpdatePolicyResponse { * Real-time counters tracking the agent's spending and transaction activity * against its policy limits. */ - usage: AgentUpdatePolicyResponse.Usage; -} - -export namespace AgentUpdatePolicyResponse { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - export interface Usage { - /** - * Total amount spent by the agent today, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - dailySpend: number; - - /** - * Number of transactions initiated by the agent today. - */ - dailyTransactionCount: number; - - /** - * Total amount spent by the agent this month, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - monthlySpend: number; - - /** - * The date when daily usage counters will reset. - */ - dailyResetDate?: string; - - /** - * The year-month (YYYY-MM) when monthly usage counters will reset. - */ - monthlyResetMonth?: string; - } + usage: AgentUsage; } export interface AgentCreateParams { @@ -1550,158 +783,7 @@ export interface AgentCreateParams { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: AgentCreateParams.Policy; -} - -export namespace AgentCreateParams { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } + policy: AgentPolicy; } export interface AgentUpdateParams { @@ -1934,6 +1016,8 @@ Agents.Actions = Actions; export declare namespace Agents { export { + type AgentPolicy as AgentPolicy, + type AgentUsage as AgentUsage, type AgentCreateResponse as AgentCreateResponse, type AgentRetrieveResponse as AgentRetrieveResponse, type AgentUpdateResponse as AgentUpdateResponse, diff --git a/src/resources/agents/device-codes.ts b/src/resources/agents/device-codes.ts index 8b65cae..d789aff 100644 --- a/src/resources/agents/device-codes.ts +++ b/src/resources/agents/device-codes.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; +import * as AgentsAPI from './agents'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; @@ -94,158 +95,7 @@ export interface DeviceCodeRedeemResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: DeviceCodeRedeemResponse.Policy; -} - -export namespace DeviceCodeRedeemResponse { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } + policy: AgentsAPI.AgentPolicy; } export interface DeviceCodeRegenerateResponse { diff --git a/src/resources/agents/index.ts b/src/resources/agents/index.ts index b2c9b3c..0ba1390 100644 --- a/src/resources/agents/index.ts +++ b/src/resources/agents/index.ts @@ -9,6 +9,8 @@ export { } from './actions'; export { Agents, + type AgentPolicy, + type AgentUsage, type AgentCreateResponse, type AgentRetrieveResponse, type AgentUpdateResponse, diff --git a/src/resources/agents/me/actions.ts b/src/resources/agents/me/actions.ts index 5665c9a..a82572b 100644 --- a/src/resources/agents/me/actions.ts +++ b/src/resources/agents/me/actions.ts @@ -2,6 +2,7 @@ import { APIResource } from '../../../core/resource'; import * as QuotesAPI from '../../quotes'; +import * as Shared from '../../shared'; import * as TransferInAPI from '../../transfer-in'; import { APIPromise } from '../../../core/api-promise'; import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; @@ -137,34 +138,7 @@ export interface ActionRetrieveResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: ActionRetrieveResponse.TransferDetails; -} - -export namespace ActionRetrieveResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } /** @@ -250,34 +224,7 @@ export interface ActionListResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: ActionListResponse.TransferDetails; -} - -export namespace ActionListResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } export interface ActionListParams extends DefaultPaginationParams { diff --git a/src/resources/agents/me/me.ts b/src/resources/agents/me/me.ts index e319eb1..f5cfd16 100644 --- a/src/resources/agents/me/me.ts +++ b/src/resources/agents/me/me.ts @@ -2,7 +2,9 @@ import { APIResource } from '../../../core/resource'; import * as QuotesAPI from '../../quotes'; +import * as Shared from '../../shared'; import * as TransferInAPI from '../../transfer-in'; +import * as AgentsAPI from '../agents'; import * as InternalAccountsAPI from '../../sandbox/internal-accounts'; import { InternalAccountsDefaultPagination } from '../../sandbox/internal-accounts'; import * as ActionsAPI from './actions'; @@ -195,7 +197,7 @@ export interface MeRetrieveResponse { * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ - policy: MeRetrieveResponse.Policy; + policy: AgentsAPI.AgentPolicy; /** * Last update timestamp. @@ -206,191 +208,7 @@ export interface MeRetrieveResponse { * Real-time counters tracking the agent's spending and transaction activity * against its policy limits. */ - usage: MeRetrieveResponse.Usage; -} - -export namespace MeRetrieveResponse { - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - export interface Policy { - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * List of permissions granted to the agent. - */ - permissions: Array< - | 'VIEW_TRANSACTIONS' - | 'CREATE_TRANSFERS' - | 'CREATE_QUOTES' - | 'EXECUTE_QUOTES' - | 'MANAGE_EXTERNAL_ACCOUNTS' - >; - - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - spendingLimits: Policy.SpendingLimits; - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - accountRestrictions?: Policy.AccountRestrictions; - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - approvalThresholds?: Policy.ApprovalThresholds; - } - - export namespace Policy { - /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. - */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } - - /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. - */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } - - /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. - */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; - - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } - } - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - export interface Usage { - /** - * Total amount spent by the agent today, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - dailySpend: number; - - /** - * Number of transactions initiated by the agent today. - */ - dailyTransactionCount: number; - - /** - * Total amount spent by the agent this month, in the smallest unit of the policy's - * `spendingLimits.currency`. - */ - monthlySpend: number; - - /** - * The date when daily usage counters will reset. - */ - dailyResetDate?: string; - - /** - * The year-month (YYYY-MM) when monthly usage counters will reset. - */ - monthlyResetMonth?: string; - } + usage: AgentsAPI.AgentUsage; } /** @@ -476,34 +294,7 @@ export interface MeCreateTransferInResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: MeCreateTransferInResponse.TransferDetails; -} - -export namespace MeCreateTransferInResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } /** @@ -589,34 +380,7 @@ export interface MeCreateTransferOutResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: MeCreateTransferOutResponse.TransferDetails; -} - -export namespace MeCreateTransferOutResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } export interface MeCreateTransferInParams { diff --git a/src/resources/agents/me/quotes.ts b/src/resources/agents/me/quotes.ts index 6ea4ea6..687dfe2 100644 --- a/src/resources/agents/me/quotes.ts +++ b/src/resources/agents/me/quotes.ts @@ -2,6 +2,7 @@ import { APIResource } from '../../../core/resource'; import * as QuotesAPI from '../../quotes'; +import * as Shared from '../../shared'; import * as TransferInAPI from '../../transfer-in'; import { APIPromise } from '../../../core/api-promise'; import { buildHeaders } from '../../../internal/headers'; @@ -182,34 +183,7 @@ export interface QuoteExecuteResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: QuoteExecuteResponse.TransferDetails; -} - -export namespace QuoteExecuteResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } export interface QuoteCreateParams { diff --git a/src/resources/agents/transactions.ts b/src/resources/agents/transactions.ts index c0b9709..36cd5a2 100644 --- a/src/resources/agents/transactions.ts +++ b/src/resources/agents/transactions.ts @@ -2,6 +2,7 @@ import { APIResource } from '../../core/resource'; import * as QuotesAPI from '../quotes'; +import * as Shared from '../shared'; import * as TransferInAPI from '../transfer-in'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; @@ -144,34 +145,7 @@ export interface TransactionApproveResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: TransactionApproveResponse.TransferDetails; -} - -export namespace TransactionApproveResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } /** @@ -257,34 +231,7 @@ export interface TransactionRejectResponse { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: TransactionRejectResponse.TransferDetails; -} - -export namespace TransactionRejectResponse { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } export interface TransactionApproveParams { diff --git a/src/resources/index.ts b/src/resources/index.ts index 78c756c..55f79f8 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -3,6 +3,8 @@ export * from './shared'; export { Agents, + type AgentPolicy, + type AgentUsage, type AgentCreateResponse, type AgentRetrieveResponse, type AgentUpdateResponse, diff --git a/src/resources/shared.ts b/src/resources/shared.ts index 47a6397..519a796 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -54,6 +54,31 @@ export interface AedExternalAccountCreateInfo { swiftCode?: string; } +/** + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + */ +export interface AgentTransferDetails { + /** + * Transfer amount in the smallest unit of the specified currency. + */ + amount: number; + + /** + * ISO 4217 currency code for the transfer amount. + */ + currency: string; + + /** + * ID of the destination account (internal or external). + */ + destinationAccountId: string; + + /** + * ID of the source account (internal or external). + */ + sourceAccountId: string; +} + export interface BdtBeneficiary { beneficiaryType: 'INDIVIDUAL'; diff --git a/src/resources/webhooks.ts b/src/resources/webhooks.ts index 74943b2..e37d394 100644 --- a/src/resources/webhooks.ts +++ b/src/resources/webhooks.ts @@ -151,34 +151,7 @@ export namespace AgentActionWebhookEvent { /** * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - transferDetails?: Data.TransferDetails; - } - - export namespace Data { - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - export interface TransferDetails { - /** - * Transfer amount in the smallest unit of the specified currency. - */ - amount: number; - - /** - * ISO 4217 currency code for the transfer amount. - */ - currency: string; - - /** - * ID of the destination account (internal or external). - */ - destinationAccountId: string; - - /** - * ID of the source account (internal or external). - */ - sourceAccountId: string; - } + transferDetails?: Shared.AgentTransferDetails; } } From 75b2ad9ec64aa6496c6f2e158a371c67339d0ddf Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 00:15:03 +0000 Subject: [PATCH 24/26] feat(api): manual updates --- .stats.yml | 4 +- api.md | 149 ++- packages/mcp-server/src/code-tool-worker.ts | 8 +- packages/mcp-server/src/local-docs-search.ts | 329 ++++--- packages/mcp-server/src/methods.ts | 32 +- scripts/detect-breaking-changes | 1 - src/client.ts | 60 +- src/resources/agents/actions.ts | 191 +--- src/resources/agents/agents.ts | 764 ++++++--------- src/resources/agents/device-codes.ts | 88 +- src/resources/agents/index.ts | 47 +- src/resources/agents/me/actions.ts | 198 +--- src/resources/agents/me/index.ts | 13 +- src/resources/agents/me/me.ts | 308 +----- src/resources/agents/me/quotes.ts | 99 +- src/resources/agents/transactions.ts | 192 +--- src/resources/auth/auth.ts | 79 +- src/resources/auth/credentials.ts | 901 ++++++++++-------- src/resources/auth/index.ts | 37 +- src/resources/auth/sessions.ts | 102 +- src/resources/customers/customers.ts | 125 +++ src/resources/customers/index.ts | 3 + src/resources/index.ts | 29 +- src/resources/internal-accounts.ts | 125 --- src/resources/platform/external-accounts.ts | 48 +- src/resources/platform/index.ts | 1 - src/resources/platform/platform.ts | 2 - src/resources/webhooks.ts | 93 +- tests/api-resources/auth/credentials.test.ts | 26 +- tests/api-resources/auth/sessions.test.ts | 8 +- .../api-resources/customers/customers.test.ts | 26 + tests/api-resources/internal-accounts.test.ts | 37 - 32 files changed, 1507 insertions(+), 2618 deletions(-) delete mode 100644 src/resources/internal-accounts.ts delete mode 100644 tests/api-resources/internal-accounts.test.ts diff --git a/.stats.yml b/.stats.yml index cd43a2f..0881325 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-1e7b74129bd31dc7d1834845bbc0d7260563e1c06b05ba90e64d8f128bb56ccb.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-4fda2dd2f952bfa73c144904c9d3d4ddc81080335ebd7fdffc6bad2ec3945c6f.yml openapi_spec_hash: f65171ea46d9783aaacc520c498bce59 -config_hash: 231ac27e9893a2263935613007e29b45 +config_hash: 2517fff6fa90dcb6123dd494c7f840b8 diff --git a/api.md b/api.md index 0e09c2b..26328f4 100644 --- a/api.md +++ b/api.md @@ -89,6 +89,8 @@ Types: - CustomerType - CustomerUpdate - IndividualCustomerFields +- InternalAccountExportRequest +- InternalAccountExportResponse - CustomerGetKYCLinkResponse Methods: @@ -98,6 +100,7 @@ Methods: - client.customers.update(customerID, { ...params }) -> CustomerOneOf - client.customers.list({ ...params }) -> CustomerOneovesDefaultPagination - client.customers.delete(customerID) -> CustomerOneOf +- client.customers.export(id, { ...params }) -> InternalAccountExportResponse - client.customers.getKYCLink({ ...params }) -> CustomerGetKYCLinkResponse - client.customers.listInternalAccounts({ ...params }) -> InternalAccountsDefaultPagination @@ -234,13 +237,12 @@ Types: - XofAccountInfo - ZarAccountInfo - ZmwAccountInfo -- ExternalAccountListResponse Methods: - client.platform.externalAccounts.create({ ...params }) -> ExternalAccount - client.platform.externalAccounts.retrieve(externalAccountID) -> ExternalAccount -- client.platform.externalAccounts.list({ ...params }) -> ExternalAccountListResponse +- client.platform.externalAccounts.list({ ...params }) -> ExternalAccountsDefaultPagination - client.platform.externalAccounts.delete(externalAccountID) -> void # TransferIn @@ -489,78 +491,88 @@ Methods: Types: +- AuthCredentialCreateRequest +- AuthCredentialCreateRequestOneOf +- AuthCredentialListResponse +- AuthCredentialResponseOneOf +- AuthCredentialVerifyRequest +- AuthCredentialVerifyRequestOneOf - AuthMethod -- CredentialListResponse -- CredentialResendChallengeResponse -- CredentialRevokeResponse -- CredentialVerifyResponse - -Methods: - -- client.auth.credentials.create({ ...params }) -> AuthMethod -- client.auth.credentials.list({ ...params }) -> CredentialListResponse -- client.auth.credentials.resendChallenge(id, { ...params }) -> CredentialResendChallengeResponse -- client.auth.credentials.revoke(id, { ...params }) -> CredentialRevokeResponse -- client.auth.credentials.verify(id, { ...params }) -> CredentialVerifyResponse +- AuthMethodResponse +- AuthMethodType +- AuthSession +- AuthSignedRequestChallenge +- EmailOtpCredentialCreateRequest +- EmailOtpCredentialCreateRequestFields +- EmailOtpCredentialVerifyRequest +- EmailOtpCredentialVerifyRequestFields +- OAuthCredentialCreateRequest +- OAuthCredentialCreateRequestFields +- OAuthCredentialVerifyRequest +- OAuthCredentialVerifyRequestFields +- PasskeyAssertion +- PasskeyAttestation +- PasskeyAuthChallenge +- PasskeyCredentialCreateRequest +- PasskeyCredentialCreateRequestFields +- PasskeyCredentialVerifyRequest +- PasskeyCredentialVerifyRequestFields +- SignedRequestChallenge + +Methods: + +- client.auth.credentials.create({ ...params }) -> AuthMethodResponse +- client.auth.credentials.list({ ...params }) -> AuthCredentialListResponse +- client.auth.credentials.delete(id, { ...params }) -> AuthSignedRequestChallenge +- client.auth.credentials.challenge(id, { ...params }) -> AuthCredentialResponseOneOf +- client.auth.credentials.verify(id, { ...params }) -> AuthSession ## Sessions Types: - SessionListResponse -- SessionRevokeResponse Methods: - client.auth.sessions.list({ ...params }) -> SessionListResponse -- client.auth.sessions.revoke(id, { ...params }) -> SessionRevokeResponse - -# InternalAccounts - -Types: - -- InternalAccountExportResponse - -Methods: - -- client.internalAccounts.export(id, { ...params }) -> InternalAccountExportResponse +- client.auth.sessions.delete(id, { ...params }) -> AuthSignedRequestChallenge # Agents Types: -- AgentPolicy -- AgentUsage +- Agent +- AgentAction +- AgentActionListResponse +- AgentActionRejectRequest +- AgentCreateRequest - AgentCreateResponse -- AgentRetrieveResponse -- AgentUpdateResponse +- AgentDeviceCode +- AgentDeviceCodeRedeemResponse +- AgentDeviceCodeStatusResponse - AgentListResponse -- AgentListApprovalsResponse -- AgentUpdatePolicyResponse +- AgentPolicy +- AgentUpdateRequest +- AgentUsage Methods: - client.agents.create({ ...params }) -> AgentCreateResponse -- client.agents.retrieve(agentID) -> AgentRetrieveResponse -- client.agents.update(agentID, { ...params }) -> AgentUpdateResponse -- client.agents.list({ ...params }) -> AgentListResponsesDefaultPagination +- client.agents.retrieve(agentID) -> Agent +- client.agents.update(agentID, { ...params }) -> Agent +- client.agents.list({ ...params }) -> AgentsDefaultPagination - client.agents.delete(agentID) -> void -- client.agents.listApprovals({ ...params }) -> AgentListApprovalsResponsesDefaultPagination -- client.agents.updatePolicy(agentID, { ...params }) -> AgentUpdatePolicyResponse +- client.agents.listApprovals({ ...params }) -> AgentActionsDefaultPagination +- client.agents.updatePolicy(agentID, { ...params }) -> Agent ## Me -Types: - -- MeRetrieveResponse -- MeCreateTransferInResponse -- MeCreateTransferOutResponse - Methods: -- client.agents.me.retrieve() -> MeRetrieveResponse -- client.agents.me.createTransferIn({ ...params }) -> MeCreateTransferInResponse -- client.agents.me.createTransferOut({ ...params }) -> MeCreateTransferOutResponse +- client.agents.me.retrieve() -> Agent +- client.agents.me.createTransferIn({ ...params }) -> AgentAction +- client.agents.me.createTransferOut({ ...params }) -> AgentAction - client.agents.me.listInternalAccounts({ ...params }) -> InternalAccountsDefaultPagination ### Transactions @@ -572,15 +584,11 @@ Methods: ### Quotes -Types: - -- QuoteExecuteResponse - Methods: - client.agents.me.quotes.create({ ...params }) -> Quote - client.agents.me.quotes.retrieve(quoteID) -> Quote -- client.agents.me.quotes.execute(quoteID, { ...params }) -> QuoteExecuteResponse +- client.agents.me.quotes.execute(quoteID, { ...params }) -> AgentAction ### ExternalAccounts @@ -593,50 +601,29 @@ Methods: ### Actions -Types: - -- ActionRetrieveResponse -- ActionListResponse - Methods: -- client.agents.me.actions.retrieve(actionID) -> ActionRetrieveResponse -- client.agents.me.actions.list({ ...params }) -> ActionListResponsesDefaultPagination +- client.agents.me.actions.retrieve(actionID) -> AgentAction +- client.agents.me.actions.list({ ...params }) -> AgentActionsDefaultPagination ## DeviceCodes -Types: - -- DeviceCodeGetStatusResponse -- DeviceCodeRedeemResponse -- DeviceCodeRegenerateResponse - Methods: -- client.agents.deviceCodes.getStatus(code) -> DeviceCodeGetStatusResponse -- client.agents.deviceCodes.redeem(code) -> DeviceCodeRedeemResponse -- client.agents.deviceCodes.regenerate(agentID) -> DeviceCodeRegenerateResponse +- client.agents.deviceCodes.getStatus(code) -> AgentDeviceCodeStatusResponse +- client.agents.deviceCodes.redeem(code) -> AgentDeviceCodeRedeemResponse +- client.agents.deviceCodes.regenerate(agentID) -> AgentDeviceCode ## Transactions -Types: - -- TransactionApproveResponse -- TransactionRejectResponse - Methods: -- client.agents.transactions.approve(actionID, { ...params }) -> TransactionApproveResponse -- client.agents.transactions.reject(actionID, { ...params }) -> TransactionRejectResponse +- client.agents.transactions.approve(actionID, { ...params }) -> AgentAction +- client.agents.transactions.reject(actionID, { ...params }) -> AgentAction ## Actions -Types: - -- ActionApproveResponse -- ActionRejectResponse - Methods: -- client.agents.actions.approve(actionID, { ...params }) -> ActionApproveResponse -- client.agents.actions.reject(actionID, { ...params }) -> ActionRejectResponse +- client.agents.actions.approve(actionID, { ...params }) -> AgentAction +- client.agents.actions.reject(actionID, { ...params }) -> AgentAction diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts index 93d5de5..e118cd3 100644 --- a/packages/mcp-server/src/code-tool-worker.ts +++ b/packages/mcp-server/src/code-tool-worker.ts @@ -112,6 +112,7 @@ const fuse = new Fuse( 'client.config.update', 'client.customers.create', 'client.customers.delete', + 'client.customers.export', 'client.customers.getKYCLink', 'client.customers.list', 'client.customers.listInternalAccounts', @@ -168,14 +169,13 @@ const fuse = new Fuse( 'client.verifications.retrieve', 'client.verifications.submit', 'client.discoveries.list', + 'client.auth.credentials.challenge', 'client.auth.credentials.create', + 'client.auth.credentials.delete', 'client.auth.credentials.list', - 'client.auth.credentials.resendChallenge', - 'client.auth.credentials.revoke', 'client.auth.credentials.verify', + 'client.auth.sessions.delete', 'client.auth.sessions.list', - 'client.auth.sessions.revoke', - 'client.internalAccounts.export', 'client.agents.create', 'client.agents.delete', 'client.agents.list', diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 168c9e9..2d9242e 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -394,6 +394,46 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, }, + { + name: 'export', + endpoint: '/internal-accounts/{id}/export', + httpMethod: 'post', + summary: 'Export internal account wallet credentials', + description: + 'Export the wallet credentials of an Embedded Wallet internal account. The returned wallet credentials are HPKE-encrypted to the `clientPublicKey` supplied in the request body.\n\nExport is a two-step signed-retry flow (same pattern as add-additional credential, revoke credential, and revoke session):\n\n1. Call `POST /internal-accounts/{id}/export` with the request body `{ "clientPublicKey": "..." }` and no signature headers. Grid binds the `clientPublicKey` into the `payloadToSign` it returns, so the subsequent stamp in `Grid-Wallet-Signature` commits to the target encryption key. The response is `202` with `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of a verified authentication credential on the same internal account to build an API-key stamp over `payloadToSign`, then retry with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The retry body must carry the **same** `clientPublicKey` submitted in step 1 — Grid rejects the retry with `401` if it disagrees with what was bound into `payloadToSign`. The signed retry returns `200` with `encryptedWalletCredentials`, which the client decrypts with the matching private key.\n\nThe `clientPublicKey` is ephemeral: generate a fresh P-256 keypair for this export and discard the private key after decrypting. Do not reuse the keypair from any prior verify call — that private key was already discarded after decrypting the session signing key it was issued against.\n', + stainlessPath: '(resource) customers > (method) export', + qualified: 'client.customers.export', + params: [ + 'id: string;', + 'clientPublicKey: string;', + 'Grid-Wallet-Signature?: string;', + 'Request-Id?: string;', + ], + response: '{ id: string; encryptedWalletCredentials: string; }', + markdown: + "## export\n\n`client.customers.export(id: string, clientPublicKey: string, Grid-Wallet-Signature?: string, Request-Id?: string): { id: string; encryptedWalletCredentials: string; }`\n\n**post** `/internal-accounts/{id}/export`\n\nExport the wallet credentials of an Embedded Wallet internal account. The returned wallet credentials are HPKE-encrypted to the `clientPublicKey` supplied in the request body.\n\nExport is a two-step signed-retry flow (same pattern as add-additional credential, revoke credential, and revoke session):\n\n1. Call `POST /internal-accounts/{id}/export` with the request body `{ \"clientPublicKey\": \"...\" }` and no signature headers. Grid binds the `clientPublicKey` into the `payloadToSign` it returns, so the subsequent stamp in `Grid-Wallet-Signature` commits to the target encryption key. The response is `202` with `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of a verified authentication credential on the same internal account to build an API-key stamp over `payloadToSign`, then retry with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The retry body must carry the **same** `clientPublicKey` submitted in step 1 — Grid rejects the retry with `401` if it disagrees with what was bound into `payloadToSign`. The signed retry returns `200` with `encryptedWalletCredentials`, which the client decrypts with the matching private key.\n\nThe `clientPublicKey` is ephemeral: generate a fresh P-256 keypair for this export and discard the private key after decrypting. Do not reuse the keypair from any prior verify call — that private key was already discarded after decrypting the session signing key it was issued against.\n\n\n### Parameters\n\n- `id: string`\n\n- `clientPublicKey: string`\n Fresh P-256 public key, uncompressed SEC1 hex — 130 hex chars where the first two are `04` (the uncompressed-point indicator). Generate a new keypair for each export and discard the private key after decrypting the response.\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; encryptedWalletCredentials: string; }`\n\n - `id: string`\n - `encryptedWalletCredentials: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst internalAccountExportResponse = await client.customers.export('id', { clientPublicKey: '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2' });\n\nconsole.log(internalAccountExportResponse);\n```", + perLanguage: { + typescript: { + method: 'client.customers.export', + example: + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst internalAccountExportResponse = await client.customers.export('id', {\n clientPublicKey:\n '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n});\n\nconsole.log(internalAccountExportResponse.id);", + }, + python: { + method: 'customers.export', + example: + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\ninternal_account_export_response = client.customers.export(\n id="id",\n client_public_key="04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n)\nprint(internal_account_export_response.id)', + }, + kotlin: { + method: 'customers().export', + example: + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.customers.CustomerExportParams\nimport com.lightspark.grid.models.customers.InternalAccountExportRequest\nimport com.lightspark.grid.models.customers.InternalAccountExportResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CustomerExportParams = CustomerExportParams.builder()\n .id("id")\n .internalAccountExportRequest(InternalAccountExportRequest.builder()\n .clientPublicKey("04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2")\n .build())\n .build()\n val internalAccountExportResponse: InternalAccountExportResponse = client.customers().export(params)\n}', + }, + http: { + example: + 'curl https://api.lightspark.com/grid/2025-10-13/internal-accounts/$ID/export \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "clientPublicKey": "04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2"\n }\'', + }, + }, + }, { name: 'list', endpoint: '/customers/external-accounts', @@ -657,24 +697,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.platform.externalAccounts.list', params: ['currency?: string;', 'cursor?: string;', 'limit?: number;'], response: - "{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }", + "{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }", markdown: - "## list\n\n`client.platform.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { data: external_account[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n**get** `/platform/external-accounts`\n\nRetrieve a list of all external accounts that belong to the platform, as opposed to an individual customer.\n\nThese accounts are used for platform-wide operations such as receiving funds from external sources or managing platform-level payment destinations.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ data: { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]; hasMore: boolean; nextCursor?: string; totalCount?: number; }`\n\n - `data: { id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }[]`\n - `hasMore: boolean`\n - `nextCursor?: string`\n - `totalCount?: number`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst externalAccounts = await client.platform.externalAccounts.list();\n\nconsole.log(externalAccounts);\n```", + "## list\n\n`client.platform.externalAccounts.list(currency?: string, cursor?: string, limit?: number): { id: string; accountInfo: external_account_info_one_of; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: beneficiary_verified_data; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n**get** `/platform/external-accounts`\n\nRetrieve a list of all external accounts that belong to the platform, as opposed to an individual customer.\n\nThese accounts are used for platform-wide operations such as receiving funds from external sources or managing platform-level payment destinations.\n\n\n### Parameters\n\n- `currency?: string`\n Filter by currency code\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n### Returns\n\n- `{ id: string; accountInfo: brl_account_info | cad_account_info | dkk_account_info | eur_account_info | gbp_account_info | hkd_account_info | idr_account_info | inr_account_info | kes_account_info | mwk_account_info | mxn_account_info | myr_account_info | ngn_account_info | php_account_info | rwf_account_info | sgd_account_info | thb_account_info | tzs_account_info | ugx_account_info | usd_account_info | vnd_account_info | xof_account_info | zar_account_info | zmw_account_info | object | object | object | object | object | object | object | aed_account_info | bwp_account_info | xaf_account_info | bdt_account_info | cop_account_info | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info; currency: string; status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'; beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'; beneficiaryVerifiedData?: { fullName?: string; }; customerId?: string; defaultUmaDepositAccount?: boolean; platformAccountId?: string; }`\n\n - `id: string`\n - `accountInfo: { accountType: 'BRL_ACCOUNT'; paymentRails: 'PIX'[]; pixKey: string; pixKeyType: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM'; taxId: string; } | { accountNumber: string; accountType: 'CAD_ACCOUNT'; bankCode: string; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'DKK_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountType: 'EUR_ACCOUNT'; iban: string; paymentRails: 'SEPA' | 'SEPA_INSTANT'[]; swiftCode?: string; } | { accountNumber: string; accountType: 'GBP_ACCOUNT'; paymentRails: 'FASTER_PAYMENTS'[]; sortCode: string; } | { accountNumber: string; accountType: 'HKD_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'IDR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; phoneNumber: string; swiftCode: string; } | { accountType: 'INR_ACCOUNT'; paymentRails: 'UPI'[]; vpa: string; } | { accountType: 'KES_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MWK_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'MXN_ACCOUNT'; clabeNumber: string; paymentRails: 'SPEI'[]; } | { accountNumber: string; accountType: 'MYR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'NGN_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'PHP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'RWF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'SGD_ACCOUNT'; bankName: string; paymentRails: 'PAYNOW' | 'FAST' | 'BANK_TRANSFER'[]; swiftCode: string; } | { accountNumber: string; accountType: 'THB_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'TZS_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'UGX_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountNumber: string; accountType: 'USD_ACCOUNT'; paymentRails: 'ACH' | 'WIRE' | 'RTP' | 'FEDNOW'[]; routingNumber: string; } | { accountNumber: string; accountType: 'VND_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode: string; } | { accountType: 'XOF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'BJ' | 'CI' | 'SN' | 'TG'; } | { accountNumber: string; accountType: 'ZAR_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'ZMW_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'SPARK_WALLET'; address: string; } | { accountType: 'LIGHTNING'; bolt12?: string; invoice?: string; lightningAddress?: string; } | { accountType: 'SOLANA_WALLET'; address: string; } | { accountType: 'TRON_WALLET'; address: string; } | { accountType: 'POLYGON_WALLET'; address: string; } | { accountType: 'BASE_WALLET'; address: string; } | { accountType: 'ETHEREUM_WALLET'; address: string; } | { accountType: 'AED_ACCOUNT'; iban: string; paymentRails: 'BANK_TRANSFER'[]; swiftCode?: string; } | { accountType: 'BWP_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; } | { accountType: 'XAF_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; provider: string; region: 'CM' | 'CG'; } | { accountType: 'BDT_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; branchCode?: string; phoneNumber?: string; swiftCode?: string; } | { accountNumber: string; accountType: 'COP_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountNumber: string; accountType: 'EGP_ACCOUNT'; bankName: string; paymentRails: 'BANK_TRANSFER'[]; iban?: string; swiftCode?: string; } | { accountType: 'GHS_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; phoneNumber?: string; } | { accountNumber: string; accountType: 'GTQ_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'HTG_ACCOUNT'; paymentRails: 'MOBILE_MONEY'[]; phoneNumber: string; } | { accountNumber: string; accountType: 'JMD_ACCOUNT'; bankAccountType: 'CHECKING' | 'SAVINGS'; branchCode: string; paymentRails: 'BANK_TRANSFER'[]; } | { accountType: 'PKR_ACCOUNT'; paymentRails: 'BANK_TRANSFER' | 'MOBILE_MONEY'[]; accountNumber?: string; bankName?: string; iban?: string; phoneNumber?: string; }`\n - `currency: string`\n - `status: 'PENDING' | 'ACTIVE' | 'UNDER_REVIEW' | 'INACTIVE'`\n - `beneficiaryVerificationStatus?: 'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'`\n - `beneficiaryVerifiedData?: { fullName?: string; }`\n - `customerId?: string`\n - `defaultUmaDepositAccount?: boolean`\n - `platformAccountId?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.platform.externalAccounts.list()) {\n console.log(externalAccount);\n}\n```", perLanguage: { typescript: { method: 'client.platform.externalAccounts.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst externalAccounts = await client.platform.externalAccounts.list();\n\nconsole.log(externalAccounts.data);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const externalAccount of client.platform.externalAccounts.list()) {\n console.log(externalAccount.id);\n}", }, python: { method: 'platform.external_accounts.list', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nexternal_accounts = client.platform.external_accounts.list()\nprint(external_accounts.data)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\npage = client.platform.external_accounts.list()\npage = page.data[0]\nprint(page.id)', }, kotlin: { method: 'platform().externalAccounts().list', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.platform.externalaccounts.ExternalAccountListParams\nimport com.lightspark.grid.models.platform.externalaccounts.ExternalAccountListResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val externalAccounts: ExternalAccountListResponse = client.platform().externalAccounts().list()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.platform.externalaccounts.ExternalAccountListPage\nimport com.lightspark.grid.models.platform.externalaccounts.ExternalAccountListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val page: ExternalAccountListPage = client.platform().externalAccounts().list()\n}', }, http: { example: @@ -2292,29 +2332,29 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) auth.credentials > (method) create', qualified: 'client.auth.credentials.create', params: [ - "AuthCredentialCreateRequest: { accountId: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { accountId: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { accountId: string; attestation: { attestationObject: string; clientDataJson: string; credentialId: string; transports?: 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'[]; }; challenge: string; nickname: string; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; };", + "AuthCredentialCreateRequest: { accountId: string; } & { type: 'EMAIL_OTP'; } | { accountId: string; } & { oidcToken: string; type: 'OAUTH'; } | { accountId: string; } & { attestation: passkey_attestation; challenge: string; nickname: string; type: 'PASSKEY'; };", 'Grid-Wallet-Signature?: string;', 'Request-Id?: string;', ], response: "{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }", markdown: - "## create\n\n`client.auth.credentials.create(AuthCredentialCreateRequest: { accountId: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { accountId: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { accountId: string; attestation: { attestationObject: string; clientDataJson: string; credentialId: string; transports?: 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'[]; }; challenge: string; nickname: string; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }, Grid-Wallet-Signature?: string, Request-Id?: string): { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n\n**post** `/auth/credentials`\n\nRegister an authentication credential for an Embedded Wallet customer.\n\n**First credential on an internal account**\n\nIf the target internal account does not yet have any authentication credential registered, call this endpoint with the credential details. The response is `201` with the created `AuthMethod`. For `EMAIL_OTP` credentials, this call also triggers a one-time password email to the address on the customer record tied to the internal account; the credential must be activated via `POST /auth/credentials/{id}/verify` before it can sign requests. For `OAUTH` credentials, the supplied `oidcToken` is validated inline against the issuer's `.well-known` OpenID configuration (the token's `iat` must be less than 60 seconds before the request); activation still happens via `POST /auth/credentials/{id}/verify`. For `PASSKEY` credentials, the client completes a WebAuthn registration (`navigator.credentials.create()`) using a `challenge` issued by the platform backend and submits the resulting `attestation` here. The registration response is a plain `AuthMethod` (no inline authentication challenge). To produce the first session, the client follows registration with two further calls: `POST /auth/credentials/{id}/challenge` (carrying the client's ephemeral `clientPublicKey`) returns a Grid-issued WebAuthn challenge plus `requestId`, and `POST /auth/credentials/{id}/verify` (with `Request-Id: `) consumes the resulting assertion and issues the session. The same two-step pattern is used on every subsequent reauthentication. Only one `PASSKEY` credential is supported per internal account in v1.\n\n**Adding an additional credential**\n\nRegistering an additional credential against an internal account that already has one requires a signature from an existing verified credential. Call this endpoint with the new credential's details; if an existing credential is already registered on the internal account the response is `202` with a `payloadToSign` and a `requestId`. Use the session API keypair of an existing verified credential on the same internal account (decrypted client-side from its `encryptedSessionSigningKey`) to build an API-key stamp over `payloadToSign`, then retry the same request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `201` with the created `AuthMethod`. For `EMAIL_OTP`, the OTP email is triggered on the signed retry, and the credential must then be activated via `POST /auth/credentials/{id}/verify`.\n\n\n### Parameters\n\n- `AuthCredentialCreateRequest: { accountId: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { accountId: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { accountId: string; attestation: { attestationObject: string; clientDataJson: string; credentialId: string; transports?: 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'[]; }; challenge: string; nickname: string; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n Strict wrapper around `AuthMethod`. Used directly as the registration response on `POST /auth/credentials` (all three credential types) and inside `AuthCredentialResponseOneOf` for the `EMAIL_OTP` branch of `POST /auth/credentials/{id}/challenge`. The only difference from `AuthMethod` is `unevaluatedProperties: false`, which disambiguates the oneOf against `PasskeyAuthChallenge` — without the strictness, an `AuthMethod` with extra fields would ambiguously match both branches.\n\n - `id: string`\n - `accountId: string`\n - `createdAt: string`\n - `nickname: string`\n - `type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'`\n - `updatedAt: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authMethod = await client.auth.credentials.create({ AuthCredentialCreateRequest: { accountId: 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002', type: 'EMAIL_OTP' } });\n\nconsole.log(authMethod);\n```", + "## create\n\n`client.auth.credentials.create(AuthCredentialCreateRequest: auth_credential_create_request & email_otp_credential_create_request_fields | auth_credential_create_request & oauth_credential_create_request_fields | auth_credential_create_request & passkey_credential_create_request_fields, Grid-Wallet-Signature?: string, Request-Id?: string): { id: string; accountId: string; createdAt: string; nickname: string; type: auth_method_type; updatedAt: string; }`\n\n**post** `/auth/credentials`\n\nRegister an authentication credential for an Embedded Wallet customer.\n\n**First credential on an internal account**\n\nIf the target internal account does not yet have any authentication credential registered, call this endpoint with the credential details. The response is `201` with the created `AuthMethod`. For `EMAIL_OTP` credentials, this call also triggers a one-time password email to the address on the customer record tied to the internal account; the credential must be activated via `POST /auth/credentials/{id}/verify` before it can sign requests. For `OAUTH` credentials, the supplied `oidcToken` is validated inline against the issuer's `.well-known` OpenID configuration (the token's `iat` must be less than 60 seconds before the request); activation still happens via `POST /auth/credentials/{id}/verify`. For `PASSKEY` credentials, the client completes a WebAuthn registration (`navigator.credentials.create()`) using a `challenge` issued by the platform backend and submits the resulting `attestation` here. The registration response is a plain `AuthMethod` (no inline authentication challenge). To produce the first session, the client follows registration with two further calls: `POST /auth/credentials/{id}/challenge` (carrying the client's ephemeral `clientPublicKey`) returns a Grid-issued WebAuthn challenge plus `requestId`, and `POST /auth/credentials/{id}/verify` (with `Request-Id: `) consumes the resulting assertion and issues the session. The same two-step pattern is used on every subsequent reauthentication. Only one `PASSKEY` credential is supported per internal account in v1.\n\n**Adding an additional credential**\n\nRegistering an additional credential against an internal account that already has one requires a signature from an existing verified credential. Call this endpoint with the new credential's details; if an existing credential is already registered on the internal account the response is `202` with a `payloadToSign` and a `requestId`. Use the session API keypair of an existing verified credential on the same internal account (decrypted client-side from its `encryptedSessionSigningKey`) to build an API-key stamp over `payloadToSign`, then retry the same request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `201` with the created `AuthMethod`. For `EMAIL_OTP`, the OTP email is triggered on the signed retry, and the credential must then be activated via `POST /auth/credentials/{id}/verify`.\n\n\n### Parameters\n\n- `AuthCredentialCreateRequest: { accountId: string; } & { type: 'EMAIL_OTP'; } | { accountId: string; } & { oidcToken: string; type: 'OAUTH'; } | { accountId: string; } & { attestation: passkey_attestation; challenge: string; nickname: string; type: 'PASSKEY'; }`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n Strict wrapper around `AuthMethod`. Used directly as the registration response on `POST /auth/credentials` (all three credential types) and inside `AuthCredentialResponseOneOf` for the `EMAIL_OTP` branch of `POST /auth/credentials/{id}/challenge`. The only difference from `AuthMethod` is `unevaluatedProperties: false`, which disambiguates the oneOf against `PasskeyAuthChallenge` — without the strictness, an `AuthMethod` with extra fields would ambiguously match both branches.\n\n - `id: string`\n - `accountId: string`\n - `createdAt: string`\n - `nickname: string`\n - `type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'`\n - `updatedAt: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authMethodResponse = await client.auth.credentials.create({ AuthCredentialCreateRequest: { accountId: 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002', type: 'EMAIL_OTP' } });\n\nconsole.log(authMethodResponse);\n```", perLanguage: { typescript: { method: 'client.auth.credentials.create', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst authMethod = await client.auth.credentials.create({\n AuthCredentialCreateRequest: {\n accountId: 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002',\n type: 'EMAIL_OTP',\n },\n});\n\nconsole.log(authMethod.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst authMethodResponse = await client.auth.credentials.create({\n AuthCredentialCreateRequest: {\n accountId: 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002',\n type: 'EMAIL_OTP',\n },\n});\n\nconsole.log(authMethodResponse.id);", }, python: { method: 'auth.credentials.create', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nauth_method = client.auth.credentials.create(\n auth_credential_create_request={\n "account_id": "InternalAccount:019542f5-b3e7-1d02-0000-000000000002",\n "type": "EMAIL_OTP",\n },\n)\nprint(auth_method.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nauth_method_response = client.auth.credentials.create(\n auth_credential_create_request={\n "account_id": "InternalAccount:019542f5-b3e7-1d02-0000-000000000002",\n "type": "EMAIL_OTP",\n },\n)\nprint(auth_method_response.id)', }, kotlin: { method: 'auth().credentials().create', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.AuthMethod\nimport com.lightspark.grid.models.auth.credentials.CredentialCreateParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CredentialCreateParams.AuthCredentialCreateRequest.EmailOtpCredentialCreateRequest = CredentialCreateParams.AuthCredentialCreateRequest.EmailOtpCredentialCreateRequest.builder()\n .accountId("InternalAccount:019542f5-b3e7-1d02-0000-000000000002")\n .type(CredentialCreateParams.AuthCredentialCreateRequest.EmailOtpCredentialCreateRequest.Type.EMAIL_OTP)\n .build()\n val authMethod: AuthMethod = client.auth().credentials().create(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.AuthMethodResponse\nimport com.lightspark.grid.models.auth.credentials.EmailOtpCredentialCreateRequest\nimport com.lightspark.grid.models.auth.credentials.EmailOtpCredentialCreateRequestFields\nimport com.lightspark.grid.models.auth.credentials.OAuthCredentialCreateRequest\nimport com.lightspark.grid.models.auth.credentials.PasskeyCredentialCreateRequest\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: EmailOtpCredentialCreateRequest = EmailOtpCredentialCreateRequest.builder()\n .accountId("InternalAccount:019542f5-b3e7-1d02-0000-000000000002")\n .type(EmailOtpCredentialCreateRequestFields.Type.EMAIL_OTP)\n .build()\n val authMethodResponse: AuthMethodResponse = client.auth().credentials().create(params)\n}', }, http: { example: @@ -2333,28 +2373,28 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.auth.credentials.verify', params: [ 'id: string;', - "AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; };", + "AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH'; } | { assertion: object; type: 'PASSKEY'; };", 'Request-Id?: string;', ], response: "{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }", markdown: - "## verify\n\n`client.auth.credentials.verify(id: string, AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }, Request-Id?: string): object`\n\n**post** `/auth/credentials/{id}/verify`\n\nComplete the verification step for a previously created authentication credential and issue a session signing key.\n\nFor `EMAIL_OTP` credentials, supply the one-time password that was emailed to the user along with a client-generated public key. For `OAUTH` credentials, supply a fresh OIDC token (`iat` must be less than 60 seconds before the request) along with the client-generated public key; this is also the reauthentication path after a prior session expired. For `PASSKEY` credentials, the client completes a WebAuthn assertion (`navigator.credentials.get()`) against the Grid-issued `challenge` returned from either `POST /auth/credentials` (first authentication) or `POST /auth/credentials/{id}/challenge` (reauthentication), and submits the resulting `assertion` along with the client-generated public key. The `requestId` that accompanied the challenge must be echoed in the `Request-Id` header so Grid can correlate the assertion with the pending challenge; Grid verifies the WebAuthn signature against the stored credential before issuing the session.\n\nOn success, the response contains an `encryptedSessionSigningKey` that is encrypted to the supplied `clientPublicKey`, along with an `expiresAt` timestamp marking when the session expires. The `clientPublicKey` is ephemeral and one-time-use per verification request.\n\n\n### Parameters\n\n- `id: string`\n\n- `AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; } | { assertion: { authenticatorData: string; clientDataJson: string; credentialId: string; signature: string; userHandle?: string; }; type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; }`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n An authentication session on an Embedded Wallet internal account. Returned from `GET /auth/sessions` (list) and `POST /auth/credentials/{id}/verify` (on credential verification). Only the verify response includes `encryptedSessionSigningKey` — it is delivered exactly once at the moment the session is issued and is never returned by the list endpoint.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.credentials.verify('id', { AuthCredentialVerifyRequest: {\n clientPublicKey: '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n otp: '123456',\n type: 'EMAIL_OTP',\n} });\n\nconsole.log(response);\n```", + "## verify\n\n`client.auth.credentials.verify(id: string, AuthCredentialVerifyRequest: object | object | object, Request-Id?: string): object`\n\n**post** `/auth/credentials/{id}/verify`\n\nComplete the verification step for a previously created authentication credential and issue a session signing key.\n\nFor `EMAIL_OTP` credentials, supply the one-time password that was emailed to the user along with a client-generated public key. For `OAUTH` credentials, supply a fresh OIDC token (`iat` must be less than 60 seconds before the request) along with the client-generated public key; this is also the reauthentication path after a prior session expired. For `PASSKEY` credentials, the client completes a WebAuthn assertion (`navigator.credentials.get()`) against the Grid-issued `challenge` returned from either `POST /auth/credentials` (first authentication) or `POST /auth/credentials/{id}/challenge` (reauthentication), and submits the resulting `assertion` along with the client-generated public key. The `requestId` that accompanied the challenge must be echoed in the `Request-Id` header so Grid can correlate the assertion with the pending challenge; Grid verifies the WebAuthn signature against the stored credential before issuing the session.\n\nOn success, the response contains an `encryptedSessionSigningKey` that is encrypted to the supplied `clientPublicKey`, along with an `expiresAt` timestamp marking when the session expires. The `clientPublicKey` is ephemeral and one-time-use per verification request.\n\n\n### Parameters\n\n- `id: string`\n\n- `AuthCredentialVerifyRequest: { clientPublicKey: string; otp: string; type: 'EMAIL_OTP'; } | { clientPublicKey: string; oidcToken: string; type: 'OAUTH'; } | { assertion: object; type: 'PASSKEY'; }`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n An authentication session on an Embedded Wallet internal account. Returned from `GET /auth/sessions` (list) and `POST /auth/credentials/{id}/verify` (on credential verification). Only the verify response includes `encryptedSessionSigningKey` — it is delivered exactly once at the moment the session is issued and is never returned by the list endpoint.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authSession = await client.auth.credentials.verify('id', { AuthCredentialVerifyRequest: {\n clientPublicKey: '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n otp: '123456',\n type: 'EMAIL_OTP',\n} });\n\nconsole.log(authSession);\n```", perLanguage: { typescript: { method: 'client.auth.credentials.verify', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.auth.credentials.verify('id', {\n AuthCredentialVerifyRequest: {\n clientPublicKey:\n '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n otp: '123456',\n type: 'EMAIL_OTP',\n },\n});\n\nconsole.log(response);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst authSession = await client.auth.credentials.verify('id', {\n AuthCredentialVerifyRequest: {\n clientPublicKey:\n '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n otp: '123456',\n type: 'EMAIL_OTP',\n },\n});\n\nconsole.log(authSession);", }, python: { method: 'auth.credentials.verify', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.auth.credentials.verify(\n id="id",\n auth_credential_verify_request={\n "client_public_key": "04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n "otp": "123456",\n "type": "EMAIL_OTP",\n },\n)\nprint(response)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nauth_session = client.auth.credentials.verify(\n id="id",\n auth_credential_verify_request={\n "client_public_key": "04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n "otp": "123456",\n "type": "EMAIL_OTP",\n },\n)\nprint(auth_session)', }, kotlin: { method: 'auth().credentials().verify', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.CredentialVerifyParams\nimport com.lightspark.grid.models.auth.credentials.CredentialVerifyResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CredentialVerifyParams = CredentialVerifyParams.builder()\n .id("id")\n .authCredentialVerifyRequest(CredentialVerifyParams.AuthCredentialVerifyRequest.EmailOtpCredentialVerifyRequest.builder()\n .clientPublicKey("04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2")\n .otp("123456")\n .type(CredentialVerifyParams.AuthCredentialVerifyRequest.EmailOtpCredentialVerifyRequest.Type.EMAIL_OTP)\n .build())\n .build()\n val response: CredentialVerifyResponse = client.auth().credentials().verify(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.AuthSession\nimport com.lightspark.grid.models.auth.credentials.CredentialVerifyParams\nimport com.lightspark.grid.models.auth.credentials.EmailOtpCredentialVerifyRequestFields\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CredentialVerifyParams = CredentialVerifyParams.builder()\n .id("id")\n .authCredentialVerifyRequest(EmailOtpCredentialVerifyRequestFields.builder()\n .clientPublicKey("04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2")\n .otp("123456")\n .type(EmailOtpCredentialVerifyRequestFields.Type.EMAIL_OTP)\n .build())\n .build()\n val authSession: AuthSession = client.auth().credentials().verify(params)\n}', }, http: { example: @@ -2363,34 +2403,34 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'resend_challenge', + name: 'challenge', endpoint: '/auth/credentials/{id}/challenge', httpMethod: 'post', summary: 'Re-issue an authentication credential challenge', description: "Re-issue the challenge for an existing authentication credential.\n\nFor `EMAIL_OTP` credentials, this triggers a new one-time password email to the address on file. The response is a plain `AuthMethod`; there is no challenge body to surface because the OTP is delivered out-of-band via email. After the user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete verification and issue a session.\n\n`OAUTH` credentials do not have a challenge step. To authenticate or reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` with a fresh OIDC token and a `clientPublicKey`.\n\nFor `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge for reauthentication. The request body must carry the client's ephemeral `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload the returned challenge is computed from — this seals the resulting session signing key to the client. The response is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The client passes the `challenge` into `navigator.credentials.get()` and submits the resulting assertion to `POST /auth/credentials/{id}/verify` with `Request-Id: ` to receive a session.\n", - stainlessPath: '(resource) auth.credentials > (method) resend_challenge', - qualified: 'client.auth.credentials.resendChallenge', + stainlessPath: '(resource) auth.credentials > (method) challenge', + qualified: 'client.auth.credentials.challenge', params: ['id: string;', 'clientPublicKey?: string;'], response: - "{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; } | { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }", + "{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; } | { id: string; accountId: string; createdAt: string; nickname: string; type: auth_method_type; updatedAt: string; }", markdown: - "## resend_challenge\n\n`client.auth.credentials.resendChallenge(id: string, clientPublicKey?: string): object | object`\n\n**post** `/auth/credentials/{id}/challenge`\n\nRe-issue the challenge for an existing authentication credential.\n\nFor `EMAIL_OTP` credentials, this triggers a new one-time password email to the address on file. The response is a plain `AuthMethod`; there is no challenge body to surface because the OTP is delivered out-of-band via email. After the user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete verification and issue a session.\n\n`OAUTH` credentials do not have a challenge step. To authenticate or reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` with a fresh OIDC token and a `clientPublicKey`.\n\nFor `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge for reauthentication. The request body must carry the client's ephemeral `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload the returned challenge is computed from — this seals the resulting session signing key to the client. The response is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The client passes the `challenge` into `navigator.credentials.get()` and submits the resulting assertion to `POST /auth/credentials/{id}/verify` with `Request-Id: ` to receive a session.\n\n\n### Parameters\n\n- `id: string`\n\n- `clientPublicKey?: string`\n Required for `PASSKEY` credentials. Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (`04` prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters total). The matching private key must remain on the client. Grid bakes this key into the Turnkey session-creation payload that the returned `challenge` is computed from, so the resulting session signing key is sealed to the client. Ignored for `EMAIL_OTP`.\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; } | { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }`\n Discriminated response shape returned from `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` credentials the body is a plain `AuthMethod` (wrapped as `AuthMethodResponse` to disambiguate the oneOf). For `PASSKEY` credentials the body is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the Grid-issued `challenge`, `requestId`, and `expiresAt` that drive the subsequent assertion. OAuth credentials do not use the challenge endpoint; call `POST /auth/credentials/{id}/verify` with a fresh OIDC token instead. Registration responses from `POST /auth/credentials` use the simpler `AuthMethodResponse` shape directly for all three credential types.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.credentials.resendChallenge('id');\n\nconsole.log(response);\n```", + "## challenge\n\n`client.auth.credentials.challenge(id: string, clientPublicKey?: string): object | auth_method`\n\n**post** `/auth/credentials/{id}/challenge`\n\nRe-issue the challenge for an existing authentication credential.\n\nFor `EMAIL_OTP` credentials, this triggers a new one-time password email to the address on file. The response is a plain `AuthMethod`; there is no challenge body to surface because the OTP is delivered out-of-band via email. After the user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete verification and issue a session.\n\n`OAUTH` credentials do not have a challenge step. To authenticate or reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` with a fresh OIDC token and a `clientPublicKey`.\n\nFor `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge for reauthentication. The request body must carry the client's ephemeral `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload the returned challenge is computed from — this seals the resulting session signing key to the client. The response is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The client passes the `challenge` into `navigator.credentials.get()` and submits the resulting assertion to `POST /auth/credentials/{id}/verify` with `Request-Id: ` to receive a session.\n\n\n### Parameters\n\n- `id: string`\n\n- `clientPublicKey?: string`\n Required for `PASSKEY` credentials. Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (`04` prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters total). The matching private key must remain on the client. Grid bakes this key into the Turnkey session-creation payload that the returned `challenge` is computed from, so the resulting session signing key is sealed to the client. Ignored for `EMAIL_OTP`.\n\n### Returns\n\n- `{ id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; } | { id: string; accountId: string; createdAt: string; nickname: string; type: auth_method_type; updatedAt: string; }`\n Discriminated response shape returned from `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` credentials the body is a plain `AuthMethod` (wrapped as `AuthMethodResponse` to disambiguate the oneOf). For `PASSKEY` credentials the body is a `PasskeyAuthChallenge` — the base `AuthMethod` fields plus the Grid-issued `challenge`, `requestId`, and `expiresAt` that drive the subsequent assertion. OAuth credentials do not use the challenge endpoint; call `POST /auth/credentials/{id}/verify` with a fresh OIDC token instead. Registration responses from `POST /auth/credentials` use the simpler `AuthMethodResponse` shape directly for all three credential types.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authCredentialResponseOneOf = await client.auth.credentials.challenge('id');\n\nconsole.log(authCredentialResponseOneOf);\n```", perLanguage: { typescript: { - method: 'client.auth.credentials.resendChallenge', + method: 'client.auth.credentials.challenge', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.auth.credentials.resendChallenge('id', {\n clientPublicKey:\n '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n});\n\nconsole.log(response);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst authCredentialResponseOneOf = await client.auth.credentials.challenge('id', {\n clientPublicKey:\n '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n});\n\nconsole.log(authCredentialResponseOneOf);", }, python: { - method: 'auth.credentials.resend_challenge', + method: 'auth.credentials.challenge', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.auth.credentials.resend_challenge(\n id="id",\n client_public_key="04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n)\nprint(response)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nauth_credential_response_one_of = client.auth.credentials.challenge(\n id="id",\n client_public_key="04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n)\nprint(auth_credential_response_one_of)', }, kotlin: { - method: 'auth().credentials().resendChallenge', + method: 'auth().credentials().challenge', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.CredentialResendChallengeParams\nimport com.lightspark.grid.models.auth.credentials.CredentialResendChallengeResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: CredentialResendChallengeResponse = client.auth().credentials().resendChallenge("id")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.AuthCredentialResponseOneOf\nimport com.lightspark.grid.models.auth.credentials.CredentialChallengeParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val authCredentialResponseOneOf: AuthCredentialResponseOneOf = client.auth().credentials().challenge("id")\n}', }, http: { example: @@ -2409,24 +2449,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.auth.credentials.list', params: ['accountId: string;'], response: - "{ data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]; }", + '{ data: { id: string; accountId: string; createdAt: string; nickname: string; type: auth_method_type; updatedAt: string; }[]; }', markdown: - "## list\n\n`client.auth.credentials.list(accountId: string): { data: auth_method[]; }`\n\n**get** `/auth/credentials`\n\nRetrieve all authentication credentials registered on an Embedded Wallet internal account.\n\nThe response is not paginated: an internal account is expected to have a small, bounded number of credentials (typically 1–5), so all results are returned inline. Additional per-credential detail (such as active session expiry) is available on `GET /auth/sessions`.\n\n### Parameters\n\n- `accountId: string`\n Internal account id whose authentication credentials to list.\n\n### Returns\n\n- `{ data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]; }`\n\n - `data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst credentials = await client.auth.credentials.list({ accountId: 'accountId' });\n\nconsole.log(credentials);\n```", + "## list\n\n`client.auth.credentials.list(accountId: string): { data: auth_method[]; }`\n\n**get** `/auth/credentials`\n\nRetrieve all authentication credentials registered on an Embedded Wallet internal account.\n\nThe response is not paginated: an internal account is expected to have a small, bounded number of credentials (typically 1–5), so all results are returned inline. Additional per-credential detail (such as active session expiry) is available on `GET /auth/sessions`.\n\n### Parameters\n\n- `accountId: string`\n Internal account id whose authentication credentials to list.\n\n### Returns\n\n- `{ data: { id: string; accountId: string; createdAt: string; nickname: string; type: auth_method_type; updatedAt: string; }[]; }`\n\n - `data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authCredentialListResponse = await client.auth.credentials.list({ accountId: 'accountId' });\n\nconsole.log(authCredentialListResponse);\n```", perLanguage: { typescript: { method: 'client.auth.credentials.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst credentials = await client.auth.credentials.list({ accountId: 'accountId' });\n\nconsole.log(credentials.data);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst authCredentialListResponse = await client.auth.credentials.list({ accountId: 'accountId' });\n\nconsole.log(authCredentialListResponse.data);", }, python: { method: 'auth.credentials.list', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\ncredentials = client.auth.credentials.list(\n account_id="accountId",\n)\nprint(credentials.data)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nauth_credential_list_response = client.auth.credentials.list(\n account_id="accountId",\n)\nprint(auth_credential_list_response.data)', }, kotlin: { method: 'auth().credentials().list', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.CredentialListParams\nimport com.lightspark.grid.models.auth.credentials.CredentialListResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CredentialListParams = CredentialListParams.builder()\n .accountId("accountId")\n .build()\n val credentials: CredentialListResponse = client.auth().credentials().list(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.AuthCredentialListResponse\nimport com.lightspark.grid.models.auth.credentials.CredentialListParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: CredentialListParams = CredentialListParams.builder()\n .accountId("accountId")\n .build()\n val authCredentialListResponse: AuthCredentialListResponse = client.auth().credentials().list(params)\n}', }, http: { example: @@ -2435,34 +2475,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'revoke', + name: 'delete', endpoint: '/auth/credentials/{id}', httpMethod: 'delete', summary: 'Revoke an authentication credential', description: 'Revoke an authentication credential on an Embedded Wallet internal account.\n\nRevocation is a two-step flow because it must be authorized by a session on a *different* credential on the same internal account:\n\n1. Call `DELETE /auth/credentials/{id}` with no headers. The response is `202` with a `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of an existing verified credential on the same internal account — other than the one being revoked — to build an API-key stamp over `payloadToSign`, then retry the same `DELETE` request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `204`.\n\nThe account must retain at least one authentication credential; an account with only a single credential cannot use this endpoint to revoke it.\n', - stainlessPath: '(resource) auth.credentials > (method) revoke', - qualified: 'client.auth.credentials.revoke', + stainlessPath: '(resource) auth.credentials > (method) delete', + qualified: 'client.auth.credentials.delete', params: ['id: string;', 'Grid-Wallet-Signature?: string;', 'Request-Id?: string;'], - response: - "{ expiresAt: string; payloadToSign: string; requestId: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; }", + response: '{ expiresAt: string; payloadToSign: string; requestId: string; }', markdown: - "## revoke\n\n`client.auth.credentials.revoke(id: string, Grid-Wallet-Signature?: string, Request-Id?: string): { expiresAt: string; payloadToSign: string; requestId: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; }`\n\n**delete** `/auth/credentials/{id}`\n\nRevoke an authentication credential on an Embedded Wallet internal account.\n\nRevocation is a two-step flow because it must be authorized by a session on a *different* credential on the same internal account:\n\n1. Call `DELETE /auth/credentials/{id}` with no headers. The response is `202` with a `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of an existing verified credential on the same internal account — other than the one being revoked — to build an API-key stamp over `payloadToSign`, then retry the same `DELETE` request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `204`.\n\nThe account must retain at least one authentication credential; an account with only a single credential cannot use this endpoint to revoke it.\n\n\n### Parameters\n\n- `id: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ expiresAt: string; payloadToSign: string; requestId: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; }`\n 202 response returned from Embedded Wallet Auth endpoints that require a signed retry — `POST /auth/credentials` (adding an additional credential), `DELETE /auth/credentials/{id}` (revoking a credential), and `DELETE /auth/sessions/{id}` (revoking a session). Carries the signing fields from `SignedRequestChallenge` plus the `type` of the authentication credential involved (being added, being revoked, or that issued the session being revoked). The client already knows the target resource id from the request path / body it just sent, so nothing beyond `type` is echoed in the response.\n\n - `expiresAt: string`\n - `payloadToSign: string`\n - `requestId: string`\n - `type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.credentials.revoke('id');\n\nconsole.log(response);\n```", + "## delete\n\n`client.auth.credentials.delete(id: string, Grid-Wallet-Signature?: string, Request-Id?: string): object`\n\n**delete** `/auth/credentials/{id}`\n\nRevoke an authentication credential on an Embedded Wallet internal account.\n\nRevocation is a two-step flow because it must be authorized by a session on a *different* credential on the same internal account:\n\n1. Call `DELETE /auth/credentials/{id}` with no headers. The response is `202` with a `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of an existing verified credential on the same internal account — other than the one being revoked — to build an API-key stamp over `payloadToSign`, then retry the same `DELETE` request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `204`.\n\nThe account must retain at least one authentication credential; an account with only a single credential cannot use this endpoint to revoke it.\n\n\n### Parameters\n\n- `id: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ expiresAt: string; payloadToSign: string; requestId: string; }`\n 202 response returned from Embedded Wallet Auth endpoints that require a signed retry — `POST /auth/credentials` (adding an additional credential), `DELETE /auth/credentials/{id}` (revoking a credential), and `DELETE /auth/sessions/{id}` (revoking a session). Carries the signing fields from `SignedRequestChallenge` plus the `type` of the authentication credential involved (being added, being revoked, or that issued the session being revoked). The client already knows the target resource id from the request path / body it just sent, so nothing beyond `type` is echoed in the response.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authSignedRequestChallenge = await client.auth.credentials.delete('id');\n\nconsole.log(authSignedRequestChallenge);\n```", perLanguage: { typescript: { - method: 'client.auth.credentials.revoke', + method: 'client.auth.credentials.delete', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.auth.credentials.revoke('id');\n\nconsole.log(response.expiresAt);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst authSignedRequestChallenge = await client.auth.credentials.delete('id');\n\nconsole.log(authSignedRequestChallenge);", }, python: { - method: 'auth.credentials.revoke', + method: 'auth.credentials.delete', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.auth.credentials.revoke(\n id="id",\n)\nprint(response.expires_at)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nauth_signed_request_challenge = client.auth.credentials.delete(\n id="id",\n)\nprint(auth_signed_request_challenge)', }, kotlin: { - method: 'auth().credentials().revoke', + method: 'auth().credentials().delete', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.CredentialRevokeParams\nimport com.lightspark.grid.models.auth.credentials.CredentialRevokeResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: CredentialRevokeResponse = client.auth().credentials().revoke("id")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.AuthSignedRequestChallenge\nimport com.lightspark.grid.models.auth.credentials.CredentialDeleteParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val authSignedRequestChallenge: AuthSignedRequestChallenge = client.auth().credentials().delete("id")\n}', }, http: { example: @@ -2480,25 +2519,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) auth.sessions > (method) list', qualified: 'client.auth.sessions.list', params: ['accountId: string;'], - response: - "{ data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]; }", + response: '{ data: object[]; }', markdown: - "## list\n\n`client.auth.sessions.list(accountId: string): { data: auth_method[]; }`\n\n**get** `/auth/sessions`\n\nRetrieve all active authentication sessions on an Embedded Wallet internal account. A session is created each time a credential is verified via `POST /auth/credentials/{id}/verify`, and remains active until its `expiresAt` passes or it is revoked via `DELETE /auth/sessions/{id}`.\n\nThe response is not paginated: an internal account is expected to have a small, bounded number of concurrent sessions (one per signed-in device, typically 1–4), so all results are returned inline.\n\n### Parameters\n\n- `accountId: string`\n Internal account id whose sessions to list.\n\n### Returns\n\n- `{ data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]; }`\n\n - `data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst sessions = await client.auth.sessions.list({ accountId: 'accountId' });\n\nconsole.log(sessions);\n```", + "## list\n\n`client.auth.sessions.list(accountId: string): { data: auth_session[]; }`\n\n**get** `/auth/sessions`\n\nRetrieve all active authentication sessions on an Embedded Wallet internal account. A session is created each time a credential is verified via `POST /auth/credentials/{id}/verify`, and remains active until its `expiresAt` passes or it is revoked via `DELETE /auth/sessions/{id}`.\n\nThe response is not paginated: an internal account is expected to have a small, bounded number of concurrent sessions (one per signed-in device, typically 1–4), so all results are returned inline.\n\n### Parameters\n\n- `accountId: string`\n Internal account id whose sessions to list.\n\n### Returns\n\n- `{ data: object[]; }`\n\n - `data: { id: string; accountId: string; createdAt: string; nickname: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; updatedAt: string; }[]`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst sessionListResponse = await client.auth.sessions.list({ accountId: 'accountId' });\n\nconsole.log(sessionListResponse);\n```", perLanguage: { typescript: { method: 'client.auth.sessions.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst sessions = await client.auth.sessions.list({ accountId: 'accountId' });\n\nconsole.log(sessions.data);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst sessionListResponse = await client.auth.sessions.list({ accountId: 'accountId' });\n\nconsole.log(sessionListResponse.data);", }, python: { method: 'auth.sessions.list', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nsessions = client.auth.sessions.list(\n account_id="accountId",\n)\nprint(sessions.data)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nsession_list_response = client.auth.sessions.list(\n account_id="accountId",\n)\nprint(session_list_response.data)', }, kotlin: { method: 'auth().sessions().list', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.sessions.SessionListParams\nimport com.lightspark.grid.models.auth.sessions.SessionListResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: SessionListParams = SessionListParams.builder()\n .accountId("accountId")\n .build()\n val sessions: SessionListResponse = client.auth().sessions().list(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.sessions.SessionListParams\nimport com.lightspark.grid.models.auth.sessions.SessionListResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: SessionListParams = SessionListParams.builder()\n .accountId("accountId")\n .build()\n val sessionListResponse: SessionListResponse = client.auth().sessions().list(params)\n}', }, http: { example: @@ -2507,34 +2545,33 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, { - name: 'revoke', + name: 'delete', endpoint: '/auth/sessions/{id}', httpMethod: 'delete', summary: 'Revoke an authentication session', description: 'Revoke an authentication session on an Embedded Wallet internal account. Revocation is a two-step signed-retry flow:\n\n1. Call `DELETE /auth/sessions/{id}` with no headers. The response is `202` with a `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of a verified session on the same internal account (this can be the session being revoked, for self-logout) to build an API-key stamp over `payloadToSign`, then retry the same `DELETE` request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `204`.\n', - stainlessPath: '(resource) auth.sessions > (method) revoke', - qualified: 'client.auth.sessions.revoke', + stainlessPath: '(resource) auth.sessions > (method) delete', + qualified: 'client.auth.sessions.delete', params: ['id: string;', 'Grid-Wallet-Signature?: string;', 'Request-Id?: string;'], - response: - "{ expiresAt: string; payloadToSign: string; requestId: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; }", + response: '{ expiresAt: string; payloadToSign: string; requestId: string; }', markdown: - "## revoke\n\n`client.auth.sessions.revoke(id: string, Grid-Wallet-Signature?: string, Request-Id?: string): { expiresAt: string; payloadToSign: string; requestId: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; }`\n\n**delete** `/auth/sessions/{id}`\n\nRevoke an authentication session on an Embedded Wallet internal account. Revocation is a two-step signed-retry flow:\n\n1. Call `DELETE /auth/sessions/{id}` with no headers. The response is `202` with a `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of a verified session on the same internal account (this can be the session being revoked, for self-logout) to build an API-key stamp over `payloadToSign`, then retry the same `DELETE` request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `204`.\n\n\n### Parameters\n\n- `id: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ expiresAt: string; payloadToSign: string; requestId: string; type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; }`\n 202 response returned from Embedded Wallet Auth endpoints that require a signed retry — `POST /auth/credentials` (adding an additional credential), `DELETE /auth/credentials/{id}` (revoking a credential), and `DELETE /auth/sessions/{id}` (revoking a session). Carries the signing fields from `SignedRequestChallenge` plus the `type` of the authentication credential involved (being added, being revoked, or that issued the session being revoked). The client already knows the target resource id from the request path / body it just sent, so nothing beyond `type` is echoed in the response.\n\n - `expiresAt: string`\n - `payloadToSign: string`\n - `requestId: string`\n - `type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.auth.sessions.revoke('id');\n\nconsole.log(response);\n```", + "## delete\n\n`client.auth.sessions.delete(id: string, Grid-Wallet-Signature?: string, Request-Id?: string): object`\n\n**delete** `/auth/sessions/{id}`\n\nRevoke an authentication session on an Embedded Wallet internal account. Revocation is a two-step signed-retry flow:\n\n1. Call `DELETE /auth/sessions/{id}` with no headers. The response is `202` with a `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of a verified session on the same internal account (this can be the session being revoked, for self-logout) to build an API-key stamp over `payloadToSign`, then retry the same `DELETE` request with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The signed retry returns `204`.\n\n\n### Parameters\n\n- `id: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ expiresAt: string; payloadToSign: string; requestId: string; }`\n 202 response returned from Embedded Wallet Auth endpoints that require a signed retry — `POST /auth/credentials` (adding an additional credential), `DELETE /auth/credentials/{id}` (revoking a credential), and `DELETE /auth/sessions/{id}` (revoking a session). Carries the signing fields from `SignedRequestChallenge` plus the `type` of the authentication credential involved (being added, being revoked, or that issued the session being revoked). The client already knows the target resource id from the request path / body it just sent, so nothing beyond `type` is echoed in the response.\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst authSignedRequestChallenge = await client.auth.sessions.delete('id');\n\nconsole.log(authSignedRequestChallenge);\n```", perLanguage: { typescript: { - method: 'client.auth.sessions.revoke', + method: 'client.auth.sessions.delete', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.auth.sessions.revoke('id');\n\nconsole.log(response.expiresAt);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst authSignedRequestChallenge = await client.auth.sessions.delete('id');\n\nconsole.log(authSignedRequestChallenge);", }, python: { - method: 'auth.sessions.revoke', + method: 'auth.sessions.delete', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.auth.sessions.revoke(\n id="id",\n)\nprint(response.expires_at)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nauth_signed_request_challenge = client.auth.sessions.delete(\n id="id",\n)\nprint(auth_signed_request_challenge)', }, kotlin: { - method: 'auth().sessions().revoke', + method: 'auth().sessions().delete', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.sessions.SessionRevokeParams\nimport com.lightspark.grid.models.auth.sessions.SessionRevokeResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: SessionRevokeResponse = client.auth().sessions().revoke("id")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.auth.credentials.AuthSignedRequestChallenge\nimport com.lightspark.grid.models.auth.sessions.SessionDeleteParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val authSignedRequestChallenge: AuthSignedRequestChallenge = client.auth().sessions().delete("id")\n}', }, http: { example: @@ -2542,46 +2579,6 @@ const EMBEDDED_METHODS: MethodEntry[] = [ }, }, }, - { - name: 'export', - endpoint: '/internal-accounts/{id}/export', - httpMethod: 'post', - summary: 'Export internal account wallet credentials', - description: - 'Export the wallet credentials of an Embedded Wallet internal account. The returned wallet credentials are HPKE-encrypted to the `clientPublicKey` supplied in the request body.\n\nExport is a two-step signed-retry flow (same pattern as add-additional credential, revoke credential, and revoke session):\n\n1. Call `POST /internal-accounts/{id}/export` with the request body `{ "clientPublicKey": "..." }` and no signature headers. Grid binds the `clientPublicKey` into the `payloadToSign` it returns, so the subsequent stamp in `Grid-Wallet-Signature` commits to the target encryption key. The response is `202` with `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of a verified authentication credential on the same internal account to build an API-key stamp over `payloadToSign`, then retry with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The retry body must carry the **same** `clientPublicKey` submitted in step 1 — Grid rejects the retry with `401` if it disagrees with what was bound into `payloadToSign`. The signed retry returns `200` with `encryptedWalletCredentials`, which the client decrypts with the matching private key.\n\nThe `clientPublicKey` is ephemeral: generate a fresh P-256 keypair for this export and discard the private key after decrypting. Do not reuse the keypair from any prior verify call — that private key was already discarded after decrypting the session signing key it was issued against.\n', - stainlessPath: '(resource) internal_accounts > (method) export', - qualified: 'client.internalAccounts.export', - params: [ - 'id: string;', - 'clientPublicKey: string;', - 'Grid-Wallet-Signature?: string;', - 'Request-Id?: string;', - ], - response: '{ id: string; encryptedWalletCredentials: string; }', - markdown: - "## export\n\n`client.internalAccounts.export(id: string, clientPublicKey: string, Grid-Wallet-Signature?: string, Request-Id?: string): { id: string; encryptedWalletCredentials: string; }`\n\n**post** `/internal-accounts/{id}/export`\n\nExport the wallet credentials of an Embedded Wallet internal account. The returned wallet credentials are HPKE-encrypted to the `clientPublicKey` supplied in the request body.\n\nExport is a two-step signed-retry flow (same pattern as add-additional credential, revoke credential, and revoke session):\n\n1. Call `POST /internal-accounts/{id}/export` with the request body `{ \"clientPublicKey\": \"...\" }` and no signature headers. Grid binds the `clientPublicKey` into the `payloadToSign` it returns, so the subsequent stamp in `Grid-Wallet-Signature` commits to the target encryption key. The response is `202` with `payloadToSign`, `requestId`, and `expiresAt`.\n\n2. Use the session API keypair of a verified authentication credential on the same internal account to build an API-key stamp over `payloadToSign`, then retry with that full stamp as the `Grid-Wallet-Signature` header and the `requestId` echoed back as the `Request-Id` header. The retry body must carry the **same** `clientPublicKey` submitted in step 1 — Grid rejects the retry with `401` if it disagrees with what was bound into `payloadToSign`. The signed retry returns `200` with `encryptedWalletCredentials`, which the client decrypts with the matching private key.\n\nThe `clientPublicKey` is ephemeral: generate a fresh P-256 keypair for this export and discard the private key after decrypting. Do not reuse the keypair from any prior verify call — that private key was already discarded after decrypting the session signing key it was issued against.\n\n\n### Parameters\n\n- `id: string`\n\n- `clientPublicKey: string`\n Fresh P-256 public key, uncompressed SEC1 hex — 130 hex chars where the first two are `04` (the uncompressed-point indicator). Generate a new keypair for each export and discard the private key after decrypting the response.\n\n- `Grid-Wallet-Signature?: string`\n\n- `Request-Id?: string`\n\n### Returns\n\n- `{ id: string; encryptedWalletCredentials: string; }`\n\n - `id: string`\n - `encryptedWalletCredentials: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.internalAccounts.export('id', { clientPublicKey: '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2' });\n\nconsole.log(response);\n```", - perLanguage: { - typescript: { - method: 'client.internalAccounts.export', - example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.internalAccounts.export('id', {\n clientPublicKey:\n '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2',\n});\n\nconsole.log(response.id);", - }, - python: { - method: 'internal_accounts.export', - example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.internal_accounts.export(\n id="id",\n client_public_key="04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2",\n)\nprint(response.id)', - }, - kotlin: { - method: 'internalAccounts().export', - example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.internalaccounts.InternalAccountExportParams\nimport com.lightspark.grid.models.internalaccounts.InternalAccountExportResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: InternalAccountExportParams = InternalAccountExportParams.builder()\n .id("id")\n .clientPublicKey("04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2")\n .build()\n val response: InternalAccountExportResponse = client.internalAccounts().export(params)\n}', - }, - http: { - example: - 'curl https://api.lightspark.com/grid/2025-10-13/internal-accounts/$ID/export \\\n -H \'Content-Type: application/json\' \\\n -u "$GRID_CLIENT_ID:GRID_CLIENT_SECRET" \\\n -d \'{\n "clientPublicKey": "04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2"\n }\'', - }, - }, - }, { name: 'create', endpoint: '/agents', @@ -2597,24 +2594,24 @@ const EMBEDDED_METHODS: MethodEntry[] = [ "policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; };", ], response: - '{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }', + '{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }', markdown: - "## create\n\n`client.agents.create(customerId: string, name: string, policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }): { agent: object; deviceCode: object; }`\n\n**post** `/agents`\n\nCreate a new agent with a specified policy. Returns the created agent and a device code that must be redeemed by the agent software to complete installation.\n\n\n### Parameters\n\n- `customerId: string`\n The ID of the customer this agent will operate on behalf of.\n\n- `name: string`\n Human-readable name to identify the agent.\n\n- `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n Policy governing what an agent can do, how it executes actions, and its spending boundaries.\n - `defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n - `permissions: string[]`\n List of permissions granted to the agent.\n - `spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }`\n Spending limits that cap the agent's transaction amounts and frequency. All amount fields are integers in the smallest unit of the specified currency. When a transaction is denominated in a different currency, Grid converts using the exchange rate at evaluation time.\n - `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n\n### Returns\n\n- `{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: object; updatedAt: string; usage: object; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }`\n Response returned when an agent is created, including the agent and a device code for installation.\n\n - `agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: object[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n - `deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n},\n});\n\nconsole.log(agent);\n```", + "## create\n\n`client.agents.create(customerId: string, name: string, policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }): { agent: agent; deviceCode: agent_device_code; }`\n\n**post** `/agents`\n\nCreate a new agent with a specified policy. Returns the created agent and a device code that must be redeemed by the agent software to complete installation.\n\n\n### Parameters\n\n- `customerId: string`\n The ID of the customer this agent will operate on behalf of.\n\n- `name: string`\n Human-readable name to identify the agent.\n\n- `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n Policy governing what an agent can do, how it executes actions, and its spending boundaries.\n - `defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n - `permissions: string[]`\n List of permissions granted to the agent.\n - `spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }`\n Spending limits that cap the agent's transaction amounts and frequency. All amount fields are integers in the smallest unit of the specified currency. When a transaction is denominated in a different currency, Grid converts using the exchange rate at evaluation time.\n - `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n\n### Returns\n\n- `{ agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }; deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }; }`\n Response returned when an agent is created, including the agent and a device code for installation.\n\n - `agent: { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n - `deviceCode: { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentCreateResponse = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n},\n});\n\nconsole.log(agentCreateResponse);\n```", perLanguage: { typescript: { method: 'client.agents.create', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n },\n});\n\nconsole.log(agent.agent);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agentCreateResponse = await client.agents.create({\n customerId: 'Customer:019542f5-b3e7-1d02-0000-000000000001',\n name: 'Payroll Automation Agent',\n policy: {\n defaultExecutionMode: 'AUTO',\n permissions: ['VIEW_TRANSACTIONS'],\n spendingLimits: { currency: 'USD', perTransactionLimit: 50000 },\n },\n});\n\nconsole.log(agentCreateResponse.agent);", }, python: { method: 'agents.create', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent = client.agents.create(\n customer_id="Customer:019542f5-b3e7-1d02-0000-000000000001",\n name="Payroll Automation Agent",\n policy={\n "default_execution_mode": "AUTO",\n "permissions": ["VIEW_TRANSACTIONS"],\n "spending_limits": {\n "currency": "USD",\n "per_transaction_limit": 50000,\n },\n },\n)\nprint(agent.agent)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent_create_response = client.agents.create(\n customer_id="Customer:019542f5-b3e7-1d02-0000-000000000001",\n name="Payroll Automation Agent",\n policy={\n "default_execution_mode": "AUTO",\n "permissions": ["VIEW_TRANSACTIONS"],\n "spending_limits": {\n "currency": "USD",\n "per_transaction_limit": 50000,\n },\n },\n)\nprint(agent_create_response.agent)', }, kotlin: { method: 'agents().create', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentCreateParams\nimport com.lightspark.grid.models.agents.AgentCreateResponse\nimport com.lightspark.grid.models.agents.AgentPolicy\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: AgentCreateParams = AgentCreateParams.builder()\n .customerId("Customer:019542f5-b3e7-1d02-0000-000000000001")\n .name("Payroll Automation Agent")\n .policy(AgentPolicy.builder()\n .defaultExecutionMode(AgentPolicy.DefaultExecutionMode.AUTO)\n .addPermission(AgentPolicy.Permission.VIEW_TRANSACTIONS)\n .spendingLimits(AgentPolicy.SpendingLimits.builder()\n .currency("USD")\n .perTransactionLimit(50000L)\n .build())\n .build())\n .build()\n val agent: AgentCreateResponse = client.agents().create(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentCreateRequest\nimport com.lightspark.grid.models.agents.AgentCreateResponse\nimport com.lightspark.grid.models.agents.AgentPolicy\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: AgentCreateRequest = AgentCreateRequest.builder()\n .customerId("Customer:019542f5-b3e7-1d02-0000-000000000001")\n .name("Payroll Automation Agent")\n .policy(AgentPolicy.builder()\n .defaultExecutionMode(AgentPolicy.DefaultExecutionMode.AUTO)\n .addPermission(AgentPolicy.Permission.VIEW_TRANSACTIONS)\n .spendingLimits(AgentPolicy.SpendingLimits.builder()\n .currency("USD")\n .perTransactionLimit(50000L)\n .build())\n .build())\n .build()\n val agentCreateResponse: AgentCreateResponse = client.agents().create(params)\n}', }, http: { example: @@ -2644,12 +2641,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## list\n\n`client.agents.list(createdAfter?: string, createdBefore?: string, cursor?: string, customerId?: string, isConnected?: boolean, isPaused?: boolean, limit?: number, updatedAfter?: string, updatedBefore?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**get** `/agents`\n\nRetrieve a paginated list of agents for the authenticated platform.\n\n### Parameters\n\n- `createdAfter?: string`\n Filter agents created after this timestamp (inclusive)\n\n- `createdBefore?: string`\n Filter agents created before this timestamp (inclusive)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `isConnected?: boolean`\n Filter by connection status (whether the device code has been redeemed)\n\n- `isPaused?: boolean`\n Filter by paused status\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `updatedAfter?: string`\n Filter agents updated after this timestamp (inclusive)\n\n- `updatedBefore?: string`\n Filter agents updated before this timestamp (inclusive)\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListResponse of client.agents.list()) {\n console.log(agentListResponse);\n}\n```", + "## list\n\n`client.agents.list(createdAfter?: string, createdBefore?: string, cursor?: string, customerId?: string, isConnected?: boolean, isPaused?: boolean, limit?: number, updatedAfter?: string, updatedBefore?: string): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**get** `/agents`\n\nRetrieve a paginated list of agents for the authenticated platform.\n\n### Parameters\n\n- `createdAfter?: string`\n Filter agents created after this timestamp (inclusive)\n\n- `createdBefore?: string`\n Filter agents created before this timestamp (inclusive)\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `isConnected?: boolean`\n Filter by connection status (whether the device code has been redeemed)\n\n- `isPaused?: boolean`\n Filter by paused status\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `updatedAfter?: string`\n Filter agents updated after this timestamp (inclusive)\n\n- `updatedBefore?: string`\n Filter agents updated before this timestamp (inclusive)\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agent of client.agents.list()) {\n console.log(agent);\n}\n```", perLanguage: { typescript: { method: 'client.agents.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentListResponse of client.agents.list()) {\n console.log(agentListResponse.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agent of client.agents.list()) {\n console.log(agent.id);\n}", }, python: { method: 'agents.list', @@ -2688,12 +2685,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## list_approvals\n\n`client.agents.listApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse);\n}\n```", + "## list_approvals\n\n`client.agents.listApprovals(agentId?: string, cursor?: string, customerId?: string, endDate?: string, limit?: number, sortOrder?: 'asc' | 'desc', startDate?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/approvals`\n\nRetrieve a paginated list of agent actions that require platform approval. Filter by `agentId` or `customerId` to scope results to a specific agent or customer. Approve or reject individual actions via `POST /agents/{agentId}/actions/{actionId}/approve` or `POST /agents/{agentId}/actions/{actionId}/reject`.\n\n\n### Parameters\n\n- `agentId?: string`\n Filter by agent ID\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `customerId?: string`\n Filter by customer ID\n\n- `endDate?: string`\n Filter by end date (inclusive) in ISO 8601 format\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `sortOrder?: 'asc' | 'desc'`\n Order to sort results in\n\n- `startDate?: string`\n Filter by start date (inclusive) in ISO 8601 format\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentAction of client.agents.listApprovals()) {\n console.log(agentAction);\n}\n```", perLanguage: { typescript: { method: 'client.agents.listApprovals', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentListApprovalsResponse of client.agents.listApprovals()) {\n console.log(agentListApprovalsResponse.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentAction of client.agents.listApprovals()) {\n console.log(agentAction.id);\n}", }, python: { method: 'agents.list_approvals', @@ -2738,7 +2735,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ kotlin: { method: 'agents().retrieve', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentRetrieveParams\nimport com.lightspark.grid.models.agents.AgentRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agent: AgentRetrieveResponse = client.agents().retrieve("agentId")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.Agent\nimport com.lightspark.grid.models.agents.AgentRetrieveParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agent: Agent = client.agents().retrieve("agentId")\n}', }, http: { example: @@ -2773,7 +2770,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ kotlin: { method: 'agents().update', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentUpdateParams\nimport com.lightspark.grid.models.agents.AgentUpdateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agent: AgentUpdateResponse = client.agents().update("agentId")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.Agent\nimport com.lightspark.grid.models.agents.AgentUpdateParams\nimport com.lightspark.grid.models.agents.AgentUpdateRequest\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: AgentUpdateParams = AgentUpdateParams.builder()\n .agentId("agentId")\n .agentUpdateRequest(AgentUpdateRequest.builder().build())\n .build()\n val agent: Agent = client.agents().update(params)\n}', }, http: { example: @@ -2834,22 +2831,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## update_policy\n\n`client.agents.updatePolicy(agentId: string, accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }, approvalThresholds?: { amount?: number; currency?: string; }, defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED', permissions?: string[], spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**patch** `/agents/{agentId}/policy`\n\nPartially update an agent's policy. Only provided fields will be updated; omitted fields retain their current values. Policy changes take effect immediately.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]`\n Per-account rules that override the agent's default policy for specific accounts.\n - `allowedAccountIds?: string[]`\n If set, restricts the agent to operate only on the specified internal account IDs. Null means the agent can access all accounts.\n\n- `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n - `amount?: number`\n If set, any transaction above this amount (in the smallest unit of the specified currency) will require explicit approval even when the agent's defaultExecutionMode is AUTO. Null means no threshold override.\n - `currency?: string`\n ISO 4217 currency code that the amount threshold is denominated in. Required when amount is set.\n\n- `defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n\n- `permissions?: string[]`\n Updated list of permissions. Replaces the entire permissions list when provided.\n\n- `spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }`\n Partial update to spending limits. Only provided fields will be updated; omitted fields retain their current values.\n - `currency?: string`\n ISO 4217 currency code that all amount limits are denominated in. Updating this recasts all existing limits into the new currency denomination.\n - `dailyLimit?: number`\n Maximum daily spend. Set to null to remove the daily limit.\n - `dailyTransactionLimit?: number`\n Maximum number of transactions per day.\n - `monthlyLimit?: number`\n Maximum monthly spend. Set to null to remove the monthly limit.\n - `perTransactionLimit?: number`\n Maximum amount per transaction.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.updatePolicy('agentId');\n\nconsole.log(response);\n```", + "## update_policy\n\n`client.agents.updatePolicy(agentId: string, accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }, approvalThresholds?: { amount?: number; currency?: string; }, defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED', permissions?: string[], spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**patch** `/agents/{agentId}/policy`\n\nPartially update an agent's policy. Only provided fields will be updated; omitted fields retain their current values. Policy changes take effect immediately.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }`\n Optional restrictions that limit the agent to specific accounts or override policy per account.\n - `accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]`\n Per-account rules that override the agent's default policy for specific accounts.\n - `allowedAccountIds?: string[]`\n If set, restricts the agent to operate only on the specified internal account IDs. Null means the agent can access all accounts.\n\n- `approvalThresholds?: { amount?: number; currency?: string; }`\n Thresholds that force approval for high-value transactions, overriding the default execution mode. When a transaction is denominated in a different currency than the threshold, Grid converts using the exchange rate at evaluation time.\n - `amount?: number`\n If set, any transaction above this amount (in the smallest unit of the specified currency) will require explicit approval even when the agent's defaultExecutionMode is AUTO. Null means no threshold override.\n - `currency?: string`\n ISO 4217 currency code that the amount threshold is denominated in. Required when amount is set.\n\n- `defaultExecutionMode?: 'AUTO' | 'APPROVAL_REQUIRED'`\n Execution mode controlling whether agent actions require human approval. AUTO: The agent can execute actions autonomously without explicit approval. APPROVAL_REQUIRED: All agent actions require explicit human approval before execution.\n\n- `permissions?: string[]`\n Updated list of permissions. Replaces the entire permissions list when provided.\n\n- `spendingLimits?: { currency?: string; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; perTransactionLimit?: number; }`\n Partial update to spending limits. Only provided fields will be updated; omitted fields retain their current values.\n - `currency?: string`\n ISO 4217 currency code that all amount limits are denominated in. Updating this recasts all existing limits into the new currency denomination.\n - `dailyLimit?: number`\n Maximum daily spend. Set to null to remove the daily limit.\n - `dailyTransactionLimit?: number`\n Maximum number of transactions per day.\n - `monthlyLimit?: number`\n Maximum monthly spend. Set to null to remove the monthly limit.\n - `perTransactionLimit?: number`\n Maximum amount per transaction.\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.updatePolicy('agentId');\n\nconsole.log(agent);\n```", perLanguage: { typescript: { method: 'client.agents.updatePolicy', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.updatePolicy('agentId');\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.updatePolicy('agentId');\n\nconsole.log(agent.id);", }, python: { method: 'agents.update_policy', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.update_policy(\n agent_id="agentId",\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent = client.agents.update_policy(\n agent_id="agentId",\n)\nprint(agent.id)', }, kotlin: { method: 'agents().updatePolicy', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentUpdatePolicyParams\nimport com.lightspark.grid.models.agents.AgentUpdatePolicyResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: AgentUpdatePolicyResponse = client.agents().updatePolicy("agentId")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.Agent\nimport com.lightspark.grid.models.agents.AgentUpdatePolicyParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agent: Agent = client.agents().updatePolicy("agentId")\n}', }, http: { example: @@ -2869,22 +2866,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }", markdown: - "## retrieve\n\n`client.agents.me.retrieve(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me);\n```", + "## retrieve\n\n`client.agents.me.retrieve(): { id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: agent_policy; updatedAt: string; usage: agent_usage; }`\n\n**get** `/agents/me`\n\nRetrieve the authenticated agent's own profile, policy, and current usage. This endpoint is called by the agent software itself using its own credentials (obtained via device code redemption) rather than platform credentials.\n\n\n### Returns\n\n- `{ id: string; createdAt: string; customerId: string; isConnected: boolean; isPaused: boolean; name: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; updatedAt: string; usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }; }`\n A programmatic agent with scoped permissions and a spending policy, used to automate payment workflows.\n\n - `id: string`\n - `createdAt: string`\n - `customerId: string`\n - `isConnected: boolean`\n - `isPaused: boolean`\n - `name: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n - `updatedAt: string`\n - `usage: { dailySpend: number; dailyTransactionCount: number; monthlySpend: number; dailyResetDate?: string; monthlyResetMonth?: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agent = await client.agents.me.retrieve();\n\nconsole.log(agent);\n```", perLanguage: { typescript: { method: 'client.agents.me.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst me = await client.agents.me.retrieve();\n\nconsole.log(me.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst agent = await client.agents.me.retrieve();\n\nconsole.log(agent.id);", }, python: { method: 'agents.me.retrieve', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nme = client.agents.me.retrieve()\nprint(me.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nagent = client.agents.me.retrieve()\nprint(agent.id)', }, kotlin: { method: 'agents().me().retrieve', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeRetrieveParams\nimport com.lightspark.grid.models.agents.me.MeRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val me: MeRetrieveResponse = client.agents().me().retrieve()\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.Agent\nimport com.lightspark.grid.models.agents.me.MeRetrieveParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agent: Agent = client.agents().me().retrieve()\n}', }, http: { example: @@ -2910,22 +2907,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_in\n\n`client.agents.me.createTransferIn(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/transfer-in`\n\nTransfer funds from an external account to an internal account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nThis endpoint should only be used for external account sources with pull functionality (e.g. ACH Pull). Otherwise, use the payment instructions on the internal account to deposit funds.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `source: { accountId: string; }`\n Source external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n});\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.me.createTransferIn', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.me.createTransferIn({\n destination: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n source: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n amount: 12550,\n});\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.me.create_transfer_in', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nresponse = client.agents.me.create_transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nagent_action = client.agents.me.create_transfer_in(\n destination={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n source={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n amount=12550,\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().me().createTransferIn', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferInParams = MeCreateTransferInParams.builder()\n .destination(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .source(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val response: MeCreateTransferInResponse = client.agents().me().createTransferIn(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.me.MeCreateTransferInParams\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferInParams = MeCreateTransferInParams.builder()\n .destination(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .source(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .build()\n val agentAction: AgentAction = client.agents().me().createTransferIn(params)\n}', }, http: { example: @@ -2951,22 +2948,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(response);\n```", + "## create_transfer_out\n\n`client.agents.me.createTransferOut(destination: { accountId: string; }, source: { accountId: string; }, amount?: number, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/transfer-out`\n\nTransfer funds from an internal account to an external account for the authenticated agent's customer. Accounts must belong to the agent's customer. Requires the CREATE_TRANSFERS permission in the agent's policy.\nIf the agent's policy requires approval for this amount, the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\n\n\n### Parameters\n\n- `destination: { accountId: string; }`\n Destination external account details\n - `accountId: string`\n Reference to an external account ID\n\n- `source: { accountId: string; }`\n Source internal account details\n - `accountId: string`\n Reference to an internal account ID\n\n- `amount?: number`\n Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n});\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.me.createTransferOut', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.me.createTransferOut({\n destination: { accountId: 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965' },\n source: { accountId: 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123' },\n amount: 12550,\n});\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.me.create_transfer_out', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nresponse = client.agents.me.create_transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nagent_action = client.agents.me.create_transfer_out(\n destination={\n "account_id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"\n },\n source={\n "account_id": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"\n },\n amount=12550,\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().me().createTransferOut', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutParams\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutResponse\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferOutParams = MeCreateTransferOutParams.builder()\n .destination(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .source(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .build()\n val response: MeCreateTransferOutResponse = client.agents().me().createTransferOut(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.me.MeCreateTransferOutParams\nimport com.lightspark.grid.models.transferin.ExternalAccountReference\nimport com.lightspark.grid.models.transferin.InternalAccountReference\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: MeCreateTransferOutParams = MeCreateTransferOutParams.builder()\n .destination(ExternalAccountReference.builder()\n .accountId("ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965")\n .build())\n .source(InternalAccountReference.builder()\n .accountId("InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123")\n .build())\n .build()\n val agentAction: AgentAction = client.agents().me().createTransferOut(params)\n}', }, http: { example: @@ -3195,22 +3192,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## execute\n\n`client.agents.me.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/quotes/{quoteId}/execute`\n\nExecute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(response);\n```", + "## execute\n\n`client.agents.me.quotes.execute(quoteId: string, Grid-Wallet-Signature?: string, Idempotency-Key?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/me/quotes/{quoteId}/execute`\n\nExecute a quote created by the authenticated agent. Requires the EXECUTE_QUOTES permission in the agent's policy.\nIf the agent's policy requires approval for this amount (based on execution mode or approval thresholds), the transaction will be created in a pending state and must be approved by the platform via `POST /agents/{agentId}/actions/{actionId}/approve`.\nOnce executed, the quote cannot be cancelled.\n\n\n### Parameters\n\n- `quoteId: string`\n\n- `Grid-Wallet-Signature?: string`\n\n- `Idempotency-Key?: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.me.quotes.execute('Quote:019542f5-b3e7-1d02-0000-000000000001');\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.me.quotes.execute', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.me.quotes.execute(\n 'Quote:019542f5-b3e7-1d02-0000-000000000001',\n);\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.me.quotes.execute(\n 'Quote:019542f5-b3e7-1d02-0000-000000000001',\n);\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.me.quotes.execute', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nresponse = client.agents.me.quotes.execute(\n quote_id="Quote:019542f5-b3e7-1d02-0000-000000000001",\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nagent_action = client.agents.me.quotes.execute(\n quote_id="Quote:019542f5-b3e7-1d02-0000-000000000001",\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().me().quotes().execute', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.quotes.QuoteExecuteParams\nimport com.lightspark.grid.models.agents.me.quotes.QuoteExecuteResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: QuoteExecuteResponse = client.agents().me().quotes().execute("Quote:019542f5-b3e7-1d02-0000-000000000001")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.me.quotes.QuoteExecuteParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agentAction: AgentAction = client.agents().me().quotes().execute("Quote:019542f5-b3e7-1d02-0000-000000000001")\n}', }, http: { example: @@ -3383,12 +3380,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse);\n}\n```", + "## list\n\n`client.agents.me.actions.list(cursor?: string, limit?: number, status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/me/actions`\n\nRetrieve a paginated list of actions submitted by the authenticated agent. Use this to poll for approval decisions after submitting an action that requires approval.\n\n\n### Parameters\n\n- `cursor?: string`\n Cursor for pagination (returned from previous request)\n\n- `limit?: number`\n Maximum number of results to return (default 20, max 100)\n\n- `status?: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n Filter by action status\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\n// Automatically fetches more pages as needed.\nfor await (const agentAction of client.agents.me.actions.list()) {\n console.log(agentAction);\n}\n```", perLanguage: { typescript: { method: 'client.agents.me.actions.list', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const actionListResponse of client.agents.me.actions.list()) {\n console.log(actionListResponse.id);\n}", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const agentAction of client.agents.me.actions.list()) {\n console.log(agentAction.id);\n}", }, python: { method: 'agents.me.actions.list', @@ -3419,22 +3416,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action);\n```", + "## retrieve\n\n`client.agents.me.actions.retrieve(actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**get** `/agents/me/actions/{actionId}`\n\nRetrieve a specific action submitted by the authenticated agent. Poll this endpoint after submitting an action that requires approval to check whether it has been approved, rejected, or has failed.\n\n\n### Parameters\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.me.actions.retrieve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst action = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(action.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n agentAccessToken: process.env['GRID_AGENT_ACCESS_TOKEN'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.me.actions.retrieve('actionId');\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.me.actions.retrieve', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\naction = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(action.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n agent_access_token=os.environ.get("GRID_AGENT_ACCESS_TOKEN"), # This is the default and can be omitted\n)\nagent_action = client.agents.me.actions.retrieve(\n "actionId",\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().me().actions().retrieve', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val action: ActionRetrieveResponse = client.agents().me().actions().retrieve("actionId")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.me.actions.ActionRetrieveParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agentAction: AgentAction = client.agents().me().actions().retrieve("actionId")\n}', }, http: { example: @@ -3454,22 +3451,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ params: ['agentId: string;'], response: '{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }', markdown: - "## regenerate\n\n`client.agents.deviceCodes.regenerate(agentId: string): { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n**post** `/agents/{agentId}/device-codes`\n\nGenerate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n - `agentId: string`\n - `code: string`\n - `expiresAt: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response);\n```", + "## regenerate\n\n`client.agents.deviceCodes.regenerate(agentId: string): { agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n**post** `/agents/{agentId}/device-codes`\n\nGenerate a new device code for an existing agent. Use this when the original device code has expired before being redeemed, or when the agent software needs to be reinstalled. Any previously issued unredeemed device codes for this agent are invalidated.\n\n\n### Parameters\n\n- `agentId: string`\n\n### Returns\n\n- `{ agentId: string; code: string; expiresAt: string; redeemed: boolean; }`\n\n - `agentId: string`\n - `code: string`\n - `expiresAt: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentDeviceCode = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(agentDeviceCode);\n```", perLanguage: { typescript: { method: 'client.agents.deviceCodes.regenerate', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(response.agentId);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agentDeviceCode = await client.agents.deviceCodes.regenerate('agentId');\n\nconsole.log(agentDeviceCode.agentId);", }, python: { method: 'agents.device_codes.regenerate', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.regenerate(\n "agentId",\n)\nprint(response.agent_id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent_device_code = client.agents.device_codes.regenerate(\n "agentId",\n)\nprint(agent_device_code.agent_id)', }, kotlin: { method: 'agents().deviceCodes().regenerate', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRegenerateResponse = client.agents().deviceCodes().regenerate("agentId")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentDeviceCode\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRegenerateParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agentDeviceCode: AgentDeviceCode = client.agents().deviceCodes().regenerate("agentId")\n}', }, http: { example: @@ -3489,22 +3486,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ params: ['code: string;'], response: '{ code: string; redeemed: boolean; }', markdown: - "## get_status\n\n`client.agents.deviceCodes.getStatus(code: string): { code: string; redeemed: boolean; }`\n\n**get** `/agents/device-codes/{code}/status`\n\nCheck whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ code: string; redeemed: boolean; }`\n\n - `code: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response);\n```", + "## get_status\n\n`client.agents.deviceCodes.getStatus(code: string): { code: string; redeemed: boolean; }`\n\n**get** `/agents/device-codes/{code}/status`\n\nCheck whether a device code has been redeemed. Use this to poll for agent installation completion after creating an agent.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ code: string; redeemed: boolean; }`\n\n - `code: string`\n - `redeemed: boolean`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentDeviceCodeStatusResponse = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(agentDeviceCodeStatusResponse);\n```", perLanguage: { typescript: { method: 'client.agents.deviceCodes.getStatus', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(response.code);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agentDeviceCodeStatusResponse = await client.agents.deviceCodes.getStatus('code');\n\nconsole.log(agentDeviceCodeStatusResponse.code);", }, python: { method: 'agents.device_codes.get_status', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.device_codes.get_status(\n "code",\n)\nprint(response.code)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent_device_code_status_response = client.agents.device_codes.get_status(\n "code",\n)\nprint(agent_device_code_status_response.code)', }, kotlin: { method: 'agents().deviceCodes().getStatus', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeGetStatusResponse = client.agents().deviceCodes().getStatus("code")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentDeviceCodeStatusResponse\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeGetStatusParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agentDeviceCodeStatusResponse: AgentDeviceCodeStatusResponse = client.agents().deviceCodes().getStatus("code")\n}', }, http: { example: @@ -3525,22 +3522,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; }", markdown: - "## redeem\n\n`client.agents.deviceCodes.redeem(code: string): { accessToken: string; agentId: string; agentName: string; policy: agent_policy; }`\n\n**post** `/agents/device-codes/{code}/redeem`\n\nRedeem a device code to obtain agent credentials. This endpoint is called by the agent software during installation. On success, returns a Bearer access token that the agent uses for all subsequent API calls. The token is returned only once and must be stored securely.\nThis endpoint does not require platform authentication — the device code itself serves as proof of authorization.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; }`\n\n - `accessToken: string`\n - `agentId: string`\n - `agentName: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(response);\n```", + "## redeem\n\n`client.agents.deviceCodes.redeem(code: string): { accessToken: string; agentId: string; agentName: string; policy: agent_policy; }`\n\n**post** `/agents/device-codes/{code}/redeem`\n\nRedeem a device code to obtain agent credentials. This endpoint is called by the agent software during installation. On success, returns a Bearer access token that the agent uses for all subsequent API calls. The token is returned only once and must be stored securely.\nThis endpoint does not require platform authentication — the device code itself serves as proof of authorization.\n\n\n### Parameters\n\n- `code: string`\n\n### Returns\n\n- `{ accessToken: string; agentId: string; agentName: string; policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: object; accountRestrictions?: object; approvalThresholds?: object; }; }`\n\n - `accessToken: string`\n - `agentId: string`\n - `agentName: string`\n - `policy: { defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; permissions: string[]; spendingLimits: { currency: string; perTransactionLimit: number; dailyLimit?: number; dailyTransactionLimit?: number; monthlyLimit?: number; }; accountRestrictions?: { accountRules?: { accountId: string; executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; perTransactionLimit?: number; }[]; allowedAccountIds?: string[]; }; approvalThresholds?: { amount?: number; currency?: string; }; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentDeviceCodeRedeemResponse = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(agentDeviceCodeRedeemResponse);\n```", perLanguage: { typescript: { method: 'client.agents.deviceCodes.redeem', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(response.accessToken);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentDeviceCodeRedeemResponse = await client.agents.deviceCodes.redeem('code');\n\nconsole.log(agentDeviceCodeRedeemResponse.accessToken);", }, python: { method: 'agents.device_codes.redeem', example: - 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nresponse = client.agents.device_codes.redeem(\n "code",\n)\nprint(response.access_token)', + 'from grid import LightsparkGrid\n\nclient = LightsparkGrid()\nagent_device_code_redeem_response = client.agents.device_codes.redeem(\n "code",\n)\nprint(agent_device_code_redeem_response.access_token)', }, kotlin: { method: 'agents().deviceCodes().redeem', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRedeemParams\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRedeemResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val response: DeviceCodeRedeemResponse = client.agents().deviceCodes().redeem("code")\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentDeviceCodeRedeemResponse\nimport com.lightspark.grid.models.agents.devicecodes.DeviceCodeRedeemParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val agentDeviceCodeRedeemResponse: AgentDeviceCodeRedeemResponse = client.agents().deviceCodes().redeem("code")\n}', }, http: { example: @@ -3561,22 +3558,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## approve\n\n`client.agents.transactions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## approve\n\n`client.agents.transactions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.transactions.approve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.transactions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.transactions.approve', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.transactions.approve(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent_action = client.agents.transactions.approve(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().transactions().approve', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.transactions.TransactionApproveParams\nimport com.lightspark.grid.models.agents.transactions.TransactionApproveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: TransactionApproveParams = TransactionApproveParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: TransactionApproveResponse = client.agents().transactions().approve(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.transactions.TransactionApproveParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: TransactionApproveParams = TransactionApproveParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val agentAction: AgentAction = client.agents().transactions().approve(params)\n}', }, http: { example: @@ -3597,22 +3594,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## reject\n\n`client.agents.transactions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## reject\n\n`client.agents.transactions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.transactions.reject', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.transactions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.transactions.reject', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.transactions.reject(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent_action = client.agents.transactions.reject(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().transactions().reject', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.transactions.TransactionRejectParams\nimport com.lightspark.grid.models.agents.transactions.TransactionRejectResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: TransactionRejectParams = TransactionRejectParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: TransactionRejectResponse = client.agents().transactions().reject(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.transactions.TransactionRejectParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: TransactionRejectParams = TransactionRejectParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val agentAction: AgentAction = client.agents().transactions().reject(params)\n}', }, http: { example: @@ -3633,22 +3630,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## approve\n\n`client.agents.actions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## approve\n\n`client.agents.actions.approve(agentId: string, actionId: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/approve`\n\nApprove a pending agent action, allowing Grid to proceed with execution. The action must have status `PENDING_APPROVAL`. Once approved, Grid executes the underlying operation (quote execution or transfer) and the action transitions to `APPROVED`.\nFor `EXECUTE_QUOTE` actions, note that the underlying quote may have expired between submission and approval — in that case the action will transition to `FAILED` instead.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.actions.approve', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.actions.approve('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.actions.approve', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.actions.approve(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent_action = client.agents.actions.approve(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().actions().approve', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.actions.ActionApproveParams\nimport com.lightspark.grid.models.agents.actions.ActionApproveResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ActionApproveParams = ActionApproveParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: ActionApproveResponse = client.agents().actions().approve(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.actions.ActionApproveParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ActionApproveParams = ActionApproveParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val agentAction: AgentAction = client.agents().actions().approve(params)\n}', }, http: { example: @@ -3669,22 +3666,22 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }", markdown: - "## reject\n\n`client.agents.actions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response);\n```", + "## reject\n\n`client.agents.actions.reject(agentId: string, actionId: string, reason?: string): { id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: quote; rejectionReason?: string; transaction?: transaction; transferDetails?: agent_transfer_details; }`\n\n**post** `/agents/{agentId}/actions/{actionId}/reject`\n\nReject a pending agent action, preventing execution. The action must have status `PENDING_APPROVAL`. Once rejected, the action transitions to `REJECTED` and the underlying operation is not executed.\nThis endpoint is called by the platform's backend using platform credentials, not by the agent itself.\n\n\n### Parameters\n\n- `agentId: string`\n\n- `actionId: string`\n\n- `reason?: string`\n Optional human-readable reason for the rejection, stored on the action and visible to the platform.\n\n### Returns\n\n- `{ id: string; agentId: string; createdAt: string; customerId: string; platformCustomerId: string; status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; updatedAt: string; quote?: { id: string; createdAt: string; destination: quote_destination_one_of; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: currency; sendingCurrency: currency; source: quote_source_one_of; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: payment_instructions[]; rateDetails?: outgoing_rate_details; }; rejectionReason?: string; transaction?: object | object; transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }; }`\n An action submitted by an agent that may require platform approval before execution. All agent-initiated operations (quote execution, transfers) are represented as AgentActions, giving the platform a consistent object to approve, reject, and audit regardless of the underlying operation type.\n\n - `id: string`\n - `agentId: string`\n - `createdAt: string`\n - `customerId: string`\n - `platformCustomerId: string`\n - `status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'`\n - `type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'`\n - `updatedAt: string`\n - `quote?: { id: string; createdAt: string; destination: { accountId: string; destinationType: 'ACCOUNT'; paymentRail?: string; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; currency?: string; }; exchangeRate: number; expiresAt: string; feesIncluded: number; receivingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; sendingCurrency: { code?: string; decimals?: number; name?: string; symbol?: string; }; source: { accountId: string; sourceType: 'ACCOUNT'; customerId?: string; } | { currency: string; sourceType: 'REALTIME_FUNDING'; cryptoNetwork?: string; customerId?: string; }; status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED'; totalReceivingAmount: number; totalSendingAmount: number; transactionId: string; counterpartyInformation?: object; paymentInstructions?: { accountOrWalletInfo: usd_account_info | object | mxn_account_info | dkk_account_info | eur_account_info | inr_account_info | ngn_account_info | cad_account_info | gbp_account_info | hkd_account_info | idr_account_info | myr_account_info | php_account_info | sgd_account_info | thb_account_info | vnd_account_info | aed_account_info | kes_account_info | mwk_account_info | rwf_account_info | tzs_account_info | ugx_account_info | xof_account_info | zar_account_info | zmw_account_info | bwp_account_info | xaf_account_info | bdt_account_info | object | object | egp_account_info | ghs_account_info | gtq_account_info | htg_account_info | jmd_account_info | pkr_account_info | object | object | object | object | object | object | object | object; instructionsNotes?: string; isPlatformAccount?: boolean; }[]; rateDetails?: { counterpartyFixedFee: number; counterpartyMultiplier: number; gridApiFixedFee: number; gridApiMultiplier: number; gridApiVariableFeeAmount: number; gridApiVariableFeeRate: number; }; }`\n - `rejectionReason?: string`\n - `transaction?: { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; receivedAmount: object; status: 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED'; type: 'INCOMING' | 'OUTGOING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; failureReason?: string; rateDetails?: object; reconciliationInstructions?: object; settledAt?: string; source?: object | object | object; updatedAt?: string; } | { id: string; customerId: string; destination: { accountId: string; destinationType: 'ACCOUNT'; } | { destinationType: 'UMA_ADDRESS'; umaAddress: string; }; platformCustomerId: string; sentAmount: object; source: object | object | object; status: 'PENDING' | 'EXPIRED' | 'PROCESSING' | 'COMPLETED' | 'FAILED'; type: 'OUTGOING' | 'INCOMING'; agentId?: string; counterpartyInformation?: object; createdAt?: string; description?: string; exchangeRate?: number; failureReason?: string; fees?: number; paymentInstructions?: object[]; quoteId?: string; rateDetails?: object; receivedAmount?: object; refund?: { initiatedAt: string; reference: string; status: 'PENDING' | 'COMPLETED' | 'FAILED'; reason?: 'TRANSACTION_FAILED' | 'USER_CANCELLATION' | 'TIMEOUT'; settledAt?: string; }; settledAt?: string; updatedAt?: string; }`\n - `transferDetails?: { amount: number; currency: string; destinationAccountId: string; sourceAccountId: string; }`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst agentAction = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction);\n```", perLanguage: { typescript: { method: 'client.agents.actions.reject', example: - "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst response = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(response.id);", + "import LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid({\n username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted\n password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted\n});\n\nconst agentAction = await client.agents.actions.reject('actionId', { agentId: 'agentId' });\n\nconsole.log(agentAction.id);", }, python: { method: 'agents.actions.reject', example: - 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nresponse = client.agents.actions.reject(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(response.id)', + 'import os\nfrom grid import LightsparkGrid\n\nclient = LightsparkGrid(\n username=os.environ.get("GRID_CLIENT_ID"), # This is the default and can be omitted\n password=os.environ.get("GRID_CLIENT_SECRET"), # This is the default and can be omitted\n)\nagent_action = client.agents.actions.reject(\n action_id="actionId",\n agent_id="agentId",\n)\nprint(agent_action.id)', }, kotlin: { method: 'agents().actions().reject', example: - 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.actions.ActionRejectParams\nimport com.lightspark.grid.models.agents.actions.ActionRejectResponse\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ActionRejectParams = ActionRejectParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val response: ActionRejectResponse = client.agents().actions().reject(params)\n}', + 'package com.lightspark.grid.example\n\nimport com.lightspark.grid.client.LightsparkGridClient\nimport com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient\nimport com.lightspark.grid.models.agents.AgentAction\nimport com.lightspark.grid.models.agents.actions.ActionRejectParams\n\nfun main() {\n val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()\n\n val params: ActionRejectParams = ActionRejectParams.builder()\n .agentId("agentId")\n .actionId("actionId")\n .build()\n val agentAction: AgentAction = client.agents().actions().reject(params)\n}', }, http: { example: diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts index 3c00aa6..1c0801d 100644 --- a/packages/mcp-server/src/methods.ts +++ b/packages/mcp-server/src/methods.ts @@ -52,6 +52,12 @@ export const sdkMethods: SdkMethod[] = [ httpMethod: 'delete', httpPath: '/customers/{customerId}', }, + { + clientCallName: 'client.customers.export', + fullyQualifiedName: 'customers.export', + httpMethod: 'post', + httpPath: '/internal-accounts/{id}/export', + }, { clientCallName: 'client.customers.getKYCLink', fullyQualifiedName: 'customers.getKYCLink', @@ -378,17 +384,17 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/auth/credentials', }, { - clientCallName: 'client.auth.credentials.resendChallenge', - fullyQualifiedName: 'auth.credentials.resendChallenge', - httpMethod: 'post', - httpPath: '/auth/credentials/{id}/challenge', - }, - { - clientCallName: 'client.auth.credentials.revoke', - fullyQualifiedName: 'auth.credentials.revoke', + clientCallName: 'client.auth.credentials.delete', + fullyQualifiedName: 'auth.credentials.delete', httpMethod: 'delete', httpPath: '/auth/credentials/{id}', }, + { + clientCallName: 'client.auth.credentials.challenge', + fullyQualifiedName: 'auth.credentials.challenge', + httpMethod: 'post', + httpPath: '/auth/credentials/{id}/challenge', + }, { clientCallName: 'client.auth.credentials.verify', fullyQualifiedName: 'auth.credentials.verify', @@ -402,17 +408,11 @@ export const sdkMethods: SdkMethod[] = [ httpPath: '/auth/sessions', }, { - clientCallName: 'client.auth.sessions.revoke', - fullyQualifiedName: 'auth.sessions.revoke', + clientCallName: 'client.auth.sessions.delete', + fullyQualifiedName: 'auth.sessions.delete', httpMethod: 'delete', httpPath: '/auth/sessions/{id}', }, - { - clientCallName: 'client.internalAccounts.export', - fullyQualifiedName: 'internalAccounts.export', - httpMethod: 'post', - httpPath: '/internal-accounts/{id}/export', - }, { clientCallName: 'client.agents.create', fullyQualifiedName: 'agents.create', diff --git a/scripts/detect-breaking-changes b/scripts/detect-breaking-changes index 4010ac7..c76d463 100755 --- a/scripts/detect-breaking-changes +++ b/scripts/detect-breaking-changes @@ -34,7 +34,6 @@ TEST_PATHS=( tests/api-resources/auth/auth.test.ts tests/api-resources/auth/credentials.test.ts tests/api-resources/auth/sessions.test.ts - tests/api-resources/internal-accounts.test.ts tests/api-resources/agents/agents.test.ts tests/api-resources/agents/me/me.test.ts tests/api-resources/agents/me/transactions.test.ts diff --git a/src/client.ts b/src/client.ts index bc37d0c..bcc6a38 100644 --- a/src/client.ts +++ b/src/client.ts @@ -56,11 +56,6 @@ import { Documents, } from './resources/documents'; import { ExchangeRateListParams, ExchangeRateListResponse, ExchangeRates } from './resources/exchange-rates'; -import { - InternalAccountExportParams, - InternalAccountExportResponse, - InternalAccounts, -} from './resources/internal-accounts'; import { CurrencyAmount, InvitationClaimParams, @@ -151,22 +146,27 @@ import { Webhooks, } from './resources/webhooks'; import { + Agent, + AgentAction, + AgentActionListResponse, + AgentActionRejectRequest, + AgentActionsDefaultPagination, AgentCreateParams, + AgentCreateRequest, AgentCreateResponse, + AgentDeviceCode, + AgentDeviceCodeRedeemResponse, + AgentDeviceCodeStatusResponse, AgentListApprovalsParams, - AgentListApprovalsResponse, - AgentListApprovalsResponsesDefaultPagination, AgentListParams, AgentListResponse, - AgentListResponsesDefaultPagination, AgentPolicy, - AgentRetrieveResponse, AgentUpdateParams, AgentUpdatePolicyParams, - AgentUpdatePolicyResponse, - AgentUpdateResponse, + AgentUpdateRequest, AgentUsage, Agents, + AgentsDefaultPagination, } from './resources/agents/agents'; import { Auth } from './resources/auth/auth'; import { @@ -175,6 +175,7 @@ import { Customer, CustomerCreate, CustomerCreateParams, + CustomerExportParams, CustomerGetKYCLinkParams, CustomerGetKYCLinkResponse, CustomerListInternalAccountsParams, @@ -186,6 +187,8 @@ import { CustomerUpdateParams, Customers, IndividualCustomerFields, + InternalAccountExportRequest, + InternalAccountExportResponse, } from './resources/customers/customers'; import { Platform, @@ -1086,10 +1089,6 @@ export class LightsparkGrid { */ discoveries: API.Discoveries = new API.Discoveries(this); auth: API.Auth = new API.Auth(this); - /** - * Internal account management endpoints for creating and managing internal accounts - */ - internalAccounts: API.InternalAccounts = new API.InternalAccounts(this); /** * Endpoints for creating and managing agents (experimental), called by the partner's backend using platform credentials. Covers the full agent lifecycle: creation, policy configuration, pausing, deletion, the device code installation flow, and approving or rejecting transactions initiated by agents. */ @@ -1116,7 +1115,6 @@ LightsparkGrid.Documents = Documents; LightsparkGrid.Verifications = Verifications; LightsparkGrid.Discoveries = Discoveries; LightsparkGrid.Auth = Auth; -LightsparkGrid.InternalAccounts = InternalAccounts; LightsparkGrid.Agents = Agents; export declare namespace LightsparkGrid { @@ -1146,11 +1144,14 @@ export declare namespace LightsparkGrid { type CustomerType as CustomerType, type CustomerUpdate as CustomerUpdate, type IndividualCustomerFields as IndividualCustomerFields, + type InternalAccountExportRequest as InternalAccountExportRequest, + type InternalAccountExportResponse as InternalAccountExportResponse, type CustomerGetKYCLinkResponse as CustomerGetKYCLinkResponse, type CustomerOneovesDefaultPagination as CustomerOneovesDefaultPagination, type CustomerCreateParams as CustomerCreateParams, type CustomerUpdateParams as CustomerUpdateParams, type CustomerListParams as CustomerListParams, + type CustomerExportParams as CustomerExportParams, type CustomerGetKYCLinkParams as CustomerGetKYCLinkParams, type CustomerListInternalAccountsParams as CustomerListInternalAccountsParams, }; @@ -1307,24 +1308,23 @@ export declare namespace LightsparkGrid { export { Auth as Auth }; - export { - InternalAccounts as InternalAccounts, - type InternalAccountExportResponse as InternalAccountExportResponse, - type InternalAccountExportParams as InternalAccountExportParams, - }; - export { Agents as Agents, - type AgentPolicy as AgentPolicy, - type AgentUsage as AgentUsage, + type Agent as Agent, + type AgentAction as AgentAction, + type AgentActionListResponse as AgentActionListResponse, + type AgentActionRejectRequest as AgentActionRejectRequest, + type AgentCreateRequest as AgentCreateRequest, type AgentCreateResponse as AgentCreateResponse, - type AgentRetrieveResponse as AgentRetrieveResponse, - type AgentUpdateResponse as AgentUpdateResponse, + type AgentDeviceCode as AgentDeviceCode, + type AgentDeviceCodeRedeemResponse as AgentDeviceCodeRedeemResponse, + type AgentDeviceCodeStatusResponse as AgentDeviceCodeStatusResponse, type AgentListResponse as AgentListResponse, - type AgentListApprovalsResponse as AgentListApprovalsResponse, - type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, - type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, + type AgentPolicy as AgentPolicy, + type AgentUpdateRequest as AgentUpdateRequest, + type AgentUsage as AgentUsage, + type AgentsDefaultPagination as AgentsDefaultPagination, + type AgentActionsDefaultPagination as AgentActionsDefaultPagination, type AgentCreateParams as AgentCreateParams, type AgentUpdateParams as AgentUpdateParams, type AgentListParams as AgentListParams, diff --git a/src/resources/agents/actions.ts b/src/resources/agents/actions.ts index 29c51f7..e76d2c9 100644 --- a/src/resources/agents/actions.ts +++ b/src/resources/agents/actions.ts @@ -1,9 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; -import * as QuotesAPI from '../quotes'; -import * as Shared from '../shared'; -import * as TransferInAPI from '../transfer-in'; +import * as AgentsAPI from './agents'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; @@ -23,7 +21,7 @@ export class Actions extends APIResource { * * @example * ```ts - * const response = await client.agents.actions.approve( + * const agentAction = await client.agents.actions.approve( * 'actionId', * { agentId: 'agentId' }, * ); @@ -33,7 +31,7 @@ export class Actions extends APIResource { actionID: string, params: ActionApproveParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { agentId } = params; return this._client.post(path`/agents/${agentId}/actions/${actionID}/approve`, options); } @@ -46,7 +44,7 @@ export class Actions extends APIResource { * * @example * ```ts - * const response = await client.agents.actions.reject( + * const agentAction = await client.agents.actions.reject( * 'actionId', * { agentId: 'agentId' }, * ); @@ -56,184 +54,12 @@ export class Actions extends APIResource { actionID: string, params: ActionRejectParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { agentId, ...body } = params; return this._client.post(path`/agents/${agentId}/actions/${actionID}/reject`, { body, ...options }); } } -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface ActionApproveResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface ActionRejectResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - export interface ActionApproveParams { /** * System-generated unique agent identifier @@ -255,10 +81,5 @@ export interface ActionRejectParams { } export declare namespace Actions { - export { - type ActionApproveResponse as ActionApproveResponse, - type ActionRejectResponse as ActionRejectResponse, - type ActionApproveParams as ActionApproveParams, - type ActionRejectParams as ActionRejectParams, - }; + export { type ActionApproveParams as ActionApproveParams, type ActionRejectParams as ActionRejectParams }; } diff --git a/src/resources/agents/agents.ts b/src/resources/agents/agents.ts index 510248c..18c7e53 100644 --- a/src/resources/agents/agents.ts +++ b/src/resources/agents/agents.ts @@ -1,42 +1,21 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; -import * as AgentsAPI from './agents'; import * as QuotesAPI from '../quotes'; import * as Shared from '../shared'; import * as TransferInAPI from '../transfer-in'; import * as ActionsAPI from './actions'; -import { - ActionApproveParams, - ActionApproveResponse, - ActionRejectParams, - ActionRejectResponse, - Actions, -} from './actions'; +import { ActionApproveParams, ActionRejectParams, Actions } from './actions'; import * as DeviceCodesAPI from './device-codes'; -import { - DeviceCodeGetStatusResponse, - DeviceCodeRedeemResponse, - DeviceCodeRegenerateResponse, - DeviceCodes, -} from './device-codes'; +import { DeviceCodes } from './device-codes'; import * as TransactionsAPI from './transactions'; -import { - TransactionApproveParams, - TransactionApproveResponse, - TransactionRejectParams, - TransactionRejectResponse, - Transactions, -} from './transactions'; +import { TransactionApproveParams, TransactionRejectParams, Transactions } from './transactions'; import * as MeAPI from './me/me'; import { Me, MeCreateTransferInParams, - MeCreateTransferInResponse, MeCreateTransferOutParams, - MeCreateTransferOutResponse, MeListInternalAccountsParams, - MeRetrieveResponse, } from './me/me'; import { APIPromise } from '../../core/api-promise'; import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../core/pagination'; @@ -60,7 +39,7 @@ export class Agents extends APIResource { * * @example * ```ts - * const agent = await client.agents.create({ + * const agentCreateResponse = await client.agents.create({ * customerId: * 'Customer:019542f5-b3e7-1d02-0000-000000000001', * name: 'Payroll Automation Agent', @@ -87,7 +66,7 @@ export class Agents extends APIResource { * const agent = await client.agents.retrieve('agentId'); * ``` */ - retrieve(agentID: string, options?: RequestOptions): APIPromise { + retrieve(agentID: string, options?: RequestOptions): APIPromise { return this._client.get(path`/agents/${agentID}`, options); } @@ -99,11 +78,7 @@ export class Agents extends APIResource { * const agent = await client.agents.update('agentId'); * ``` */ - update( - agentID: string, - body: AgentUpdateParams, - options?: RequestOptions, - ): APIPromise { + update(agentID: string, body: AgentUpdateParams, options?: RequestOptions): APIPromise { return this._client.patch(path`/agents/${agentID}`, { body, ...options }); } @@ -113,7 +88,7 @@ export class Agents extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const agentListResponse of client.agents.list()) { + * for await (const agent of client.agents.list()) { * // ... * } * ``` @@ -121,8 +96,8 @@ export class Agents extends APIResource { list( query: AgentListParams | null | undefined = {}, options?: RequestOptions, - ): PagePromise { - return this._client.getAPIList('/agents', DefaultPagination, { query, ...options }); + ): PagePromise { + return this._client.getAPIList('/agents', DefaultPagination, { query, ...options }); } /** @@ -151,7 +126,7 @@ export class Agents extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const agentListApprovalsResponse of client.agents.listApprovals()) { + * for await (const agentAction of client.agents.listApprovals()) { * // ... * } * ``` @@ -159,8 +134,8 @@ export class Agents extends APIResource { listApprovals( query: AgentListApprovalsParams | null | undefined = {}, options?: RequestOptions, - ): PagePromise { - return this._client.getAPIList('/agents/approvals', DefaultPagination, { + ): PagePromise { + return this._client.getAPIList('/agents/approvals', DefaultPagination, { query, ...options, }); @@ -173,384 +148,197 @@ export class Agents extends APIResource { * * @example * ```ts - * const response = await client.agents.updatePolicy( - * 'agentId', - * ); + * const agent = await client.agents.updatePolicy('agentId'); * ``` */ - updatePolicy( - agentID: string, - body: AgentUpdatePolicyParams, - options?: RequestOptions, - ): APIPromise { + updatePolicy(agentID: string, body: AgentUpdatePolicyParams, options?: RequestOptions): APIPromise { return this._client.patch(path`/agents/${agentID}/policy`, { body, ...options }); } } -export type AgentListResponsesDefaultPagination = DefaultPagination; +export type AgentsDefaultPagination = DefaultPagination; -export type AgentListApprovalsResponsesDefaultPagination = DefaultPagination; +export type AgentActionsDefaultPagination = DefaultPagination; /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. */ -export interface AgentPolicy { +export interface Agent { /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. + * System-generated unique identifier for the agent. */ - defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; + id: string; /** - * List of permissions granted to the agent. + * Creation timestamp. */ - permissions: Array< - 'VIEW_TRANSACTIONS' | 'CREATE_TRANSFERS' | 'CREATE_QUOTES' | 'EXECUTE_QUOTES' | 'MANAGE_EXTERNAL_ACCOUNTS' - >; + createdAt: string; /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. + * The ID of the customer this agent operates on behalf of. */ - spendingLimits: AgentPolicy.SpendingLimits; + customerId: string; /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. + * Whether the agent has been installed and connected (i.e., its device code has + * been redeemed). */ - accountRestrictions?: AgentPolicy.AccountRestrictions; + isConnected: boolean; /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. + * Whether the agent is currently paused. Paused agents cannot initiate any + * actions. */ - approvalThresholds?: AgentPolicy.ApprovalThresholds; -} + isPaused: boolean; -export namespace AgentPolicy { /** - * Spending limits that cap the agent's transaction amounts and frequency. All - * amount fields are integers in the smallest unit of the specified currency. When - * a transaction is denominated in a different currency, Grid converts using the - * exchange rate at evaluation time. + * Human-readable name for the agent. */ - export interface SpendingLimits { - /** - * ISO 4217 currency code that all amount limits are denominated in. - */ - currency: string; - - /** - * Maximum amount the agent can transfer in a single transaction. - */ - perTransactionLimit: number; - - /** - * Maximum total amount the agent can transfer per day. Null means no daily limit. - */ - dailyLimit?: number | null; - - /** - * Maximum number of transactions the agent can initiate per day. - */ - dailyTransactionLimit?: number; - - /** - * Maximum total amount the agent can transfer per month. Null means no monthly - * limit. - */ - monthlyLimit?: number | null; - } + name: string; /** - * Optional restrictions that limit the agent to specific accounts or override - * policy per account. + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. */ - export interface AccountRestrictions { - /** - * Per-account rules that override the agent's default policy for specific - * accounts. - */ - accountRules?: Array; - - /** - * If set, restricts the agent to operate only on the specified internal account - * IDs. Null means the agent can access all accounts. - */ - allowedAccountIds?: Array | null; - } - - export namespace AccountRestrictions { - /** - * Per-account policy override that takes precedence over the agent's default - * policy for a specific account. - */ - export interface AccountRule { - /** - * The internal account ID this rule applies to. - */ - accountId: string; - - /** - * Execution mode controlling whether agent actions require human approval. AUTO: - * The agent can execute actions autonomously without explicit approval. - * APPROVAL_REQUIRED: All agent actions require explicit human approval before - * execution. - */ - executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; - - /** - * Per-transaction limit override, in the smallest unit of the relevant currency. - * Null inherits from the agent's spending limits. - */ - perTransactionLimit?: number | null; - } - } + policy: AgentPolicy; /** - * Thresholds that force approval for high-value transactions, overriding the - * default execution mode. When a transaction is denominated in a different - * currency than the threshold, Grid converts using the exchange rate at evaluation - * time. + * Last update timestamp. */ - export interface ApprovalThresholds { - /** - * If set, any transaction above this amount (in the smallest unit of the specified - * currency) will require explicit approval even when the agent's - * defaultExecutionMode is AUTO. Null means no threshold override. - */ - amount?: number | null; + updatedAt: string; - /** - * ISO 4217 currency code that the amount threshold is denominated in. Required - * when amount is set. - */ - currency?: string; - } + /** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ + usage: AgentUsage; } /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. + * An action submitted by an agent that may require platform approval before + * execution. All agent-initiated operations (quote execution, transfers) are + * represented as AgentActions, giving the platform a consistent object to approve, + * reject, and audit regardless of the underlying operation type. */ -export interface AgentUsage { +export interface AgentAction { /** - * Total amount spent by the agent today, in the smallest unit of the policy's - * `spendingLimits.currency`. + * System-generated unique identifier for this action. */ - dailySpend: number; + id: string; /** - * Number of transactions initiated by the agent today. + * The agent that submitted this action. */ - dailyTransactionCount: number; + agentId: string; /** - * Total amount spent by the agent this month, in the smallest unit of the policy's - * `spendingLimits.currency`. + * When the action was submitted by the agent. */ - monthlySpend: number; + createdAt: string; /** - * The date when daily usage counters will reset. + * The customer on whose behalf the action was submitted. */ - dailyResetDate?: string; + customerId: string; /** - * The year-month (YYYY-MM) when monthly usage counters will reset. + * Platform-specific ID of the customer. */ - monthlyResetMonth?: string; -} + platformCustomerId: string; -/** - * Response returned when an agent is created, including the agent and a device - * code for installation. - */ -export interface AgentCreateResponse { /** - * A programmatic agent with scoped permissions and a spending policy, used to - * automate payment workflows. + * Status of an agent action. + * + * | Status | Description | + * | ------------------ | ---------------------------------------------------------------------- | + * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | + * | `APPROVED` | Approved by the platform; execution is in progress or completed | + * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | + * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | */ - agent: AgentCreateResponse.Agent; - - deviceCode: AgentCreateResponse.DeviceCode; -} + status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; -export namespace AgentCreateResponse { /** - * A programmatic agent with scoped permissions and a spending policy, used to - * automate payment workflows. + * The type of action the agent is requesting. + * + * | Type | Description | + * | --------------- | -------------------------------------------------------- | + * | `EXECUTE_QUOTE` | Execute a cross-currency quote | + * | `TRANSFER_OUT` | Transfer from an internal account to an external account | + * | `TRANSFER_IN` | Transfer from an external account to an internal account | */ - export interface Agent { - /** - * System-generated unique identifier for the agent. - */ - id: string; - - /** - * Creation timestamp. - */ - createdAt: string; - - /** - * The ID of the customer this agent operates on behalf of. - */ - customerId: string; - - /** - * Whether the agent has been installed and connected (i.e., its device code has - * been redeemed). - */ - isConnected: boolean; - - /** - * Whether the agent is currently paused. Paused agents cannot initiate any - * actions. - */ - isPaused: boolean; - - /** - * Human-readable name for the agent. - */ - name: string; - - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - policy: AgentsAPI.AgentPolicy; - - /** - * Last update timestamp. - */ - updatedAt: string; - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - usage: AgentsAPI.AgentUsage; - } - - export interface DeviceCode { - /** - * The agent this device code belongs to. - */ - agentId: string; - - /** - * Human-readable device code used to install and connect the agent software. - */ - code: string; - - /** - * Timestamp when this device code expires. - */ - expiresAt: string; - - /** - * Whether this device code has already been redeemed by the agent. - */ - redeemed: boolean; - } -} + type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; -/** - * A programmatic agent with scoped permissions and a spending policy, used to - * automate payment workflows. - */ -export interface AgentRetrieveResponse { /** - * System-generated unique identifier for the agent. + * When the action was last updated. */ - id: string; + updatedAt: string; /** - * Creation timestamp. + * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for + * transfer actions. Contains the full amount, currency, destination, and rate + * details needed to present an approval decision to the user. */ - createdAt: string; + quote?: QuotesAPI.Quote; /** - * The ID of the customer this agent operates on behalf of. + * Human-readable reason provided by the platform when rejecting the action. Only + * present when status is `REJECTED`. */ - customerId: string; + rejectionReason?: string; /** - * Whether the agent has been installed and connected (i.e., its device code has - * been redeemed). + * The resulting transaction, populated once the action has been approved and + * execution has begun. Absent while the action is `PENDING_APPROVAL` or + * `REJECTED`. */ - isConnected: boolean; + transaction?: TransferInAPI.Transaction; /** - * Whether the agent is currently paused. Paused agents cannot initiate any - * actions. + * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). */ - isPaused: boolean; + transferDetails?: Shared.AgentTransferDetails; +} +export interface AgentActionListResponse { /** - * Human-readable name for the agent. + * List of agent actions matching the filter criteria. */ - name: string; + data: Array; /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. + * Indicates if more results are available beyond this page. */ - policy: AgentPolicy; + hasMore: boolean; /** - * Last update timestamp. + * Cursor to retrieve the next page of results (only present if hasMore is true). */ - updatedAt: string; + nextCursor?: string; /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. + * Total number of actions matching the criteria (excluding pagination). */ - usage: AgentUsage; + totalCount?: number; } -/** - * A programmatic agent with scoped permissions and a spending policy, used to - * automate payment workflows. - */ -export interface AgentUpdateResponse { +export interface AgentActionRejectRequest { /** - * System-generated unique identifier for the agent. + * Optional human-readable reason for the rejection, stored on the action and + * visible to the platform. */ - id: string; - - /** - * Creation timestamp. - */ - createdAt: string; + reason?: string; +} +export interface AgentCreateRequest { /** - * The ID of the customer this agent operates on behalf of. + * The ID of the customer this agent will operate on behalf of. */ customerId: string; /** - * Whether the agent has been installed and connected (i.e., its device code has - * been redeemed). - */ - isConnected: boolean; - - /** - * Whether the agent is currently paused. Paused agents cannot initiate any - * actions. - */ - isPaused: boolean; - - /** - * Human-readable name for the agent. + * Human-readable name to identify the agent. */ name: string; @@ -559,213 +347,294 @@ export interface AgentUpdateResponse { * boundaries. */ policy: AgentPolicy; +} +/** + * Response returned when an agent is created, including the agent and a device + * code for installation. + */ +export interface AgentCreateResponse { /** - * Last update timestamp. + * A programmatic agent with scoped permissions and a spending policy, used to + * automate payment workflows. */ - updatedAt: string; + agent: Agent; + + deviceCode: AgentDeviceCode; +} +export interface AgentDeviceCode { /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. + * The agent this device code belongs to. */ - usage: AgentUsage; -} + agentId: string; -/** - * A programmatic agent with scoped permissions and a spending policy, used to - * automate payment workflows. - */ -export interface AgentListResponse { /** - * System-generated unique identifier for the agent. + * Human-readable device code used to install and connect the agent software. */ - id: string; + code: string; /** - * Creation timestamp. + * Timestamp when this device code expires. */ - createdAt: string; + expiresAt: string; /** - * The ID of the customer this agent operates on behalf of. + * Whether this device code has already been redeemed by the agent. */ - customerId: string; + redeemed: boolean; +} +export interface AgentDeviceCodeRedeemResponse { /** - * Whether the agent has been installed and connected (i.e., its device code has - * been redeemed). + * Bearer token used to authenticate all subsequent API calls as this agent. Pass + * as `Authorization: Bearer `. This token is returned only once and + * must be stored securely — it cannot be retrieved again. */ - isConnected: boolean; + accessToken: string; /** - * Whether the agent is currently paused. Paused agents cannot initiate any - * actions. + * The agent's system-generated ID. */ - isPaused: boolean; + agentId: string; /** - * Human-readable name for the agent. + * The agent's name. */ - name: string; + agentName: string; /** * Policy governing what an agent can do, how it executes actions, and its spending * boundaries. */ policy: AgentPolicy; +} +export interface AgentDeviceCodeStatusResponse { /** - * Last update timestamp. + * The device code. */ - updatedAt: string; + code: string; /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. + * Whether this device code has been redeemed. */ - usage: AgentUsage; + redeemed: boolean; } -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface AgentListApprovalsResponse { +export interface AgentListResponse { /** - * System-generated unique identifier for this action. + * List of agents matching the filter criteria. */ - id: string; + data: Array; /** - * The agent that submitted this action. + * Indicates if more results are available beyond this page. */ - agentId: string; + hasMore: boolean; /** - * When the action was submitted by the agent. + * Cursor to retrieve the next page of results (only present if hasMore is true). */ - createdAt: string; + nextCursor?: string; /** - * The customer on whose behalf the action was submitted. + * Total number of agents matching the criteria (excluding pagination). */ - customerId: string; + totalCount?: number; +} +/** + * Policy governing what an agent can do, how it executes actions, and its spending + * boundaries. + */ +export interface AgentPolicy { /** - * Platform-specific ID of the customer. + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. */ - platformCustomerId: string; + defaultExecutionMode: 'AUTO' | 'APPROVAL_REQUIRED'; /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | + * List of permissions granted to the agent. */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; + permissions: Array< + 'VIEW_TRANSACTIONS' | 'CREATE_TRANSFERS' | 'CREATE_QUOTES' | 'EXECUTE_QUOTES' | 'MANAGE_EXTERNAL_ACCOUNTS' + >; /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; + spendingLimits: AgentPolicy.SpendingLimits; /** - * When the action was last updated. + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. */ - updatedAt: string; + accountRestrictions?: AgentPolicy.AccountRestrictions; /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. */ - quote?: QuotesAPI.Quote; + approvalThresholds?: AgentPolicy.ApprovalThresholds; +} +export namespace AgentPolicy { /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. + * Spending limits that cap the agent's transaction amounts and frequency. All + * amount fields are integers in the smallest unit of the specified currency. When + * a transaction is denominated in a different currency, Grid converts using the + * exchange rate at evaluation time. */ - rejectionReason?: string; + export interface SpendingLimits { + /** + * ISO 4217 currency code that all amount limits are denominated in. + */ + currency: string; + + /** + * Maximum amount the agent can transfer in a single transaction. + */ + perTransactionLimit: number; + + /** + * Maximum total amount the agent can transfer per day. Null means no daily limit. + */ + dailyLimit?: number | null; + + /** + * Maximum number of transactions the agent can initiate per day. + */ + dailyTransactionLimit?: number; + + /** + * Maximum total amount the agent can transfer per month. Null means no monthly + * limit. + */ + monthlyLimit?: number | null; + } /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. + * Optional restrictions that limit the agent to specific accounts or override + * policy per account. */ - transaction?: TransferInAPI.Transaction; + export interface AccountRestrictions { + /** + * Per-account rules that override the agent's default policy for specific + * accounts. + */ + accountRules?: Array; + + /** + * If set, restricts the agent to operate only on the specified internal account + * IDs. Null means the agent can access all accounts. + */ + allowedAccountIds?: Array | null; + } + + export namespace AccountRestrictions { + /** + * Per-account policy override that takes precedence over the agent's default + * policy for a specific account. + */ + export interface AccountRule { + /** + * The internal account ID this rule applies to. + */ + accountId: string; + + /** + * Execution mode controlling whether agent actions require human approval. AUTO: + * The agent can execute actions autonomously without explicit approval. + * APPROVAL_REQUIRED: All agent actions require explicit human approval before + * execution. + */ + executionMode?: 'AUTO' | 'APPROVAL_REQUIRED'; + + /** + * Per-transaction limit override, in the smallest unit of the relevant currency. + * Null inherits from the agent's spending limits. + */ + perTransactionLimit?: number | null; + } + } /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). + * Thresholds that force approval for high-value transactions, overriding the + * default execution mode. When a transaction is denominated in a different + * currency than the threshold, Grid converts using the exchange rate at evaluation + * time. */ - transferDetails?: Shared.AgentTransferDetails; + export interface ApprovalThresholds { + /** + * If set, any transaction above this amount (in the smallest unit of the specified + * currency) will require explicit approval even when the agent's + * defaultExecutionMode is AUTO. Null means no threshold override. + */ + amount?: number | null; + + /** + * ISO 4217 currency code that the amount threshold is denominated in. Required + * when amount is set. + */ + currency?: string; + } } /** - * A programmatic agent with scoped permissions and a spending policy, used to - * automate payment workflows. + * Partial update to an agent's basic fields. At least one field must be provided. */ -export interface AgentUpdatePolicyResponse { - /** - * System-generated unique identifier for the agent. - */ - id: string; - - /** - * Creation timestamp. - */ - createdAt: string; - +export interface AgentUpdateRequest { /** - * The ID of the customer this agent operates on behalf of. + * Set to true to pause the agent or false to resume it. */ - customerId: string; + isPaused?: boolean; /** - * Whether the agent has been installed and connected (i.e., its device code has - * been redeemed). + * Updated name for the agent. */ - isConnected: boolean; + name?: string; +} +/** + * Real-time counters tracking the agent's spending and transaction activity + * against its policy limits. + */ +export interface AgentUsage { /** - * Whether the agent is currently paused. Paused agents cannot initiate any - * actions. + * Total amount spent by the agent today, in the smallest unit of the policy's + * `spendingLimits.currency`. */ - isPaused: boolean; + dailySpend: number; /** - * Human-readable name for the agent. + * Number of transactions initiated by the agent today. */ - name: string; + dailyTransactionCount: number; /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. + * Total amount spent by the agent this month, in the smallest unit of the policy's + * `spendingLimits.currency`. */ - policy: AgentPolicy; + monthlySpend: number; /** - * Last update timestamp. + * The date when daily usage counters will reset. */ - updatedAt: string; + dailyResetDate?: string; /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. + * The year-month (YYYY-MM) when monthly usage counters will reset. */ - usage: AgentUsage; + monthlyResetMonth?: string; } export interface AgentCreateParams { @@ -1016,16 +885,21 @@ Agents.Actions = Actions; export declare namespace Agents { export { - type AgentPolicy as AgentPolicy, - type AgentUsage as AgentUsage, + type Agent as Agent, + type AgentAction as AgentAction, + type AgentActionListResponse as AgentActionListResponse, + type AgentActionRejectRequest as AgentActionRejectRequest, + type AgentCreateRequest as AgentCreateRequest, type AgentCreateResponse as AgentCreateResponse, - type AgentRetrieveResponse as AgentRetrieveResponse, - type AgentUpdateResponse as AgentUpdateResponse, + type AgentDeviceCode as AgentDeviceCode, + type AgentDeviceCodeRedeemResponse as AgentDeviceCodeRedeemResponse, + type AgentDeviceCodeStatusResponse as AgentDeviceCodeStatusResponse, type AgentListResponse as AgentListResponse, - type AgentListApprovalsResponse as AgentListApprovalsResponse, - type AgentUpdatePolicyResponse as AgentUpdatePolicyResponse, - type AgentListResponsesDefaultPagination as AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination as AgentListApprovalsResponsesDefaultPagination, + type AgentPolicy as AgentPolicy, + type AgentUpdateRequest as AgentUpdateRequest, + type AgentUsage as AgentUsage, + type AgentsDefaultPagination as AgentsDefaultPagination, + type AgentActionsDefaultPagination as AgentActionsDefaultPagination, type AgentCreateParams as AgentCreateParams, type AgentUpdateParams as AgentUpdateParams, type AgentListParams as AgentListParams, @@ -1035,33 +909,21 @@ export declare namespace Agents { export { Me as Me, - type MeRetrieveResponse as MeRetrieveResponse, - type MeCreateTransferInResponse as MeCreateTransferInResponse, - type MeCreateTransferOutResponse as MeCreateTransferOutResponse, type MeCreateTransferInParams as MeCreateTransferInParams, type MeCreateTransferOutParams as MeCreateTransferOutParams, type MeListInternalAccountsParams as MeListInternalAccountsParams, }; - export { - DeviceCodes as DeviceCodes, - type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, - type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, - type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, - }; + export { DeviceCodes as DeviceCodes }; export { Transactions as Transactions, - type TransactionApproveResponse as TransactionApproveResponse, - type TransactionRejectResponse as TransactionRejectResponse, type TransactionApproveParams as TransactionApproveParams, type TransactionRejectParams as TransactionRejectParams, }; export { Actions as Actions, - type ActionApproveResponse as ActionApproveResponse, - type ActionRejectResponse as ActionRejectResponse, type ActionApproveParams as ActionApproveParams, type ActionRejectParams as ActionRejectParams, }; diff --git a/src/resources/agents/device-codes.ts b/src/resources/agents/device-codes.ts index d789aff..1964f9b 100644 --- a/src/resources/agents/device-codes.ts +++ b/src/resources/agents/device-codes.ts @@ -16,12 +16,11 @@ export class DeviceCodes extends APIResource { * * @example * ```ts - * const response = await client.agents.deviceCodes.getStatus( - * 'code', - * ); + * const agentDeviceCodeStatusResponse = + * await client.agents.deviceCodes.getStatus('code'); * ``` */ - getStatus(code: string, options?: RequestOptions): APIPromise { + getStatus(code: string, options?: RequestOptions): APIPromise { return this._client.get(path`/agents/device-codes/${code}/status`, options); } @@ -34,12 +33,11 @@ export class DeviceCodes extends APIResource { * * @example * ```ts - * const response = await client.agents.deviceCodes.redeem( - * 'code', - * ); + * const agentDeviceCodeRedeemResponse = + * await client.agents.deviceCodes.redeem('code'); * ``` */ - redeem(code: string, options?: RequestOptions): APIPromise { + redeem(code: string, options?: RequestOptions): APIPromise { return this._client.post(path`/agents/device-codes/${code}/redeem`, options); } @@ -51,79 +49,11 @@ export class DeviceCodes extends APIResource { * * @example * ```ts - * const response = await client.agents.deviceCodes.regenerate( - * 'agentId', - * ); + * const agentDeviceCode = + * await client.agents.deviceCodes.regenerate('agentId'); * ``` */ - regenerate(agentID: string, options?: RequestOptions): APIPromise { + regenerate(agentID: string, options?: RequestOptions): APIPromise { return this._client.post(path`/agents/${agentID}/device-codes`, options); } } - -export interface DeviceCodeGetStatusResponse { - /** - * The device code. - */ - code: string; - - /** - * Whether this device code has been redeemed. - */ - redeemed: boolean; -} - -export interface DeviceCodeRedeemResponse { - /** - * Bearer token used to authenticate all subsequent API calls as this agent. Pass - * as `Authorization: Bearer `. This token is returned only once and - * must be stored securely — it cannot be retrieved again. - */ - accessToken: string; - - /** - * The agent's system-generated ID. - */ - agentId: string; - - /** - * The agent's name. - */ - agentName: string; - - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - policy: AgentsAPI.AgentPolicy; -} - -export interface DeviceCodeRegenerateResponse { - /** - * The agent this device code belongs to. - */ - agentId: string; - - /** - * Human-readable device code used to install and connect the agent software. - */ - code: string; - - /** - * Timestamp when this device code expires. - */ - expiresAt: string; - - /** - * Whether this device code has already been redeemed by the agent. - */ - redeemed: boolean; -} - -export declare namespace DeviceCodes { - export { - type DeviceCodeGetStatusResponse as DeviceCodeGetStatusResponse, - type DeviceCodeRedeemResponse as DeviceCodeRedeemResponse, - type DeviceCodeRegenerateResponse as DeviceCodeRegenerateResponse, - }; -} diff --git a/src/resources/agents/index.ts b/src/resources/agents/index.ts index 0ba1390..5b9a1f3 100644 --- a/src/resources/agents/index.ts +++ b/src/resources/agents/index.ts @@ -1,49 +1,34 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -export { - Actions, - type ActionApproveResponse, - type ActionRejectResponse, - type ActionApproveParams, - type ActionRejectParams, -} from './actions'; +export { Actions, type ActionApproveParams, type ActionRejectParams } from './actions'; export { Agents, - type AgentPolicy, - type AgentUsage, + type Agent, + type AgentAction, + type AgentActionListResponse, + type AgentActionRejectRequest, + type AgentCreateRequest, type AgentCreateResponse, - type AgentRetrieveResponse, - type AgentUpdateResponse, + type AgentDeviceCode, + type AgentDeviceCodeRedeemResponse, + type AgentDeviceCodeStatusResponse, type AgentListResponse, - type AgentListApprovalsResponse, - type AgentUpdatePolicyResponse, + type AgentPolicy, + type AgentUpdateRequest, + type AgentUsage, type AgentCreateParams, type AgentUpdateParams, type AgentListParams, type AgentListApprovalsParams, type AgentUpdatePolicyParams, - type AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination, + type AgentActionsDefaultPagination, + type AgentsDefaultPagination, } from './agents'; -export { - DeviceCodes, - type DeviceCodeGetStatusResponse, - type DeviceCodeRedeemResponse, - type DeviceCodeRegenerateResponse, -} from './device-codes'; +export { DeviceCodes } from './device-codes'; export { Me, - type MeRetrieveResponse, - type MeCreateTransferInResponse, - type MeCreateTransferOutResponse, type MeCreateTransferInParams, type MeCreateTransferOutParams, type MeListInternalAccountsParams, } from './me/index'; -export { - Transactions, - type TransactionApproveResponse, - type TransactionRejectResponse, - type TransactionApproveParams, - type TransactionRejectParams, -} from './transactions'; +export { Transactions, type TransactionApproveParams, type TransactionRejectParams } from './transactions'; diff --git a/src/resources/agents/me/actions.ts b/src/resources/agents/me/actions.ts index a82572b..d2d998d 100644 --- a/src/resources/agents/me/actions.ts +++ b/src/resources/agents/me/actions.ts @@ -1,9 +1,8 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../core/resource'; -import * as QuotesAPI from '../../quotes'; -import * as Shared from '../../shared'; -import * as TransferInAPI from '../../transfer-in'; +import * as AgentsAPI from '../agents'; +import { AgentActionsDefaultPagination } from '../agents'; import { APIPromise } from '../../../core/api-promise'; import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../../core/pagination'; import { RequestOptions } from '../../../internal/request-options'; @@ -20,12 +19,12 @@ export class Actions extends APIResource { * * @example * ```ts - * const action = await client.agents.me.actions.retrieve( + * const agentAction = await client.agents.me.actions.retrieve( * 'actionId', * ); * ``` */ - retrieve(actionID: string, options?: RequestOptions): APIPromise { + retrieve(actionID: string, options?: RequestOptions): APIPromise { return this._client.get(path`/agents/me/actions/${actionID}`, options); } @@ -37,7 +36,7 @@ export class Actions extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const actionListResponse of client.agents.me.actions.list()) { + * for await (const agentAction of client.agents.me.actions.list()) { * // ... * } * ``` @@ -45,188 +44,14 @@ export class Actions extends APIResource { list( query: ActionListParams | null | undefined = {}, options?: RequestOptions, - ): PagePromise { - return this._client.getAPIList('/agents/me/actions', DefaultPagination, { + ): PagePromise { + return this._client.getAPIList('/agents/me/actions', DefaultPagination, { query, ...options, }); } } -export type ActionListResponsesDefaultPagination = DefaultPagination; - -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface ActionRetrieveResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface ActionListResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - export interface ActionListParams extends DefaultPaginationParams { /** * Maximum number of results to return (default 20, max 100) @@ -240,10 +65,7 @@ export interface ActionListParams extends DefaultPaginationParams { } export declare namespace Actions { - export { - type ActionRetrieveResponse as ActionRetrieveResponse, - type ActionListResponse as ActionListResponse, - type ActionListResponsesDefaultPagination as ActionListResponsesDefaultPagination, - type ActionListParams as ActionListParams, - }; + export { type ActionListParams as ActionListParams }; } + +export { type AgentActionsDefaultPagination }; diff --git a/src/resources/agents/me/index.ts b/src/resources/agents/me/index.ts index 3767ec8..53d25b0 100644 --- a/src/resources/agents/me/index.ts +++ b/src/resources/agents/me/index.ts @@ -1,12 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -export { - Actions, - type ActionRetrieveResponse, - type ActionListResponse, - type ActionListParams, - type ActionListResponsesDefaultPagination, -} from './actions'; +export { Actions, type ActionListParams } from './actions'; export { ExternalAccounts, type ExternalAccountListParams, @@ -14,12 +8,9 @@ export { } from './external-accounts'; export { Me, - type MeRetrieveResponse, - type MeCreateTransferInResponse, - type MeCreateTransferOutResponse, type MeCreateTransferInParams, type MeCreateTransferOutParams, type MeListInternalAccountsParams, } from './me'; -export { Quotes, type QuoteExecuteResponse, type QuoteCreateParams, type QuoteExecuteParams } from './quotes'; +export { Quotes, type QuoteCreateParams, type QuoteExecuteParams } from './quotes'; export { Transactions, type TransactionListParams } from './transactions'; diff --git a/src/resources/agents/me/me.ts b/src/resources/agents/me/me.ts index f5cfd16..f727a61 100644 --- a/src/resources/agents/me/me.ts +++ b/src/resources/agents/me/me.ts @@ -1,24 +1,16 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../core/resource'; -import * as QuotesAPI from '../../quotes'; -import * as Shared from '../../shared'; import * as TransferInAPI from '../../transfer-in'; import * as AgentsAPI from '../agents'; import * as InternalAccountsAPI from '../../sandbox/internal-accounts'; import { InternalAccountsDefaultPagination } from '../../sandbox/internal-accounts'; import * as ActionsAPI from './actions'; -import { - ActionListParams, - ActionListResponse, - ActionListResponsesDefaultPagination, - ActionRetrieveResponse, - Actions, -} from './actions'; +import { ActionListParams, Actions } from './actions'; import * as ExternalAccountsAPI from './external-accounts'; import { ExternalAccountAddParams, ExternalAccountListParams, ExternalAccounts } from './external-accounts'; -import * as MeQuotesAPI from './quotes'; -import { QuoteCreateParams, QuoteExecuteParams, QuoteExecuteResponse, Quotes } from './quotes'; +import * as QuotesAPI from './quotes'; +import { QuoteCreateParams, QuoteExecuteParams, Quotes } from './quotes'; import * as TransactionsAPI from './transactions'; import { TransactionListParams, Transactions } from './transactions'; import { APIPromise } from '../../../core/api-promise'; @@ -31,7 +23,7 @@ import { RequestOptions } from '../../../internal/request-options'; */ export class Me extends APIResource { transactions: TransactionsAPI.Transactions = new TransactionsAPI.Transactions(this._client); - quotes: MeQuotesAPI.Quotes = new MeQuotesAPI.Quotes(this._client); + quotes: QuotesAPI.Quotes = new QuotesAPI.Quotes(this._client); externalAccounts: ExternalAccountsAPI.ExternalAccounts = new ExternalAccountsAPI.ExternalAccounts( this._client, ); @@ -44,10 +36,10 @@ export class Me extends APIResource { * * @example * ```ts - * const me = await client.agents.me.retrieve(); + * const agent = await client.agents.me.retrieve(); * ``` */ - retrieve(options?: RequestOptions): APIPromise { + retrieve(options?: RequestOptions): APIPromise { return this._client.get('/agents/me', options); } @@ -64,23 +56,25 @@ export class Me extends APIResource { * * @example * ```ts - * const response = await client.agents.me.createTransferIn({ - * destination: { - * accountId: - * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + * const agentAction = await client.agents.me.createTransferIn( + * { + * destination: { + * accountId: + * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + * }, + * source: { + * accountId: + * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', + * }, + * amount: 12550, * }, - * source: { - * accountId: - * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', - * }, - * amount: 12550, - * }); + * ); * ``` */ createTransferIn( params: MeCreateTransferInParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { 'Idempotency-Key': idempotencyKey, ...body } = params; return this._client.post('/agents/me/transfer-in', { body, @@ -102,23 +96,24 @@ export class Me extends APIResource { * * @example * ```ts - * const response = await client.agents.me.createTransferOut({ - * destination: { - * accountId: - * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', - * }, - * source: { - * accountId: - * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', - * }, - * amount: 12550, - * }); + * const agentAction = + * await client.agents.me.createTransferOut({ + * destination: { + * accountId: + * 'ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965', + * }, + * source: { + * accountId: + * 'InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123', + * }, + * amount: 12550, + * }); * ``` */ createTransferOut( params: MeCreateTransferOutParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { 'Idempotency-Key': idempotencyKey, ...body } = params; return this._client.post('/agents/me/transfer-out', { body, @@ -156,233 +151,6 @@ export class Me extends APIResource { } } -/** - * A programmatic agent with scoped permissions and a spending policy, used to - * automate payment workflows. - */ -export interface MeRetrieveResponse { - /** - * System-generated unique identifier for the agent. - */ - id: string; - - /** - * Creation timestamp. - */ - createdAt: string; - - /** - * The ID of the customer this agent operates on behalf of. - */ - customerId: string; - - /** - * Whether the agent has been installed and connected (i.e., its device code has - * been redeemed). - */ - isConnected: boolean; - - /** - * Whether the agent is currently paused. Paused agents cannot initiate any - * actions. - */ - isPaused: boolean; - - /** - * Human-readable name for the agent. - */ - name: string; - - /** - * Policy governing what an agent can do, how it executes actions, and its spending - * boundaries. - */ - policy: AgentsAPI.AgentPolicy; - - /** - * Last update timestamp. - */ - updatedAt: string; - - /** - * Real-time counters tracking the agent's spending and transaction activity - * against its policy limits. - */ - usage: AgentsAPI.AgentUsage; -} - -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface MeCreateTransferInResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface MeCreateTransferOutResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - export interface MeCreateTransferInParams { /** * Body param: Destination internal account details @@ -457,9 +225,6 @@ Me.Actions = Actions; export declare namespace Me { export { - type MeRetrieveResponse as MeRetrieveResponse, - type MeCreateTransferInResponse as MeCreateTransferInResponse, - type MeCreateTransferOutResponse as MeCreateTransferOutResponse, type MeCreateTransferInParams as MeCreateTransferInParams, type MeCreateTransferOutParams as MeCreateTransferOutParams, type MeListInternalAccountsParams as MeListInternalAccountsParams, @@ -469,7 +234,6 @@ export declare namespace Me { export { Quotes as Quotes, - type QuoteExecuteResponse as QuoteExecuteResponse, type QuoteCreateParams as QuoteCreateParams, type QuoteExecuteParams as QuoteExecuteParams, }; @@ -480,13 +244,7 @@ export declare namespace Me { type ExternalAccountAddParams as ExternalAccountAddParams, }; - export { - Actions as Actions, - type ActionRetrieveResponse as ActionRetrieveResponse, - type ActionListResponse as ActionListResponse, - type ActionListResponsesDefaultPagination as ActionListResponsesDefaultPagination, - type ActionListParams as ActionListParams, - }; + export { Actions as Actions, type ActionListParams as ActionListParams }; } export { type InternalAccountsDefaultPagination }; diff --git a/src/resources/agents/me/quotes.ts b/src/resources/agents/me/quotes.ts index 687dfe2..ee3d018 100644 --- a/src/resources/agents/me/quotes.ts +++ b/src/resources/agents/me/quotes.ts @@ -2,8 +2,7 @@ import { APIResource } from '../../../core/resource'; import * as QuotesAPI from '../../quotes'; -import * as Shared from '../../shared'; -import * as TransferInAPI from '../../transfer-in'; +import * as AgentsAPI from '../agents'; import { APIPromise } from '../../../core/api-promise'; import { buildHeaders } from '../../../internal/headers'; import { RequestOptions } from '../../../internal/request-options'; @@ -76,7 +75,7 @@ export class Quotes extends APIResource { * * @example * ```ts - * const response = await client.agents.me.quotes.execute( + * const agentAction = await client.agents.me.quotes.execute( * 'Quote:019542f5-b3e7-1d02-0000-000000000001', * ); * ``` @@ -85,7 +84,7 @@ export class Quotes extends APIResource { quoteID: string, params: QuoteExecuteParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { 'Grid-Wallet-Signature': gridWalletSignature, 'Idempotency-Key': idempotencyKey } = params ?? {}; return this._client.post(path`/agents/me/quotes/${quoteID}/execute`, { ...options, @@ -100,92 +99,6 @@ export class Quotes extends APIResource { } } -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface QuoteExecuteResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - export interface QuoteCreateParams { /** * Body param: Destination account details @@ -297,9 +210,5 @@ export interface QuoteExecuteParams { } export declare namespace Quotes { - export { - type QuoteExecuteResponse as QuoteExecuteResponse, - type QuoteCreateParams as QuoteCreateParams, - type QuoteExecuteParams as QuoteExecuteParams, - }; + export { type QuoteCreateParams as QuoteCreateParams, type QuoteExecuteParams as QuoteExecuteParams }; } diff --git a/src/resources/agents/transactions.ts b/src/resources/agents/transactions.ts index 36cd5a2..efafb90 100644 --- a/src/resources/agents/transactions.ts +++ b/src/resources/agents/transactions.ts @@ -1,9 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; -import * as QuotesAPI from '../quotes'; -import * as Shared from '../shared'; -import * as TransferInAPI from '../transfer-in'; +import * as AgentsAPI from './agents'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; @@ -23,17 +21,17 @@ export class Transactions extends APIResource { * * @example * ```ts - * const response = await client.agents.transactions.approve( - * 'actionId', - * { agentId: 'agentId' }, - * ); + * const agentAction = + * await client.agents.transactions.approve('actionId', { + * agentId: 'agentId', + * }); * ``` */ approve( actionID: string, params: TransactionApproveParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { agentId } = params; return this._client.post(path`/agents/${agentId}/actions/${actionID}/approve`, options); } @@ -46,7 +44,7 @@ export class Transactions extends APIResource { * * @example * ```ts - * const response = await client.agents.transactions.reject( + * const agentAction = await client.agents.transactions.reject( * 'actionId', * { agentId: 'agentId' }, * ); @@ -56,184 +54,12 @@ export class Transactions extends APIResource { actionID: string, params: TransactionRejectParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { agentId, ...body } = params; return this._client.post(path`/agents/${agentId}/actions/${actionID}/reject`, { body, ...options }); } } -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface TransactionApproveResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - -/** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ -export interface TransactionRejectResponse { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; -} - export interface TransactionApproveParams { /** * System-generated unique agent identifier @@ -256,8 +82,6 @@ export interface TransactionRejectParams { export declare namespace Transactions { export { - type TransactionApproveResponse as TransactionApproveResponse, - type TransactionRejectResponse as TransactionRejectResponse, type TransactionApproveParams as TransactionApproveParams, type TransactionRejectParams as TransactionRejectParams, }; diff --git a/src/resources/auth/auth.ts b/src/resources/auth/auth.ts index ac25ce9..833c86a 100644 --- a/src/resources/auth/auth.ts +++ b/src/resources/auth/auth.ts @@ -3,26 +3,42 @@ import { APIResource } from '../../core/resource'; import * as CredentialsAPI from './credentials'; import { + AuthCredentialCreateRequest, + AuthCredentialCreateRequestOneOf, + AuthCredentialListResponse, + AuthCredentialResponseOneOf, + AuthCredentialVerifyRequest, + AuthCredentialVerifyRequestOneOf, AuthMethod, + AuthMethodResponse, + AuthMethodType, + AuthSession, + AuthSignedRequestChallenge, + CredentialChallengeParams, CredentialCreateParams, + CredentialDeleteParams, CredentialListParams, - CredentialListResponse, - CredentialResendChallengeParams, - CredentialResendChallengeResponse, - CredentialRevokeParams, - CredentialRevokeResponse, CredentialVerifyParams, - CredentialVerifyResponse, Credentials, + EmailOtpCredentialCreateRequest, + EmailOtpCredentialCreateRequestFields, + EmailOtpCredentialVerifyRequest, + EmailOtpCredentialVerifyRequestFields, + OAuthCredentialCreateRequest, + OAuthCredentialCreateRequestFields, + OAuthCredentialVerifyRequest, + OAuthCredentialVerifyRequestFields, + PasskeyAssertion, + PasskeyAttestation, + PasskeyAuthChallenge, + PasskeyCredentialCreateRequest, + PasskeyCredentialCreateRequestFields, + PasskeyCredentialVerifyRequest, + PasskeyCredentialVerifyRequestFields, + SignedRequestChallenge, } from './credentials'; import * as SessionsAPI from './sessions'; -import { - SessionListParams, - SessionListResponse, - SessionRevokeParams, - SessionRevokeResponse, - Sessions, -} from './sessions'; +import { SessionDeleteParams, SessionListParams, SessionListResponse, Sessions } from './sessions'; export class Auth extends APIResource { credentials: CredentialsAPI.Credentials = new CredentialsAPI.Credentials(this._client); @@ -35,23 +51,44 @@ Auth.Sessions = Sessions; export declare namespace Auth { export { Credentials as Credentials, + type AuthCredentialCreateRequest as AuthCredentialCreateRequest, + type AuthCredentialCreateRequestOneOf as AuthCredentialCreateRequestOneOf, + type AuthCredentialListResponse as AuthCredentialListResponse, + type AuthCredentialResponseOneOf as AuthCredentialResponseOneOf, + type AuthCredentialVerifyRequest as AuthCredentialVerifyRequest, + type AuthCredentialVerifyRequestOneOf as AuthCredentialVerifyRequestOneOf, type AuthMethod as AuthMethod, - type CredentialListResponse as CredentialListResponse, - type CredentialResendChallengeResponse as CredentialResendChallengeResponse, - type CredentialRevokeResponse as CredentialRevokeResponse, - type CredentialVerifyResponse as CredentialVerifyResponse, + type AuthMethodResponse as AuthMethodResponse, + type AuthMethodType as AuthMethodType, + type AuthSession as AuthSession, + type AuthSignedRequestChallenge as AuthSignedRequestChallenge, + type EmailOtpCredentialCreateRequest as EmailOtpCredentialCreateRequest, + type EmailOtpCredentialCreateRequestFields as EmailOtpCredentialCreateRequestFields, + type EmailOtpCredentialVerifyRequest as EmailOtpCredentialVerifyRequest, + type EmailOtpCredentialVerifyRequestFields as EmailOtpCredentialVerifyRequestFields, + type OAuthCredentialCreateRequest as OAuthCredentialCreateRequest, + type OAuthCredentialCreateRequestFields as OAuthCredentialCreateRequestFields, + type OAuthCredentialVerifyRequest as OAuthCredentialVerifyRequest, + type OAuthCredentialVerifyRequestFields as OAuthCredentialVerifyRequestFields, + type PasskeyAssertion as PasskeyAssertion, + type PasskeyAttestation as PasskeyAttestation, + type PasskeyAuthChallenge as PasskeyAuthChallenge, + type PasskeyCredentialCreateRequest as PasskeyCredentialCreateRequest, + type PasskeyCredentialCreateRequestFields as PasskeyCredentialCreateRequestFields, + type PasskeyCredentialVerifyRequest as PasskeyCredentialVerifyRequest, + type PasskeyCredentialVerifyRequestFields as PasskeyCredentialVerifyRequestFields, + type SignedRequestChallenge as SignedRequestChallenge, type CredentialCreateParams as CredentialCreateParams, type CredentialListParams as CredentialListParams, - type CredentialResendChallengeParams as CredentialResendChallengeParams, - type CredentialRevokeParams as CredentialRevokeParams, + type CredentialDeleteParams as CredentialDeleteParams, + type CredentialChallengeParams as CredentialChallengeParams, type CredentialVerifyParams as CredentialVerifyParams, }; export { Sessions as Sessions, type SessionListResponse as SessionListResponse, - type SessionRevokeResponse as SessionRevokeResponse, type SessionListParams as SessionListParams, - type SessionRevokeParams as SessionRevokeParams, + type SessionDeleteParams as SessionDeleteParams, }; } diff --git a/src/resources/auth/credentials.ts b/src/resources/auth/credentials.ts index ad8c057..e1b11fb 100644 --- a/src/resources/auth/credentials.ts +++ b/src/resources/auth/credentials.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; -import * as CredentialsAPI from './credentials'; import { APIPromise } from '../../core/api-promise'; import { buildHeaders } from '../../internal/headers'; import { RequestOptions } from '../../internal/request-options'; @@ -54,16 +53,17 @@ export class Credentials extends APIResource { * * @example * ```ts - * const authMethod = await client.auth.credentials.create({ - * AuthCredentialCreateRequest: { - * accountId: - * 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002', - * type: 'EMAIL_OTP', - * }, - * }); + * const authMethodResponse = + * await client.auth.credentials.create({ + * AuthCredentialCreateRequest: { + * accountId: + * 'InternalAccount:019542f5-b3e7-1d02-0000-000000000002', + * type: 'EMAIL_OTP', + * }, + * }); * ``` */ - create(params: CredentialCreateParams, options?: RequestOptions): APIPromise { + create(params: CredentialCreateParams, options?: RequestOptions): APIPromise { const { AuthCredentialCreateRequest, 'Grid-Wallet-Signature': gridWalletSignature, @@ -93,53 +93,14 @@ export class Credentials extends APIResource { * * @example * ```ts - * const credentials = await client.auth.credentials.list({ - * accountId: 'accountId', - * }); - * ``` - */ - list(query: CredentialListParams, options?: RequestOptions): APIPromise { - return this._client.get('/auth/credentials', { query, ...options }); - } - - /** - * Re-issue the challenge for an existing authentication credential. - * - * For `EMAIL_OTP` credentials, this triggers a new one-time password email to the - * address on file. The response is a plain `AuthMethod`; there is no challenge - * body to surface because the OTP is delivered out-of-band via email. After the - * user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete - * verification and issue a session. - * - * `OAUTH` credentials do not have a challenge step. To authenticate or - * reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` - * with a fresh OIDC token and a `clientPublicKey`. - * - * For `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge - * for reauthentication. The request body must carry the client's ephemeral - * `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload - * the returned challenge is computed from — this seals the resulting session - * signing key to the client. The response is a `PasskeyAuthChallenge` — the base - * `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The - * client passes the `challenge` into `navigator.credentials.get()` and submits the - * resulting assertion to `POST /auth/credentials/{id}/verify` with - * `Request-Id: ` to receive a session. - * - * @example - * ```ts - * const response = - * await client.auth.credentials.resendChallenge('id', { - * clientPublicKey: - * '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + * const authCredentialListResponse = + * await client.auth.credentials.list({ + * accountId: 'accountId', * }); * ``` */ - resendChallenge( - id: string, - body: CredentialResendChallengeParams | null | undefined = {}, - options?: RequestOptions, - ): APIPromise { - return this._client.post(path`/auth/credentials/${id}/challenge`, { body, ...options }); + list(query: CredentialListParams, options?: RequestOptions): APIPromise { + return this._client.get('/auth/credentials', { query, ...options }); } /** @@ -162,14 +123,15 @@ export class Credentials extends APIResource { * * @example * ```ts - * const response = await client.auth.credentials.revoke('id'); + * const authSignedRequestChallenge = + * await client.auth.credentials.delete('id'); * ``` */ - revoke( + delete( id: string, - params: CredentialRevokeParams | null | undefined = {}, + params: CredentialDeleteParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { 'Grid-Wallet-Signature': gridWalletSignature, 'Request-Id': requestID } = params ?? {}; return this._client.delete(path`/auth/credentials/${id}`, { ...options, @@ -183,6 +145,46 @@ export class Credentials extends APIResource { }); } + /** + * Re-issue the challenge for an existing authentication credential. + * + * For `EMAIL_OTP` credentials, this triggers a new one-time password email to the + * address on file. The response is a plain `AuthMethod`; there is no challenge + * body to surface because the OTP is delivered out-of-band via email. After the + * user receives the new OTP, call `POST /auth/credentials/{id}/verify` to complete + * verification and issue a session. + * + * `OAUTH` credentials do not have a challenge step. To authenticate or + * reauthenticate an OAuth credential, call `POST /auth/credentials/{id}/verify` + * with a fresh OIDC token and a `clientPublicKey`. + * + * For `PASSKEY` credentials, this issues a fresh Grid-generated WebAuthn challenge + * for reauthentication. The request body must carry the client's ephemeral + * `clientPublicKey` so Grid can bake it into the Turnkey session-creation payload + * the returned challenge is computed from — this seals the resulting session + * signing key to the client. The response is a `PasskeyAuthChallenge` — the base + * `AuthMethod` fields plus the new `challenge`, `requestId`, and `expiresAt`. The + * client passes the `challenge` into `navigator.credentials.get()` and submits the + * resulting assertion to `POST /auth/credentials/{id}/verify` with + * `Request-Id: ` to receive a session. + * + * @example + * ```ts + * const authCredentialResponseOneOf = + * await client.auth.credentials.challenge('id', { + * clientPublicKey: + * '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + * }); + * ``` + */ + challenge( + id: string, + body: CredentialChallengeParams | null | undefined = {}, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/auth/credentials/${id}/challenge`, { body, ...options }); + } + /** * Complete the verification step for a previously created authentication * credential and issue a session signing key. @@ -209,7 +211,7 @@ export class Credentials extends APIResource { * * @example * ```ts - * const response = await client.auth.credentials.verify( + * const authSession = await client.auth.credentials.verify( * 'id', * { * AuthCredentialVerifyRequest: { @@ -222,11 +224,7 @@ export class Credentials extends APIResource { * ); * ``` */ - verify( - id: string, - params: CredentialVerifyParams, - options?: RequestOptions, - ): APIPromise { + verify(id: string, params: CredentialVerifyParams, options?: RequestOptions): APIPromise { const { AuthCredentialVerifyRequest, 'Request-Id': requestID } = params; return this._client.post(path`/auth/credentials/${id}/verify`, { body: AuthCredentialVerifyRequest, @@ -239,6 +237,45 @@ export class Credentials extends APIResource { } } +export interface AuthCredentialCreateRequest { + /** + * Identifier of the internal account that this credential will authenticate. + */ + accountId: string; +} + +export type AuthCredentialCreateRequestOneOf = + | EmailOtpCredentialCreateRequest + | OAuthCredentialCreateRequest + | PasskeyCredentialCreateRequest; + +export interface AuthCredentialListResponse { + /** + * List of authentication credentials registered on the internal account. + */ + data: Array; +} + +/** + * Discriminated response shape returned from + * `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` credentials the body is + * a plain `AuthMethod` (wrapped as `AuthMethodResponse` to disambiguate the + * oneOf). For `PASSKEY` credentials the body is a `PasskeyAuthChallenge` — the + * base `AuthMethod` fields plus the Grid-issued `challenge`, `requestId`, and + * `expiresAt` that drive the subsequent assertion. OAuth credentials do not use + * the challenge endpoint; call `POST /auth/credentials/{id}/verify` with a fresh + * OIDC token instead. Registration responses from `POST /auth/credentials` use the + * simpler `AuthMethodResponse` shape directly for all three credential types. + */ +export type AuthCredentialResponseOneOf = AuthMethodResponse | PasskeyAuthChallenge; + +export type AuthCredentialVerifyRequest = unknown; + +export type AuthCredentialVerifyRequestOneOf = + | EmailOtpCredentialVerifyRequestFields + | OAuthCredentialVerifyRequestFields + | PasskeyCredentialVerifyRequestFields; + export interface AuthMethod { /** * System-generated unique identifier for the authentication credential. @@ -271,7 +308,7 @@ export interface AuthMethod { * - `EMAIL_OTP`: A one-time password delivered to the user's email address. * - `PASSKEY`: A WebAuthn passkey bound to the user's device. */ - type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; + type: AuthMethodType; /** * Last update timestamp. @@ -279,107 +316,65 @@ export interface AuthMethod { updatedAt: string; } -export interface CredentialListResponse { +/** + * Strict wrapper around `AuthMethod`. Used directly as the registration response + * on `POST /auth/credentials` (all three credential types) and inside + * `AuthCredentialResponseOneOf` for the `EMAIL_OTP` branch of + * `POST /auth/credentials/{id}/challenge`. The only difference from `AuthMethod` + * is `unevaluatedProperties: false`, which disambiguates the oneOf against + * `PasskeyAuthChallenge` — without the strictness, an `AuthMethod` with extra + * fields would ambiguously match both branches. + */ +export interface AuthMethodResponse { /** - * List of authentication credentials registered on the internal account. + * System-generated unique identifier for the authentication credential. */ - data: Array; -} + id: string; -/** - * Discriminated response shape returned from - * `POST /auth/credentials/{id}/challenge`. For `EMAIL_OTP` credentials the body is - * a plain `AuthMethod` (wrapped as `AuthMethodResponse` to disambiguate the - * oneOf). For `PASSKEY` credentials the body is a `PasskeyAuthChallenge` — the - * base `AuthMethod` fields plus the Grid-issued `challenge`, `requestId`, and - * `expiresAt` that drive the subsequent assertion. OAuth credentials do not use - * the challenge endpoint; call `POST /auth/credentials/{id}/verify` with a fresh - * OIDC token instead. Registration responses from `POST /auth/credentials` use the - * simpler `AuthMethodResponse` shape directly for all three credential types. - */ -export type CredentialResendChallengeResponse = - | AuthMethod - | CredentialResendChallengeResponse.PasskeyAuthChallenge; - -export namespace CredentialResendChallengeResponse { - /** - * Extended `AuthMethod` shape returned for `PASSKEY` credentials from - * `POST /auth/credentials` (first-authentication case) and - * `POST /auth/credentials/{id}/challenge` (reauthentication case). Adds a - * Grid-issued `challenge`, the corresponding `requestId`, and the challenge's - * `expiresAt` to the base `AuthMethod` fields. The client signs the challenge with - * the passkey to produce the assertion submitted to - * `POST /auth/credentials/{id}/verify`. - */ - export interface PasskeyAuthChallenge extends CredentialsAPI.AuthMethod { - /** - * Base64url-encoded challenge issued by Grid for the pending passkey - * authentication. The client passes it into `navigator.credentials.get()` as the - * WebAuthn challenge; the resulting assertion is submitted to - * `POST /auth/credentials/{id}/verify`. Single-use; a new challenge is issued on - * the next call to `POST /auth/credentials/{id}/challenge`. - */ - challenge: string; - - /** - * Timestamp after which the issued challenge is no longer valid. The assertion - * must reach `POST /auth/credentials/{id}/verify` before this time; otherwise the - * client must request a fresh challenge via - * `POST /auth/credentials/{id}/challenge`. - */ - expiresAt: string; - - /** - * Unique identifier for this pending passkey authentication request. Must be - * echoed as the `Request-Id` header on the subsequent - * `POST /auth/credentials/{id}/verify` call so Grid can correlate the assertion - * with the issued challenge. - */ - requestId: string; - } -} + /** + * Identifier of the internal account that this credential authenticates. + */ + accountId: string; -/** - * 202 response returned from Embedded Wallet Auth endpoints that require a signed - * retry — `POST /auth/credentials` (adding an additional credential), - * `DELETE /auth/credentials/{id}` (revoking a credential), and - * `DELETE /auth/sessions/{id}` (revoking a session). Carries the signing fields - * from `SignedRequestChallenge` plus the `type` of the authentication credential - * involved (being added, being revoked, or that issued the session being revoked). - * The client already knows the target resource id from the request path / body it - * just sent, so nothing beyond `type` is echoed in the response. - */ -export interface CredentialRevokeResponse { /** - * Timestamp after which this challenge is no longer valid. The signed retry must - * be submitted before this time. + * Creation timestamp. */ - expiresAt: string; + createdAt: string; /** - * Canonical payload for the retry authorization stamp. Build an API-key stamp over - * this exact value with the session API keypair, then send the full - * base64url-encoded stamp in `Grid-Wallet-Signature` on the retry that completes - * the original request. + * Human-readable identifier for this credential. For EMAIL_OTP credentials this is + * the email address; for OAUTH credentials it is typically the email claim from + * the OIDC token; for PASSKEY credentials it is the validated nickname provided at + * registration time. */ - payloadToSign: string; + nickname: string; /** - * Unique identifier for this request. Must be echoed in the `Request-Id` header on - * the signed retry so the server can correlate the retry with the issued - * challenge. + * The type of authentication credential. + * + * - `OAUTH`: OpenID Connect (OIDC) token issued by an identity provider such as + * Google or Apple. + * - `EMAIL_OTP`: A one-time password delivered to the user's email address. + * - `PASSKEY`: A WebAuthn passkey bound to the user's device. */ - requestId: string; + type: AuthMethodType; /** - * Credential type relevant to this challenge: the credential type being added - * (`POST /auth/credentials`), the credential type being revoked - * (`DELETE /auth/credentials/{id}`), or the type of credential that issued the - * session being revoked (`DELETE /auth/sessions/{id}`). + * Last update timestamp. */ - type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; + updatedAt: string; } +/** + * The type of authentication credential. + * + * - `OAUTH`: OpenID Connect (OIDC) token issued by an identity provider such as + * Google or Apple. + * - `EMAIL_OTP`: A one-time password delivered to the user's email address. + * - `PASSKEY`: A WebAuthn passkey bound to the user's device. + */ +export type AuthMethodType = 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; + /** * An authentication session on an Embedded Wallet internal account. Returned from * `GET /auth/sessions` (list) and `POST /auth/credentials/{id}/verify` (on @@ -387,7 +382,7 @@ export interface CredentialRevokeResponse { * `encryptedSessionSigningKey` — it is delivered exactly once at the moment the * session is issued and is never returned by the list endpoint. */ -export interface CredentialVerifyResponse extends AuthMethod { +export interface AuthSession extends AuthMethod { /** * System-generated unique identifier for the session. Pass this value to * `DELETE /auth/sessions/{id}` to revoke the session before `expiresAt`. Overrides @@ -417,14 +412,345 @@ export interface CredentialVerifyResponse extends AuthMethod { encryptedSessionSigningKey?: string; } +/** + * 202 response returned from Embedded Wallet Auth endpoints that require a signed + * retry — `POST /auth/credentials` (adding an additional credential), + * `DELETE /auth/credentials/{id}` (revoking a credential), and + * `DELETE /auth/sessions/{id}` (revoking a session). Carries the signing fields + * from `SignedRequestChallenge` plus the `type` of the authentication credential + * involved (being added, being revoked, or that issued the session being revoked). + * The client already knows the target resource id from the request path / body it + * just sent, so nothing beyond `type` is echoed in the response. + */ +export interface AuthSignedRequestChallenge extends SignedRequestChallenge { + /** + * Credential type relevant to this challenge: the credential type being added + * (`POST /auth/credentials`), the credential type being revoked + * (`DELETE /auth/credentials/{id}`), or the type of credential that issued the + * session being revoked (`DELETE /auth/sessions/{id}`). + */ + type: AuthMethodType; +} + +export interface EmailOtpCredentialCreateRequest + extends AuthCredentialCreateRequest, + EmailOtpCredentialCreateRequestFields {} + +export interface EmailOtpCredentialCreateRequestFields { + /** + * Discriminator value identifying this as an email OTP credential. + */ + type: 'EMAIL_OTP'; +} + +export interface EmailOtpCredentialVerifyRequestFields { + /** + * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 + * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters + * total). The matching private key must remain on the client. Grid encrypts the + * session signing key returned in the response to this public key. The key is + * ephemeral and one-time-use per verification request. + */ + clientPublicKey: string; + + /** + * The one-time password received by the user via email. + */ + otp: string; + + /** + * Discriminator value identifying this as an email OTP verification. + */ + type: 'EMAIL_OTP'; +} + +export interface EmailOtpCredentialVerifyRequestFields { + /** + * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 + * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters + * total). The matching private key must remain on the client. Grid encrypts the + * session signing key returned in the response to this public key. The key is + * ephemeral and one-time-use per verification request. + */ + clientPublicKey: string; + + /** + * The one-time password received by the user via email. + */ + otp: string; + + /** + * Discriminator value identifying this as an email OTP verification. + */ + type: 'EMAIL_OTP'; +} + +export interface OAuthCredentialCreateRequest + extends AuthCredentialCreateRequest, + OAuthCredentialCreateRequestFields {} + +export interface OAuthCredentialCreateRequestFields { + /** + * OIDC ID token issued by the identity provider (e.g. Google, Apple). Grid fetches + * the issuer's signing key from the `iss` claim's `.well-known` OpenID + * configuration and verifies the token signature. The token's `iat` claim must be + * less than 60 seconds before the request timestamp. + */ + oidcToken: string; + + /** + * Discriminator value identifying this as an OAuth credential. + */ + type: 'OAUTH'; +} + +export interface OAuthCredentialVerifyRequestFields { + /** + * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 + * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters + * total). The matching private key must remain on the client. Grid encrypts the + * session signing key returned in the response to this public key. The key is + * ephemeral and one-time-use per verification request. + */ + clientPublicKey: string; + + /** + * OIDC ID token issued by the identity provider. For reauthentication after a + * prior session expired, supply a fresh token — the token's `iat` claim must be + * less than 60 seconds before the request timestamp. Grid fetches the issuer's + * signing key from the `iss` claim's `.well-known` OpenID configuration and + * verifies the token signature. + */ + oidcToken: string; + + /** + * Discriminator value identifying this as an OAuth verification. + */ + type: 'OAUTH'; +} + +export interface OAuthCredentialVerifyRequestFields { + /** + * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 + * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters + * total). The matching private key must remain on the client. Grid encrypts the + * session signing key returned in the response to this public key. The key is + * ephemeral and one-time-use per verification request. + */ + clientPublicKey: string; + + /** + * OIDC ID token issued by the identity provider. For reauthentication after a + * prior session expired, supply a fresh token — the token's `iat` claim must be + * less than 60 seconds before the request timestamp. Grid fetches the issuer's + * signing key from the `iss` claim's `.well-known` OpenID configuration and + * verifies the token signature. + */ + oidcToken: string; + + /** + * Discriminator value identifying this as an OAuth verification. + */ + type: 'OAUTH'; +} + +export interface PasskeyAssertion { + /** + * Base64url-encoded authenticator data returned by the authenticator during the + * assertion. Corresponds to `AuthenticatorAssertionResponse.authenticatorData`. + */ + authenticatorData: string; + + /** + * Base64url-encoded JSON client data collected by the browser during the WebAuthn + * `navigator.credentials.get()` call. Corresponds to + * `AuthenticatorAssertionResponse.clientDataJSON` from the WebAuthn spec — Grid's + * field name is intentionally camelCased as `clientDataJson` (lowercase JSON) for + * consistency with the rest of the API; the value is the same bytes the browser + * returns. Contains the challenge, origin, and `type: "webauthn.get"`. + */ + clientDataJson: string; + + /** + * Base64url-encoded credential identifier returned during the WebAuthn assertion. + * Corresponds to `PublicKeyCredential.rawId`. + */ + credentialId: string; + + /** + * Base64url-encoded signature produced by the authenticator over + * `authenticatorData || SHA-256(clientDataJSON)`. Corresponds to + * `AuthenticatorAssertionResponse.signature`. The signature byte format is + * determined by the credential's public-key algorithm — DER-encoded ECDSA for + * ES256 (P-256, typical for passkeys), PKCS#1 v1.5 for RS256, or a raw 64-byte + * signature for EdDSA. + */ + signature: string; + + /** + * Base64url-encoded user handle returned by the authenticator. Corresponds to + * `AuthenticatorAssertionResponse.userHandle`. Populated (and required by the + * WebAuthn spec) for discoverable credentials — resident keys used in the "Sign in + * with passkey" autofill flow — and typically present for passkey registrations. + * Omit this field entirely for non-discoverable credentials specified via + * `allowCredentials` where the authenticator returns no user handle. + */ + userHandle?: string; +} + +export interface PasskeyAttestation { + /** + * Base64url-encoded CBOR attestation object produced by the authenticator during + * registration. Corresponds to + * `AuthenticatorAttestationResponse.attestationObject`. + */ + attestationObject: string; + + /** + * Base64url-encoded JSON client data collected by the browser during the WebAuthn + * `navigator.credentials.create()` call. Corresponds to + * `AuthenticatorAttestationResponse.clientDataJSON` from the WebAuthn spec — + * Grid's field name is intentionally camelCased as `clientDataJson` (lowercase + * JSON) for consistency with the rest of the API; the value is the same bytes the + * browser returns. Contains the challenge, origin, and `type: "webauthn.create"`. + */ + clientDataJson: string; + + /** + * Base64url-encoded credential identifier produced by the authenticator at + * registration time. Typically the base64url of `PublicKeyCredential.rawId`. + */ + credentialId: string; + + /** + * Optional. WebAuthn transports as returned by + * `AuthenticatorAttestationResponse.getTransports()`. Values follow the W3C + * `AuthenticatorTransport` enum — pass the raw values through to Grid; + * provider-specific translation is handled server-side. Some authenticators return + * an empty array; omit the field or send `[]` in that case. + */ + transports?: Array<'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'>; +} + +/** + * Extended `AuthMethod` shape returned for `PASSKEY` credentials from + * `POST /auth/credentials` (first-authentication case) and + * `POST /auth/credentials/{id}/challenge` (reauthentication case). Adds a + * Grid-issued `challenge`, the corresponding `requestId`, and the challenge's + * `expiresAt` to the base `AuthMethod` fields. The client signs the challenge with + * the passkey to produce the assertion submitted to + * `POST /auth/credentials/{id}/verify`. + */ +export interface PasskeyAuthChallenge extends AuthMethod { + /** + * Base64url-encoded challenge issued by Grid for the pending passkey + * authentication. The client passes it into `navigator.credentials.get()` as the + * WebAuthn challenge; the resulting assertion is submitted to + * `POST /auth/credentials/{id}/verify`. Single-use; a new challenge is issued on + * the next call to `POST /auth/credentials/{id}/challenge`. + */ + challenge: string; + + /** + * Timestamp after which the issued challenge is no longer valid. The assertion + * must reach `POST /auth/credentials/{id}/verify` before this time; otherwise the + * client must request a fresh challenge via + * `POST /auth/credentials/{id}/challenge`. + */ + expiresAt: string; + + /** + * Unique identifier for this pending passkey authentication request. Must be + * echoed as the `Request-Id` header on the subsequent + * `POST /auth/credentials/{id}/verify` call so Grid can correlate the assertion + * with the issued challenge. + */ + requestId: string; +} + +export interface PasskeyCredentialCreateRequest + extends AuthCredentialCreateRequest, + PasskeyCredentialCreateRequestFields {} + +export interface PasskeyCredentialCreateRequestFields { + attestation: PasskeyAttestation; + + /** + * Base64url-encoded WebAuthn challenge issued by the platform backend and passed + * to the client before `navigator.credentials.create()`. Grid verifies it matches + * the challenge embedded in the attestation's `clientDataJson`, binding the + * attestation to this registration. Must be single-use. + */ + challenge: string; + + /** + * Human-readable identifier for the passkey, chosen by the user at registration + * time (e.g. "iPhone Face-ID", "YubiKey 5C"). Leading and trailing whitespace is + * ignored. Must be 1-100 characters and may contain Unicode letters, numbers, + * spaces, and the following separators: period, underscore, hyphen, apostrophe, + * and parentheses. Shown back on AuthMethod responses and in credential listings. + */ + nickname: string; + + /** + * Discriminator value identifying this as a passkey credential. + */ + type: 'PASSKEY'; +} + +export interface PasskeyCredentialVerifyRequestFields { + assertion: PasskeyAssertion; + + /** + * Discriminator value identifying this as a passkey verification. + */ + type: 'PASSKEY'; +} + +export interface PasskeyCredentialVerifyRequestFields { + assertion: PasskeyAssertion; + + /** + * Discriminator value identifying this as a passkey verification. + */ + type: 'PASSKEY'; +} + +/** + * Common base for two-step signed-retry challenge responses on Embedded Wallet + * endpoints (credential revocation, session revocation, wallet export, and + * similar). Holds the signing fields shared across every challenge shape; each + * variant composes this base via `allOf` and adds its own resource `id` (and + * `type`, when applicable) with variant-specific description and example. + */ +export interface SignedRequestChallenge { + /** + * Timestamp after which this challenge is no longer valid. The signed retry must + * be submitted before this time. + */ + expiresAt: string; + + /** + * Canonical payload for the retry authorization stamp. Build an API-key stamp over + * this exact value with the session API keypair, then send the full + * base64url-encoded stamp in `Grid-Wallet-Signature` on the retry that completes + * the original request. + */ + payloadToSign: string; + + /** + * Unique identifier for this request. Must be echoed in the `Request-Id` header on + * the signed retry so the server can correlate the retry with the issued + * challenge. + */ + requestId: string; +} + export interface CredentialCreateParams { /** * Body param */ - AuthCredentialCreateRequest: - | CredentialCreateParams.EmailOtpCredentialCreateRequest - | CredentialCreateParams.OAuthCredentialCreateRequest - | CredentialCreateParams.PasskeyCredentialCreateRequest; + AuthCredentialCreateRequest: AuthCredentialCreateRequestOneOf; /** * Header param: Full API-key stamp built over the prior `payloadToSign` with the @@ -444,107 +770,6 @@ export interface CredentialCreateParams { 'Request-Id'?: string; } -export namespace CredentialCreateParams { - export interface EmailOtpCredentialCreateRequest { - /** - * Identifier of the internal account that this credential will authenticate. - */ - accountId: string; - - /** - * Discriminator value identifying this as an email OTP credential. - */ - type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; - } - - export interface OAuthCredentialCreateRequest { - /** - * Identifier of the internal account that this credential will authenticate. - */ - accountId: string; - - /** - * OIDC ID token issued by the identity provider (e.g. Google, Apple). Grid fetches - * the issuer's signing key from the `iss` claim's `.well-known` OpenID - * configuration and verifies the token signature. The token's `iat` claim must be - * less than 60 seconds before the request timestamp. - */ - oidcToken: string; - - /** - * Discriminator value identifying this as an OAuth credential. - */ - type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; - } - - export interface PasskeyCredentialCreateRequest { - /** - * Identifier of the internal account that this credential will authenticate. - */ - accountId: string; - - attestation: PasskeyCredentialCreateRequest.Attestation; - - /** - * Base64url-encoded WebAuthn challenge issued by the platform backend and passed - * to the client before `navigator.credentials.create()`. Grid verifies it matches - * the challenge embedded in the attestation's `clientDataJson`, binding the - * attestation to this registration. Must be single-use. - */ - challenge: string; - - /** - * Human-readable identifier for the passkey, chosen by the user at registration - * time (e.g. "iPhone Face-ID", "YubiKey 5C"). Leading and trailing whitespace is - * ignored. Must be 1-100 characters and may contain Unicode letters, numbers, - * spaces, and the following separators: period, underscore, hyphen, apostrophe, - * and parentheses. Shown back on AuthMethod responses and in credential listings. - */ - nickname: string; - - /** - * Discriminator value identifying this as a passkey credential. - */ - type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; - } - - export namespace PasskeyCredentialCreateRequest { - export interface Attestation { - /** - * Base64url-encoded CBOR attestation object produced by the authenticator during - * registration. Corresponds to - * `AuthenticatorAttestationResponse.attestationObject`. - */ - attestationObject: string; - - /** - * Base64url-encoded JSON client data collected by the browser during the WebAuthn - * `navigator.credentials.create()` call. Corresponds to - * `AuthenticatorAttestationResponse.clientDataJSON` from the WebAuthn spec — - * Grid's field name is intentionally camelCased as `clientDataJson` (lowercase - * JSON) for consistency with the rest of the API; the value is the same bytes the - * browser returns. Contains the challenge, origin, and `type: "webauthn.create"`. - */ - clientDataJson: string; - - /** - * Base64url-encoded credential identifier produced by the authenticator at - * registration time. Typically the base64url of `PublicKeyCredential.rawId`. - */ - credentialId: string; - - /** - * Optional. WebAuthn transports as returned by - * `AuthenticatorAttestationResponse.getTransports()`. Values follow the W3C - * `AuthenticatorTransport` enum — pass the raw values through to Grid; - * provider-specific translation is handled server-side. Some authenticators return - * an empty array; omit the field or send `[]` in that case. - */ - transports?: Array<'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid'>; - } - } -} - export interface CredentialListParams { /** * Internal account id whose authentication credentials to list. @@ -552,19 +777,7 @@ export interface CredentialListParams { accountId: string; } -export interface CredentialResendChallengeParams { - /** - * Required for `PASSKEY` credentials. Client-generated P-256 public key, - * hex-encoded in uncompressed SEC1 format (`04` prefix followed by the 32-byte X - * and 32-byte Y coordinates; 130 hex characters total). The matching private key - * must remain on the client. Grid bakes this key into the Turnkey session-creation - * payload that the returned `challenge` is computed from, so the resulting session - * signing key is sealed to the client. Ignored for `EMAIL_OTP`. - */ - clientPublicKey?: string; -} - -export interface CredentialRevokeParams { +export interface CredentialDeleteParams { /** * Full API-key stamp built over the prior `payloadToSign` with the session API * keypair of an existing verified authentication credential on the same internal @@ -581,14 +794,23 @@ export interface CredentialRevokeParams { 'Request-Id'?: string; } +export interface CredentialChallengeParams { + /** + * Required for `PASSKEY` credentials. Client-generated P-256 public key, + * hex-encoded in uncompressed SEC1 format (`04` prefix followed by the 32-byte X + * and 32-byte Y coordinates; 130 hex characters total). The matching private key + * must remain on the client. Grid bakes this key into the Turnkey session-creation + * payload that the returned `challenge` is computed from, so the resulting session + * signing key is sealed to the client. Ignored for `EMAIL_OTP`. + */ + clientPublicKey?: string; +} + export interface CredentialVerifyParams { /** * Body param */ - AuthCredentialVerifyRequest: - | CredentialVerifyParams.EmailOtpCredentialVerifyRequest - | CredentialVerifyParams.OAuthCredentialVerifyRequest - | CredentialVerifyParams.PasskeyCredentialVerifyRequest; + AuthCredentialVerifyRequest: AuthCredentialVerifyRequestOneOf; /** * Header param: The `requestId` returned alongside the Grid-issued `challenge` @@ -599,120 +821,39 @@ export interface CredentialVerifyParams { 'Request-Id'?: string; } -export namespace CredentialVerifyParams { - export interface EmailOtpCredentialVerifyRequest { - /** - * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 - * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters - * total). The matching private key must remain on the client. Grid encrypts the - * session signing key returned in the response to this public key. The key is - * ephemeral and one-time-use per verification request. - */ - clientPublicKey: string; - - /** - * The one-time password received by the user via email. - */ - otp: string; - - /** - * Discriminator value identifying this as an email OTP verification. - */ - type: 'EMAIL_OTP' | 'OAUTH' | 'PASSKEY'; - } - - export interface OAuthCredentialVerifyRequest { - /** - * Client-generated P-256 public key, hex-encoded in uncompressed SEC1 format (0x04 - * prefix followed by the 32-byte X and 32-byte Y coordinates; 130 hex characters - * total). The matching private key must remain on the client. Grid encrypts the - * session signing key returned in the response to this public key. The key is - * ephemeral and one-time-use per verification request. - */ - clientPublicKey: string; - - /** - * OIDC ID token issued by the identity provider. For reauthentication after a - * prior session expired, supply a fresh token — the token's `iat` claim must be - * less than 60 seconds before the request timestamp. Grid fetches the issuer's - * signing key from the `iss` claim's `.well-known` OpenID configuration and - * verifies the token signature. - */ - oidcToken: string; - - /** - * Discriminator value identifying this as an OAuth verification. - */ - type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; - } - - export interface PasskeyCredentialVerifyRequest { - assertion: PasskeyCredentialVerifyRequest.Assertion; - - /** - * Discriminator value identifying this as a passkey verification. - */ - type: 'PASSKEY' | 'OAUTH' | 'EMAIL_OTP'; - } - - export namespace PasskeyCredentialVerifyRequest { - export interface Assertion { - /** - * Base64url-encoded authenticator data returned by the authenticator during the - * assertion. Corresponds to `AuthenticatorAssertionResponse.authenticatorData`. - */ - authenticatorData: string; - - /** - * Base64url-encoded JSON client data collected by the browser during the WebAuthn - * `navigator.credentials.get()` call. Corresponds to - * `AuthenticatorAssertionResponse.clientDataJSON` from the WebAuthn spec — Grid's - * field name is intentionally camelCased as `clientDataJson` (lowercase JSON) for - * consistency with the rest of the API; the value is the same bytes the browser - * returns. Contains the challenge, origin, and `type: "webauthn.get"`. - */ - clientDataJson: string; - - /** - * Base64url-encoded credential identifier returned during the WebAuthn assertion. - * Corresponds to `PublicKeyCredential.rawId`. - */ - credentialId: string; - - /** - * Base64url-encoded signature produced by the authenticator over - * `authenticatorData || SHA-256(clientDataJSON)`. Corresponds to - * `AuthenticatorAssertionResponse.signature`. The signature byte format is - * determined by the credential's public-key algorithm — DER-encoded ECDSA for - * ES256 (P-256, typical for passkeys), PKCS#1 v1.5 for RS256, or a raw 64-byte - * signature for EdDSA. - */ - signature: string; - - /** - * Base64url-encoded user handle returned by the authenticator. Corresponds to - * `AuthenticatorAssertionResponse.userHandle`. Populated (and required by the - * WebAuthn spec) for discoverable credentials — resident keys used in the "Sign in - * with passkey" autofill flow — and typically present for passkey registrations. - * Omit this field entirely for non-discoverable credentials specified via - * `allowCredentials` where the authenticator returns no user handle. - */ - userHandle?: string; - } - } -} - export declare namespace Credentials { export { + type AuthCredentialCreateRequest as AuthCredentialCreateRequest, + type AuthCredentialCreateRequestOneOf as AuthCredentialCreateRequestOneOf, + type AuthCredentialListResponse as AuthCredentialListResponse, + type AuthCredentialResponseOneOf as AuthCredentialResponseOneOf, + type AuthCredentialVerifyRequest as AuthCredentialVerifyRequest, + type AuthCredentialVerifyRequestOneOf as AuthCredentialVerifyRequestOneOf, type AuthMethod as AuthMethod, - type CredentialListResponse as CredentialListResponse, - type CredentialResendChallengeResponse as CredentialResendChallengeResponse, - type CredentialRevokeResponse as CredentialRevokeResponse, - type CredentialVerifyResponse as CredentialVerifyResponse, + type AuthMethodResponse as AuthMethodResponse, + type AuthMethodType as AuthMethodType, + type AuthSession as AuthSession, + type AuthSignedRequestChallenge as AuthSignedRequestChallenge, + type EmailOtpCredentialCreateRequest as EmailOtpCredentialCreateRequest, + type EmailOtpCredentialCreateRequestFields as EmailOtpCredentialCreateRequestFields, + type EmailOtpCredentialVerifyRequest as EmailOtpCredentialVerifyRequest, + type EmailOtpCredentialVerifyRequestFields as EmailOtpCredentialVerifyRequestFields, + type OAuthCredentialCreateRequest as OAuthCredentialCreateRequest, + type OAuthCredentialCreateRequestFields as OAuthCredentialCreateRequestFields, + type OAuthCredentialVerifyRequest as OAuthCredentialVerifyRequest, + type OAuthCredentialVerifyRequestFields as OAuthCredentialVerifyRequestFields, + type PasskeyAssertion as PasskeyAssertion, + type PasskeyAttestation as PasskeyAttestation, + type PasskeyAuthChallenge as PasskeyAuthChallenge, + type PasskeyCredentialCreateRequest as PasskeyCredentialCreateRequest, + type PasskeyCredentialCreateRequestFields as PasskeyCredentialCreateRequestFields, + type PasskeyCredentialVerifyRequest as PasskeyCredentialVerifyRequest, + type PasskeyCredentialVerifyRequestFields as PasskeyCredentialVerifyRequestFields, + type SignedRequestChallenge as SignedRequestChallenge, type CredentialCreateParams as CredentialCreateParams, type CredentialListParams as CredentialListParams, - type CredentialResendChallengeParams as CredentialResendChallengeParams, - type CredentialRevokeParams as CredentialRevokeParams, + type CredentialDeleteParams as CredentialDeleteParams, + type CredentialChallengeParams as CredentialChallengeParams, type CredentialVerifyParams as CredentialVerifyParams, }; } diff --git a/src/resources/auth/index.ts b/src/resources/auth/index.ts index 51b7604..4f96bb3 100644 --- a/src/resources/auth/index.ts +++ b/src/resources/auth/index.ts @@ -3,21 +3,42 @@ export { Auth } from './auth'; export { Credentials, + type AuthCredentialCreateRequest, + type AuthCredentialCreateRequestOneOf, + type AuthCredentialListResponse, + type AuthCredentialResponseOneOf, + type AuthCredentialVerifyRequest, + type AuthCredentialVerifyRequestOneOf, type AuthMethod, - type CredentialListResponse, - type CredentialResendChallengeResponse, - type CredentialRevokeResponse, - type CredentialVerifyResponse, + type AuthMethodResponse, + type AuthMethodType, + type AuthSession, + type AuthSignedRequestChallenge, + type EmailOtpCredentialCreateRequest, + type EmailOtpCredentialCreateRequestFields, + type EmailOtpCredentialVerifyRequest, + type EmailOtpCredentialVerifyRequestFields, + type OAuthCredentialCreateRequest, + type OAuthCredentialCreateRequestFields, + type OAuthCredentialVerifyRequest, + type OAuthCredentialVerifyRequestFields, + type PasskeyAssertion, + type PasskeyAttestation, + type PasskeyAuthChallenge, + type PasskeyCredentialCreateRequest, + type PasskeyCredentialCreateRequestFields, + type PasskeyCredentialVerifyRequest, + type PasskeyCredentialVerifyRequestFields, + type SignedRequestChallenge, type CredentialCreateParams, type CredentialListParams, - type CredentialResendChallengeParams, - type CredentialRevokeParams, + type CredentialDeleteParams, + type CredentialChallengeParams, type CredentialVerifyParams, } from './credentials'; export { Sessions, type SessionListResponse, - type SessionRevokeResponse, type SessionListParams, - type SessionRevokeParams, + type SessionDeleteParams, } from './sessions'; diff --git a/src/resources/auth/sessions.ts b/src/resources/auth/sessions.ts index 807a304..ff3603a 100644 --- a/src/resources/auth/sessions.ts +++ b/src/resources/auth/sessions.ts @@ -23,9 +23,9 @@ export class Sessions extends APIResource { * * @example * ```ts - * const sessions = await client.auth.sessions.list({ - * accountId: 'accountId', - * }); + * const sessionListResponse = await client.auth.sessions.list( + * { accountId: 'accountId' }, + * ); * ``` */ list(query: SessionListParams, options?: RequestOptions): APIPromise { @@ -47,14 +47,15 @@ export class Sessions extends APIResource { * * @example * ```ts - * const response = await client.auth.sessions.revoke('id'); + * const authSignedRequestChallenge = + * await client.auth.sessions.delete('id'); * ``` */ - revoke( + delete( id: string, - params: SessionRevokeParams | null | undefined = {}, + params: SessionDeleteParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { + ): APIPromise { const { 'Grid-Wallet-Signature': gridWalletSignature, 'Request-Id': requestID } = params ?? {}; return this._client.delete(path`/auth/sessions/${id}`, { ...options, @@ -73,87 +74,7 @@ export interface SessionListResponse { /** * List of active authentication sessions for the internal account. */ - data: Array; -} - -export namespace SessionListResponse { - /** - * An authentication session on an Embedded Wallet internal account. Returned from - * `GET /auth/sessions` (list) and `POST /auth/credentials/{id}/verify` (on - * credential verification). Only the verify response includes - * `encryptedSessionSigningKey` — it is delivered exactly once at the moment the - * session is issued and is never returned by the list endpoint. - */ - export interface Data extends CredentialsAPI.AuthMethod { - /** - * System-generated unique identifier for the session. Pass this value to - * `DELETE /auth/sessions/{id}` to revoke the session before `expiresAt`. Overrides - * the `id` inherited from `AuthMethod` so this response identifies the session - * rather than the authenticating credential. - */ - id: string; - - /** - * Timestamp after which the session is no longer valid and the - * `encryptedSessionSigningKey` must not be used to sign further requests. - */ - expiresAt: string; - - /** - * HPKE-encrypted session signing key, sealed to the `clientPublicKey` supplied on - * the verify request. Encoded as a base58check string: the decoded payload is a - * 33-byte compressed P-256 encapsulated public key followed by AES-256-GCM - * ciphertext. The client decrypts this key with its private key and uses it to - * sign subsequent Embedded Wallet requests until `expiresAt`. - * - * Only returned from `POST /auth/credentials/{id}/verify` (where the session is - * first issued). Omitted from responses that simply surface existing sessions - * (e.g. `GET /auth/sessions`) — Grid does not retain the plaintext key after the - * client has decrypted it. - */ - encryptedSessionSigningKey?: string; - } -} - -/** - * 202 response returned from Embedded Wallet Auth endpoints that require a signed - * retry — `POST /auth/credentials` (adding an additional credential), - * `DELETE /auth/credentials/{id}` (revoking a credential), and - * `DELETE /auth/sessions/{id}` (revoking a session). Carries the signing fields - * from `SignedRequestChallenge` plus the `type` of the authentication credential - * involved (being added, being revoked, or that issued the session being revoked). - * The client already knows the target resource id from the request path / body it - * just sent, so nothing beyond `type` is echoed in the response. - */ -export interface SessionRevokeResponse { - /** - * Timestamp after which this challenge is no longer valid. The signed retry must - * be submitted before this time. - */ - expiresAt: string; - - /** - * Canonical payload for the retry authorization stamp. Build an API-key stamp over - * this exact value with the session API keypair, then send the full - * base64url-encoded stamp in `Grid-Wallet-Signature` on the retry that completes - * the original request. - */ - payloadToSign: string; - - /** - * Unique identifier for this request. Must be echoed in the `Request-Id` header on - * the signed retry so the server can correlate the retry with the issued - * challenge. - */ - requestId: string; - - /** - * Credential type relevant to this challenge: the credential type being added - * (`POST /auth/credentials`), the credential type being revoked - * (`DELETE /auth/credentials/{id}`), or the type of credential that issued the - * session being revoked (`DELETE /auth/sessions/{id}`). - */ - type: 'OAUTH' | 'EMAIL_OTP' | 'PASSKEY'; + data: Array; } export interface SessionListParams { @@ -163,7 +84,7 @@ export interface SessionListParams { accountId: string; } -export interface SessionRevokeParams { +export interface SessionDeleteParams { /** * Full API-key stamp built over the prior `payloadToSign` with the session API * keypair of a verified session on the same internal account. Required on the @@ -182,8 +103,7 @@ export interface SessionRevokeParams { export declare namespace Sessions { export { type SessionListResponse as SessionListResponse, - type SessionRevokeResponse as SessionRevokeResponse, type SessionListParams as SessionListParams, - type SessionRevokeParams as SessionRevokeParams, + type SessionDeleteParams as SessionDeleteParams, }; } diff --git a/src/resources/customers/customers.ts b/src/resources/customers/customers.ts index c40da8a..02f9254 100644 --- a/src/resources/customers/customers.ts +++ b/src/resources/customers/customers.ts @@ -76,6 +76,7 @@ import * as InternalAccountsAPI from '../sandbox/internal-accounts'; import { InternalAccountsDefaultPagination } from '../sandbox/internal-accounts'; import { APIPromise } from '../../core/api-promise'; import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../core/pagination'; +import { buildHeaders } from '../../internal/headers'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; @@ -169,6 +170,62 @@ export class Customers extends APIResource { return this._client.delete(path`/customers/${customerID}`, options); } + /** + * Export the wallet credentials of an Embedded Wallet internal account. The + * returned wallet credentials are HPKE-encrypted to the `clientPublicKey` supplied + * in the request body. + * + * Export is a two-step signed-retry flow (same pattern as add-additional + * credential, revoke credential, and revoke session): + * + * 1. Call `POST /internal-accounts/{id}/export` with the request body + * `{ "clientPublicKey": "..." }` and no signature headers. Grid binds the + * `clientPublicKey` into the `payloadToSign` it returns, so the subsequent + * stamp in `Grid-Wallet-Signature` commits to the target encryption key. The + * response is `202` with `payloadToSign`, `requestId`, and `expiresAt`. + * + * 2. Use the session API keypair of a verified authentication credential on the + * same internal account to build an API-key stamp over `payloadToSign`, then + * retry with that full stamp as the `Grid-Wallet-Signature` header and the + * `requestId` echoed back as the `Request-Id` header. The retry body must carry + * the **same** `clientPublicKey` submitted in step 1 — Grid rejects the retry + * with `401` if it disagrees with what was bound into `payloadToSign`. The + * signed retry returns `200` with `encryptedWalletCredentials`, which the + * client decrypts with the matching private key. + * + * The `clientPublicKey` is ephemeral: generate a fresh P-256 keypair for this + * export and discard the private key after decrypting. Do not reuse the keypair + * from any prior verify call — that private key was already discarded after + * decrypting the session signing key it was issued against. + * + * @example + * ```ts + * const internalAccountExportResponse = + * await client.customers.export('id', { + * clientPublicKey: + * '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + * }); + * ``` + */ + export( + id: string, + params: CustomerExportParams, + options?: RequestOptions, + ): APIPromise { + const { 'Grid-Wallet-Signature': gridWalletSignature, 'Request-Id': requestID, ...body } = params; + return this._client.post(path`/internal-accounts/${id}/export`, { + body, + ...options, + headers: buildHeaders([ + { + ...(gridWalletSignature != null ? { 'Grid-Wallet-Signature': gridWalletSignature } : undefined), + ...(requestID != null ? { 'Request-Id': requestID } : undefined), + }, + options?.headers, + ]), + }); + } + /** * Generate a hosted KYC link to onboard a customer * @@ -686,6 +743,47 @@ export interface IndividualCustomerFields { nationality?: string; } +/** + * Request body for `POST /internal-accounts/{id}/export`. The `clientPublicKey` is + * required on both steps of the signed-retry flow. On step 1 Grid binds it into + * `payloadToSign` so the subsequent stamp in `Grid-Wallet-Signature` commits to + * the target pubkey; on step 2 the client echoes the same `clientPublicKey` back + * and Grid uses it to encrypt the wallet credentials returned in the `200` + * response. + */ +export interface InternalAccountExportRequest { + /** + * Fresh P-256 public key, uncompressed SEC1 hex — 130 hex chars where the first + * two are `04` (the uncompressed-point indicator). Generate a new keypair for each + * export and discard the private key after decrypting the response. + */ + clientPublicKey: string; +} + +export interface InternalAccountExportResponse { + /** + * The id of the internal account that was exported. + */ + id: string; + + /** + * Encrypted wallet mnemonic, sealed to the `clientPublicKey` from the request body + * using HPKE: DHKEM(P-256, HKDF-SHA256) + HKDF-SHA256 + AES-256-GCM. Decrypt with + * the matching private key, then manage the mnemonic securely because it is the + * master key of the self-custodial Embedded Wallet. The value is a JSON string of + * the form + * `{"version": "v1.0.0", "data": "", "dataSignature": "", "enclaveQuorumPublic": ""}`. + * `data` hex-decodes to JSON + * `{"encappedPublic": "", "ciphertext": "", "organizationId": ""}`, + * where `encappedPublic` is the uncompressed SEC1 ephemeral public key. + * `dataSignature` is an ECDSA-P256-SHA256 signature over the `data` bytes produced + * by the issuer key in `enclaveQuorumPublic`; verify before decrypting. In + * sandbox, `dataSignature` and `enclaveQuorumPublic` are empty strings. Clients + * should bypass attestation verification when calling against sandbox. + */ + encryptedWalletCredentials: string; +} + export interface CustomerGetKYCLinkResponse { /** * The customer id of the newly created customer on the system @@ -798,6 +896,30 @@ export interface CustomerListParams extends DefaultPaginationParams { updatedBefore?: string; } +export interface CustomerExportParams { + /** + * Body param: Fresh P-256 public key, uncompressed SEC1 hex — 130 hex chars where + * the first two are `04` (the uncompressed-point indicator). Generate a new + * keypair for each export and discard the private key after decrypting the + * response. + */ + clientPublicKey: string; + + /** + * Header param: Full API-key stamp built over the prior `payloadToSign` with the + * session API keypair of a verified authentication credential on the target + * internal account. Required on the signed retry; ignored on the initial call. + */ + 'Grid-Wallet-Signature'?: string; + + /** + * Header param: The `requestId` returned in a prior `202` response, echoed back on + * the signed retry so the server can correlate it with the issued challenge. + * Required on the signed retry; must be paired with `Grid-Wallet-Signature`. + */ + 'Request-Id'?: string; +} + export interface CustomerGetKYCLinkParams { /** * The platform id of the customer to onboard @@ -848,11 +970,14 @@ export declare namespace Customers { type CustomerType as CustomerType, type CustomerUpdate as CustomerUpdate, type IndividualCustomerFields as IndividualCustomerFields, + type InternalAccountExportRequest as InternalAccountExportRequest, + type InternalAccountExportResponse as InternalAccountExportResponse, type CustomerGetKYCLinkResponse as CustomerGetKYCLinkResponse, type CustomerOneovesDefaultPagination as CustomerOneovesDefaultPagination, type CustomerCreateParams as CustomerCreateParams, type CustomerUpdateParams as CustomerUpdateParams, type CustomerListParams as CustomerListParams, + type CustomerExportParams as CustomerExportParams, type CustomerGetKYCLinkParams as CustomerGetKYCLinkParams, type CustomerListInternalAccountsParams as CustomerListInternalAccountsParams, }; diff --git a/src/resources/customers/index.ts b/src/resources/customers/index.ts index cceb9a7..be240a0 100644 --- a/src/resources/customers/index.ts +++ b/src/resources/customers/index.ts @@ -16,10 +16,13 @@ export { type CustomerType, type CustomerUpdate, type IndividualCustomerFields, + type InternalAccountExportRequest, + type InternalAccountExportResponse, type CustomerGetKYCLinkResponse, type CustomerCreateParams, type CustomerUpdateParams, type CustomerListParams, + type CustomerExportParams, type CustomerGetKYCLinkParams, type CustomerListInternalAccountsParams, type CustomerOneovesDefaultPagination, diff --git a/src/resources/index.ts b/src/resources/index.ts index 55f79f8..d97f8d5 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -3,21 +3,26 @@ export * from './shared'; export { Agents, - type AgentPolicy, - type AgentUsage, + type Agent, + type AgentAction, + type AgentActionListResponse, + type AgentActionRejectRequest, + type AgentCreateRequest, type AgentCreateResponse, - type AgentRetrieveResponse, - type AgentUpdateResponse, + type AgentDeviceCode, + type AgentDeviceCodeRedeemResponse, + type AgentDeviceCodeStatusResponse, type AgentListResponse, - type AgentListApprovalsResponse, - type AgentUpdatePolicyResponse, + type AgentPolicy, + type AgentUpdateRequest, + type AgentUsage, type AgentCreateParams, type AgentUpdateParams, type AgentListParams, type AgentListApprovalsParams, type AgentUpdatePolicyParams, - type AgentListResponsesDefaultPagination, - type AgentListApprovalsResponsesDefaultPagination, + type AgentActionsDefaultPagination, + type AgentsDefaultPagination, } from './agents/agents'; export { Auth } from './auth/auth'; export { @@ -54,10 +59,13 @@ export { type CustomerType, type CustomerUpdate, type IndividualCustomerFields, + type InternalAccountExportRequest, + type InternalAccountExportResponse, type CustomerGetKYCLinkResponse, type CustomerCreateParams, type CustomerUpdateParams, type CustomerListParams, + type CustomerExportParams, type CustomerGetKYCLinkParams, type CustomerListInternalAccountsParams, type CustomerOneovesDefaultPagination, @@ -75,11 +83,6 @@ export { type DocumentListResponsesDefaultPagination, } from './documents'; export { ExchangeRates, type ExchangeRateListResponse, type ExchangeRateListParams } from './exchange-rates'; -export { - InternalAccounts, - type InternalAccountExportResponse, - type InternalAccountExportParams, -} from './internal-accounts'; export { Invitations, type CurrencyAmount, diff --git a/src/resources/internal-accounts.ts b/src/resources/internal-accounts.ts deleted file mode 100644 index 8d429a3..0000000 --- a/src/resources/internal-accounts.ts +++ /dev/null @@ -1,125 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { APIResource } from '../core/resource'; -import { APIPromise } from '../core/api-promise'; -import { buildHeaders } from '../internal/headers'; -import { RequestOptions } from '../internal/request-options'; -import { path } from '../internal/utils/path'; - -/** - * Internal account management endpoints for creating and managing internal accounts - */ -export class InternalAccounts extends APIResource { - /** - * Export the wallet credentials of an Embedded Wallet internal account. The - * returned wallet credentials are HPKE-encrypted to the `clientPublicKey` supplied - * in the request body. - * - * Export is a two-step signed-retry flow (same pattern as add-additional - * credential, revoke credential, and revoke session): - * - * 1. Call `POST /internal-accounts/{id}/export` with the request body - * `{ "clientPublicKey": "..." }` and no signature headers. Grid binds the - * `clientPublicKey` into the `payloadToSign` it returns, so the subsequent - * stamp in `Grid-Wallet-Signature` commits to the target encryption key. The - * response is `202` with `payloadToSign`, `requestId`, and `expiresAt`. - * - * 2. Use the session API keypair of a verified authentication credential on the - * same internal account to build an API-key stamp over `payloadToSign`, then - * retry with that full stamp as the `Grid-Wallet-Signature` header and the - * `requestId` echoed back as the `Request-Id` header. The retry body must carry - * the **same** `clientPublicKey` submitted in step 1 — Grid rejects the retry - * with `401` if it disagrees with what was bound into `payloadToSign`. The - * signed retry returns `200` with `encryptedWalletCredentials`, which the - * client decrypts with the matching private key. - * - * The `clientPublicKey` is ephemeral: generate a fresh P-256 keypair for this - * export and discard the private key after decrypting. Do not reuse the keypair - * from any prior verify call — that private key was already discarded after - * decrypting the session signing key it was issued against. - * - * @example - * ```ts - * const response = await client.internalAccounts.export( - * 'id', - * { - * clientPublicKey: - * '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', - * }, - * ); - * ``` - */ - export( - id: string, - params: InternalAccountExportParams, - options?: RequestOptions, - ): APIPromise { - const { 'Grid-Wallet-Signature': gridWalletSignature, 'Request-Id': requestID, ...body } = params; - return this._client.post(path`/internal-accounts/${id}/export`, { - body, - ...options, - headers: buildHeaders([ - { - ...(gridWalletSignature != null ? { 'Grid-Wallet-Signature': gridWalletSignature } : undefined), - ...(requestID != null ? { 'Request-Id': requestID } : undefined), - }, - options?.headers, - ]), - }); - } -} - -export interface InternalAccountExportResponse { - /** - * The id of the internal account that was exported. - */ - id: string; - - /** - * Encrypted wallet mnemonic, sealed to the `clientPublicKey` from the request body - * using HPKE: DHKEM(P-256, HKDF-SHA256) + HKDF-SHA256 + AES-256-GCM. Decrypt with - * the matching private key, then manage the mnemonic securely because it is the - * master key of the self-custodial Embedded Wallet. The value is a JSON string of - * the form - * `{"version": "v1.0.0", "data": "", "dataSignature": "", "enclaveQuorumPublic": ""}`. - * `data` hex-decodes to JSON - * `{"encappedPublic": "", "ciphertext": "", "organizationId": ""}`, - * where `encappedPublic` is the uncompressed SEC1 ephemeral public key. - * `dataSignature` is an ECDSA-P256-SHA256 signature over the `data` bytes produced - * by the issuer key in `enclaveQuorumPublic`; verify before decrypting. In - * sandbox, `dataSignature` and `enclaveQuorumPublic` are empty strings. Clients - * should bypass attestation verification when calling against sandbox. - */ - encryptedWalletCredentials: string; -} - -export interface InternalAccountExportParams { - /** - * Body param: Fresh P-256 public key, uncompressed SEC1 hex — 130 hex chars where - * the first two are `04` (the uncompressed-point indicator). Generate a new - * keypair for each export and discard the private key after decrypting the - * response. - */ - clientPublicKey: string; - - /** - * Header param: Full API-key stamp built over the prior `payloadToSign` with the - * session API keypair of a verified authentication credential on the target - * internal account. Required on the signed retry; ignored on the initial call. - */ - 'Grid-Wallet-Signature'?: string; - - /** - * Header param: The `requestId` returned in a prior `202` response, echoed back on - * the signed retry so the server can correlate it with the issued challenge. - * Required on the signed retry; must be paired with `Grid-Wallet-Signature`. - */ - 'Request-Id'?: string; -} - -export declare namespace InternalAccounts { - export { - type InternalAccountExportResponse as InternalAccountExportResponse, - type InternalAccountExportParams as InternalAccountExportParams, - }; -} diff --git a/src/resources/platform/external-accounts.ts b/src/resources/platform/external-accounts.ts index 314b62d..c34fb42 100644 --- a/src/resources/platform/external-accounts.ts +++ b/src/resources/platform/external-accounts.ts @@ -3,7 +3,9 @@ import { APIResource } from '../../core/resource'; import * as Shared from '../shared'; import * as ExternalAccountsAPI from '../customers/external-accounts'; +import { ExternalAccountsDefaultPagination } from '../customers/external-accounts'; import { APIPromise } from '../../core/api-promise'; +import { DefaultPagination, type DefaultPaginationParams, PagePromise } from '../../core/pagination'; import { buildHeaders } from '../../internal/headers'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; @@ -75,15 +77,21 @@ export class ExternalAccounts extends APIResource { * * @example * ```ts - * const externalAccounts = - * await client.platform.externalAccounts.list(); + * // Automatically fetches more pages as needed. + * for await (const externalAccount of client.platform.externalAccounts.list()) { + * // ... + * } * ``` */ list( query: ExternalAccountListParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { - return this._client.get('/platform/external-accounts', { query, ...options }); + ): PagePromise { + return this._client.getAPIList( + '/platform/external-accounts', + DefaultPagination, + { query, ...options }, + ); } /** @@ -744,28 +752,6 @@ export interface ZmwAccountInfo { provider: string; } -export interface ExternalAccountListResponse { - /** - * List of external accounts matching the filter criteria - */ - data: Array; - - /** - * Indicates if more results are available beyond this page - */ - hasMore: boolean; - - /** - * Cursor to retrieve the next page of results (only present if hasMore is true) - */ - nextCursor?: string; - - /** - * Total number of external accounts matching the criteria (excluding pagination) - */ - totalCount?: number; -} - export interface ExternalAccountCreateParams { /** * Lightning payment destination. Exactly one of `invoice`, `bolt12`, or @@ -827,17 +813,12 @@ export interface ExternalAccountCreateParams { platformAccountId?: string; } -export interface ExternalAccountListParams { +export interface ExternalAccountListParams extends DefaultPaginationParams { /** * Filter by currency code */ currency?: string; - /** - * Cursor for pagination (returned from previous request) - */ - cursor?: string; - /** * Maximum number of results to return (default 20, max 100) */ @@ -881,8 +862,9 @@ export declare namespace ExternalAccounts { type XofAccountInfo as XofAccountInfo, type ZarAccountInfo as ZarAccountInfo, type ZmwAccountInfo as ZmwAccountInfo, - type ExternalAccountListResponse as ExternalAccountListResponse, type ExternalAccountCreateParams as ExternalAccountCreateParams, type ExternalAccountListParams as ExternalAccountListParams, }; } + +export { type ExternalAccountsDefaultPagination }; diff --git a/src/resources/platform/index.ts b/src/resources/platform/index.ts index f9d5a1a..9dc05a7 100644 --- a/src/resources/platform/index.ts +++ b/src/resources/platform/index.ts @@ -37,7 +37,6 @@ export { type XofAccountInfo, type ZarAccountInfo, type ZmwAccountInfo, - type ExternalAccountListResponse, type ExternalAccountCreateParams, type ExternalAccountListParams, } from './external-accounts'; diff --git a/src/resources/platform/platform.ts b/src/resources/platform/platform.ts index 9a5864e..5a5ea6b 100644 --- a/src/resources/platform/platform.ts +++ b/src/resources/platform/platform.ts @@ -14,7 +14,6 @@ import { EurAccountInfo, ExternalAccountCreateParams, ExternalAccountListParams, - ExternalAccountListResponse, ExternalAccounts, GbpAccountInfo, GhsAccountInfo, @@ -143,7 +142,6 @@ export declare namespace Platform { type XofAccountInfo as XofAccountInfo, type ZarAccountInfo as ZarAccountInfo, type ZmwAccountInfo as ZmwAccountInfo, - type ExternalAccountListResponse as ExternalAccountListResponse, type ExternalAccountCreateParams as ExternalAccountCreateParams, type ExternalAccountListParams as ExternalAccountListParams, }; diff --git a/src/resources/webhooks.ts b/src/resources/webhooks.ts index e37d394..1fbe436 100644 --- a/src/resources/webhooks.ts +++ b/src/resources/webhooks.ts @@ -2,11 +2,10 @@ import { APIResource } from '../core/resource'; import * as InvitationsAPI from './invitations'; -import * as QuotesAPI from './quotes'; import * as ReceiverAPI from './receiver'; import * as Shared from './shared'; import * as TransactionsAPI from './transactions'; -import * as TransferInAPI from './transfer-in'; +import * as AgentsAPI from './agents/agents'; import * as CustomersAPI from './customers/customers'; import * as InternalAccountsAPI from './sandbox/internal-accounts'; @@ -28,7 +27,7 @@ export interface AgentActionWebhookEvent { * represented as AgentActions, giving the platform a consistent object to approve, * reject, and audit regardless of the underlying operation type. */ - data: AgentActionWebhookEvent.Data; + data: AgentsAPI.AgentAction; /** * ISO 8601 timestamp of when the webhook was sent @@ -67,94 +66,6 @@ export interface AgentActionWebhookEvent { | 'TEST'; } -export namespace AgentActionWebhookEvent { - /** - * An action submitted by an agent that may require platform approval before - * execution. All agent-initiated operations (quote execution, transfers) are - * represented as AgentActions, giving the platform a consistent object to approve, - * reject, and audit regardless of the underlying operation type. - */ - export interface Data { - /** - * System-generated unique identifier for this action. - */ - id: string; - - /** - * The agent that submitted this action. - */ - agentId: string; - - /** - * When the action was submitted by the agent. - */ - createdAt: string; - - /** - * The customer on whose behalf the action was submitted. - */ - customerId: string; - - /** - * Platform-specific ID of the customer. - */ - platformCustomerId: string; - - /** - * Status of an agent action. - * - * | Status | Description | - * | ------------------ | ---------------------------------------------------------------------- | - * | `PENDING_APPROVAL` | Submitted by the agent, awaiting platform approval before execution | - * | `APPROVED` | Approved by the platform; execution is in progress or completed | - * | `REJECTED` | Rejected by the platform; the underlying transaction was not executed | - * | `FAILED` | Approved but execution failed (e.g. quote expired, insufficient funds) | - */ - status: 'PENDING_APPROVAL' | 'APPROVED' | 'REJECTED' | 'FAILED'; - - /** - * The type of action the agent is requesting. - * - * | Type | Description | - * | --------------- | -------------------------------------------------------- | - * | `EXECUTE_QUOTE` | Execute a cross-currency quote | - * | `TRANSFER_OUT` | Transfer from an internal account to an external account | - * | `TRANSFER_IN` | Transfer from an external account to an internal account | - */ - type: 'EXECUTE_QUOTE' | 'TRANSFER_OUT' | 'TRANSFER_IN'; - - /** - * When the action was last updated. - */ - updatedAt: string; - - /** - * The quote being executed. Populated for `EXECUTE_QUOTE` actions; absent for - * transfer actions. Contains the full amount, currency, destination, and rate - * details needed to present an approval decision to the user. - */ - quote?: QuotesAPI.Quote; - - /** - * Human-readable reason provided by the platform when rejecting the action. Only - * present when status is `REJECTED`. - */ - rejectionReason?: string; - - /** - * The resulting transaction, populated once the action has been approved and - * execution has begun. Absent while the action is `PENDING_APPROVAL` or - * `REJECTED`. - */ - transaction?: TransferInAPI.Transaction; - - /** - * Details of a transfer-type agent action (TRANSFER_OUT or TRANSFER_IN). - */ - transferDetails?: Shared.AgentTransferDetails; - } -} - export interface IncomingPaymentWebhookEvent { /** * Unique identifier for this webhook delivery (can be used for idempotency) diff --git a/tests/api-resources/auth/credentials.test.ts b/tests/api-resources/auth/credentials.test.ts index d25d578..4819425 100644 --- a/tests/api-resources/auth/credentials.test.ts +++ b/tests/api-resources/auth/credentials.test.ts @@ -57,8 +57,8 @@ describe('resource credentials', () => { }); // Mock server tests are disabled - test.skip('resendChallenge', async () => { - const responsePromise = client.auth.credentials.resendChallenge('id'); + test.skip('delete', async () => { + const responsePromise = client.auth.credentials.delete('id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -69,14 +69,15 @@ describe('resource credentials', () => { }); // Mock server tests are disabled - test.skip('resendChallenge: request options and params are passed correctly', async () => { + test.skip('delete: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.auth.credentials.resendChallenge( + client.auth.credentials.delete( 'id', { - clientPublicKey: - '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + 'Grid-Wallet-Signature': + 'eyJwdWJsaWNLZXkiOiIwMmExYjIuLi4iLCJzaWduYXR1cmUiOiIzMDQ1MDIyMTAwLi4uIiwic2NoZW1lIjoiUDI1Nl9FQ0RTQV9TSEEyNTYifQ', + 'Request-Id': '7c4a8d09-ca37-4e3e-9e0d-8c2b3e9a1f21', }, { path: '/_stainless_unknown_path' }, ), @@ -84,8 +85,8 @@ describe('resource credentials', () => { }); // Mock server tests are disabled - test.skip('revoke', async () => { - const responsePromise = client.auth.credentials.revoke('id'); + test.skip('challenge', async () => { + const responsePromise = client.auth.credentials.challenge('id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -96,15 +97,14 @@ describe('resource credentials', () => { }); // Mock server tests are disabled - test.skip('revoke: request options and params are passed correctly', async () => { + test.skip('challenge: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.auth.credentials.revoke( + client.auth.credentials.challenge( 'id', { - 'Grid-Wallet-Signature': - 'eyJwdWJsaWNLZXkiOiIwMmExYjIuLi4iLCJzaWduYXR1cmUiOiIzMDQ1MDIyMTAwLi4uIiwic2NoZW1lIjoiUDI1Nl9FQ0RTQV9TSEEyNTYifQ', - 'Request-Id': '7c4a8d09-ca37-4e3e-9e0d-8c2b3e9a1f21', + clientPublicKey: + '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', }, { path: '/_stainless_unknown_path' }, ), diff --git a/tests/api-resources/auth/sessions.test.ts b/tests/api-resources/auth/sessions.test.ts index 8268156..c126705 100644 --- a/tests/api-resources/auth/sessions.test.ts +++ b/tests/api-resources/auth/sessions.test.ts @@ -27,8 +27,8 @@ describe('resource sessions', () => { }); // Mock server tests are disabled - test.skip('revoke', async () => { - const responsePromise = client.auth.sessions.revoke('id'); + test.skip('delete', async () => { + const responsePromise = client.auth.sessions.delete('id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -39,10 +39,10 @@ describe('resource sessions', () => { }); // Mock server tests are disabled - test.skip('revoke: request options and params are passed correctly', async () => { + test.skip('delete: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.auth.sessions.revoke( + client.auth.sessions.delete( 'id', { 'Grid-Wallet-Signature': diff --git a/tests/api-resources/customers/customers.test.ts b/tests/api-resources/customers/customers.test.ts index 07cc15d..672c95b 100644 --- a/tests/api-resources/customers/customers.test.ts +++ b/tests/api-resources/customers/customers.test.ts @@ -147,6 +147,32 @@ describe('resource customers', () => { expect(dataAndResponse.response).toBe(rawResponse); }); + // Mock server tests are disabled + test.skip('export: only required params', async () => { + const responsePromise = client.customers.export('id', { + clientPublicKey: + '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('export: required and optional params', async () => { + const response = await client.customers.export('id', { + clientPublicKey: + '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', + 'Grid-Wallet-Signature': + 'eyJwdWJsaWNLZXkiOiIwMmExYjIuLi4iLCJzaWduYXR1cmUiOiIzMDQ1MDIyMTAwLi4uIiwic2NoZW1lIjoiUDI1Nl9FQ0RTQV9TSEEyNTYifQ', + 'Request-Id': '7c4a8d09-ca37-4e3e-9e0d-8c2b3e9a1f21', + }); + }); + // Mock server tests are disabled test.skip('getKYCLink: only required params', async () => { const responsePromise = client.customers.getKYCLink({ platformCustomerId: 'platformCustomerId' }); diff --git a/tests/api-resources/internal-accounts.test.ts b/tests/api-resources/internal-accounts.test.ts deleted file mode 100644 index 0e2d718..0000000 --- a/tests/api-resources/internal-accounts.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import LightsparkGrid from '@lightsparkdev/grid'; - -const client = new LightsparkGrid({ - username: 'My Username', - password: 'My Password', - baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', -}); - -describe('resource internalAccounts', () => { - // Mock server tests are disabled - test.skip('export: only required params', async () => { - const responsePromise = client.internalAccounts.export('id', { - clientPublicKey: - '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', - }); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // Mock server tests are disabled - test.skip('export: required and optional params', async () => { - const response = await client.internalAccounts.export('id', { - clientPublicKey: - '04f45f2a22c908b9ce09a7150e514afd24627c401c38a4afc164e1ea783adaaa31d4245acfb88c2ebd42b47628d63ecabf345484f0a9f665b63c54c897d5578be2', - 'Grid-Wallet-Signature': - 'eyJwdWJsaWNLZXkiOiIwMmExYjIuLi4iLCJzaWduYXR1cmUiOiIzMDQ1MDIyMTAwLi4uIiwic2NoZW1lIjoiUDI1Nl9FQ0RTQV9TSEEyNTYifQ', - 'Request-Id': '7c4a8d09-ca37-4e3e-9e0d-8c2b3e9a1f21', - }); - }); -}); From 6bd7355fc324659f22a1001e91c83feb1e67521c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 00:59:01 +0000 Subject: [PATCH 25/26] docs(api): remove OTHER from documentType enum documentation in documents --- .stats.yml | 4 +-- packages/mcp-server/src/local-docs-search.ts | 4 +-- src/resources/documents.ts | 36 ++++++++++---------- src/resources/shared.ts | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0881325..cad607b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 94 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-4fda2dd2f952bfa73c144904c9d3d4ddc81080335ebd7fdffc6bad2ec3945c6f.yml -openapi_spec_hash: f65171ea46d9783aaacc520c498bce59 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lightspark/grid-bff283ab85d8d2be3f841a97363b5cc9cb3ceb7330a7dedf3ce10563441f4760.yml +openapi_spec_hash: 1f4d99d8f42550d737ef7a6e87342631 config_hash: 2517fff6fa90dcb6123dd494c7f840b8 diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index 2d9242e..569e2f5 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -2011,7 +2011,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }", markdown: - "## upload\n\n`client.documents.upload(country: string, documentHolder: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**post** `/documents`\n\nUpload a verification document for a customer or beneficial owner. The request must use multipart/form-data with the file in the `file` field and metadata in the remaining fields.\n\nSupported file types: PDF, JPEG, PNG. Maximum file size: 10 MB.\n\n\n### Parameters\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentHolder: string`\n ID of the entity that owns this document. Can be a Customer ID or a BeneficialOwner ID.\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, OTHER\n**Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.upload({\n country: 'US',\n documentHolder: 'BeneficialOwner:019542f5-b3e7-1d02-0000-000000000001',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", + "## upload\n\n`client.documents.upload(country: string, documentHolder: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**post** `/documents`\n\nUpload a verification document for a customer or beneficial owner. The request must use multipart/form-data with the file in the `file` field and metadata in the remaining fields.\n\nSupported file types: PDF, JPEG, PNG. Maximum file size: 10 MB.\n\n\n### Parameters\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentHolder: string`\n ID of the entity that owns this document. Can be a Customer ID or a BeneficialOwner ID.\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT\n**Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.upload({\n country: 'US',\n documentHolder: 'BeneficialOwner:019542f5-b3e7-1d02-0000-000000000001',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.documents.upload', @@ -2124,7 +2124,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ response: "{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }", markdown: - "## replace\n\n`client.documents.replace(documentId: string, country: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**put** `/documents/{documentId}`\n\nReplace an existing document with a new file and/or updated metadata. This is useful when a document was rejected and needs to be re-uploaded. The request must use multipart/form-data.\n\n\n### Parameters\n\n- `documentId: string`\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, OTHER\n**Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.replace('documentId', {\n country: 'US',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", + "## replace\n\n`client.documents.replace(documentId: string, country: string, documentType: string, file: string, documentNumber?: string, side?: 'FRONT' | 'BACK'): { id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n**put** `/documents/{documentId}`\n\nReplace an existing document with a new file and/or updated metadata. This is useful when a document was rejected and needs to be re-uploaded. The request must use multipart/form-data.\n\n\n### Parameters\n\n- `documentId: string`\n\n- `country: string`\n Country that issued the document (ISO 3166-1 alpha-2)\n\n- `documentType: string`\n Type of identity or business verification document. Document types are grouped by verification category:\n**Identity** — PASSPORT, DRIVERS_LICENSE, NATIONAL_ID\n**Business — Legal presence** — CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT\n**Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT\n**Business — Ownership structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT\n**Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN\n\n- `file: string`\n The document file (PDF, JPEG, or PNG, max 10 MB)\n\n- `documentNumber?: string`\n Document identification number (e.g., passport number)\n\n- `side?: 'FRONT' | 'BACK'`\n Which side of the document (for two-sided documents like driver's licenses)\n\n### Returns\n\n- `{ id: string; country: string; createdAt: string; documentHolder: string; documentType: string; fileName: string; documentNumber?: string; side?: 'FRONT' | 'BACK'; updatedAt?: string; }`\n\n - `id: string`\n - `country: string`\n - `createdAt: string`\n - `documentHolder: string`\n - `documentType: string`\n - `fileName: string`\n - `documentNumber?: string`\n - `side?: 'FRONT' | 'BACK'`\n - `updatedAt?: string`\n\n### Example\n\n```typescript\nimport LightsparkGrid from '@lightsparkdev/grid';\n\nconst client = new LightsparkGrid();\n\nconst response = await client.documents.replace('documentId', {\n country: 'US',\n documentType: 'PASSPORT',\n file: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response);\n```", perLanguage: { typescript: { method: 'client.documents.replace', diff --git a/src/resources/documents.ts b/src/resources/documents.ts index cd3a65c..d865a55 100644 --- a/src/resources/documents.ts +++ b/src/resources/documents.ts @@ -146,9 +146,9 @@ export interface DocumentRetrieveResponse { * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership - * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, - * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, - * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT + * **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, + * BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -229,9 +229,9 @@ export interface DocumentListResponse { * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership - * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, - * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, - * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT + * **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, + * BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -312,9 +312,9 @@ export interface DocumentReplaceResponse { * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership - * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, - * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, - * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT + * **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, + * BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -395,9 +395,9 @@ export interface DocumentUploadResponse { * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership - * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, - * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, - * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT + * **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, + * BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -474,9 +474,9 @@ export interface DocumentReplaceParams { * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership - * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, - * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, - * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT + * **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, + * BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' @@ -541,9 +541,9 @@ export interface DocumentUploadParams { * ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT * **Business — Control structure** — DIRECTOR_REGISTRY, TRUST_AGREEMENT, * STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT **Business — Ownership - * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, - * OTHER **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, - * ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN + * structure** — SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT + * **Proof of address** — UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, + * BANK_STATEMENT, TAX_RETURN */ documentType: | 'PASSPORT' diff --git a/src/resources/shared.ts b/src/resources/shared.ts index 519a796..6e65a54 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -1317,7 +1317,7 @@ export interface VerificationError { * | ------------------------------------ | -------------------------------------------------------------------------------------------------------- | * | MISSING_LEGAL_PRESENCE_DOCUMENT | CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT | * | MISSING_CONTROL_STRUCTURE_DOCUMENT | DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT | - * | MISSING_OWNERSHIP_STRUCTURE_DOCUMENT | SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT, OTHER | + * | MISSING_OWNERSHIP_STRUCTURE_DOCUMENT | SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT | * | MISSING_PROOF_OF_ADDRESS_DOCUMENT | UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN | * | MISSING_IDENTITY_DOCUMENT | PASSPORT, DRIVERS_LICENSE, NATIONAL_ID | */ From ee1bd4318ae10ba0ee874cea09be94262ae27018 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 00:59:37 +0000 Subject: [PATCH 26/26] release: 1.8.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 40 +++++++++++++++++++++++++++++++ jsr.json | 2 +- package.json | 2 +- packages/mcp-server/manifest.json | 2 +- packages/mcp-server/package.json | 2 +- packages/mcp-server/src/server.ts | 2 +- src/version.ts | 2 +- 8 files changed, 47 insertions(+), 7 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index d0972da..099626f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.7.1" + ".": "1.8.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e23a4c..3b837a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,45 @@ # Changelog +## 1.8.0 (2026-05-07) + +Full Changelog: [v1.7.1...v1.8.0](https://github.com/lightsparkdev/grid-js-sdk/compare/v1.7.1...v1.8.0) + +### Features + +* **api:** add agents resource, device codes, me namespace, agentId to transactions ([4e14ef7](https://github.com/lightsparkdev/grid-js-sdk/commit/4e14ef7e1df416ac9180ae56d64008e6af86d59d)) +* **api:** add document type enum values to documents resource ([be789de](https://github.com/lightsparkdev/grid-js-sdk/commit/be789de7b9b7b0349d9405ce3fb4241a4e0704dc)) +* **api:** add pagination to platform.externalAccounts.list ([9bf7e0e](https://github.com/lightsparkdev/grid-js-sdk/commit/9bf7e0eaf009aa3ac5e3eb2872190020a332a46e)) +* **api:** manual updates ([75b2ad9](https://github.com/lightsparkdev/grid-js-sdk/commit/75b2ad9ec64aa6496c6f2e158a371c67339d0ddf)) +* **api:** manual updates ([b9a0cad](https://github.com/lightsparkdev/grid-js-sdk/commit/b9a0cad025b82396a7a8286f09d36e0cee3c6bf9)) +* **api:** manual updates ([3793af3](https://github.com/lightsparkdev/grid-js-sdk/commit/3793af3229ccc1dc3750849c46563a379048a14a)) +* Update cryptoNetwork values ([6908f84](https://github.com/lightsparkdev/grid-js-sdk/commit/6908f84f91dafb07202d0f29a9bac290aed89924)) + + +### Bug Fixes + +* **api:** remove cryptoNetwork field from external accounts ([64072cd](https://github.com/lightsparkdev/grid-js-sdk/commit/64072cdf999803c37e1c1061e2b8bcd888fb5a93)) +* **types:** make clientPublicKey required in EmailOtpCredentialVerifyRequest ([a15ca2e](https://github.com/lightsparkdev/grid-js-sdk/commit/a15ca2e64a42a7e8271e61a9fdab81a196b444ae)) +* **types:** make countryOfResidence optional, phoneNumber required in beneficiary types ([2fb820d](https://github.com/lightsparkdev/grid-js-sdk/commit/2fb820dba2d0b849fd47149d878a035e3f995153)) +* **types:** make fields optional in BDT/GHS/PKR account types ([75b1675](https://github.com/lightsparkdev/grid-js-sdk/commit/75b1675f61d88b0657e36f8b4e3fe569dd0b1eda)) +* **types:** update BDT/GHS/GTQ/HTG/JMD/PKR account and beneficiary types ([f21102a](https://github.com/lightsparkdev/grid-js-sdk/commit/f21102a8d02c768d927a02b67b82657cf9d27674)) + + +### Chores + +* avoid formatting file that gets changed during releases ([76ae105](https://github.com/lightsparkdev/grid-js-sdk/commit/76ae105e8416d30d5c19b8515552e52620bd04f2)) +* **format:** run eslint and prettier separately ([7f042f3](https://github.com/lightsparkdev/grid-js-sdk/commit/7f042f33f721a05e26f66da079892dc6b33994f3)) +* **internal:** codegen related update ([e3444b4](https://github.com/lightsparkdev/grid-js-sdk/commit/e3444b43c1a0f8b04bc6a39b864ebac19012bc8a)) + + +### Documentation + +* **api:** clarify nickname validation in auth credentials ([1eedd88](https://github.com/lightsparkdev/grid-js-sdk/commit/1eedd88be81fa1bbf8defcba7479d29afc6d430c)) +* **api:** clarify OAUTH credential challenge behavior in auth.credentials ([21c1a37](https://github.com/lightsparkdev/grid-js-sdk/commit/21c1a37b08adf1791280d1352f3a2bbf1d6708fa)) +* **api:** remove OTHER from documentType enum documentation in documents ([6bd7355](https://github.com/lightsparkdev/grid-js-sdk/commit/6bd7355fc324659f22a1001e91c83feb1e67521c)) +* **api:** update endpoint references in agents.me transfer and quote methods ([8b42438](https://github.com/lightsparkdev/grid-js-sdk/commit/8b4243825baa545d8402b0b9b9a9d4d2e273d488)) +* clarify forwards compat behavior ([e379a52](https://github.com/lightsparkdev/grid-js-sdk/commit/e379a52c805d530c1c1950594548a00ebb04438a)) +* update with proxy auth info ([b3e8864](https://github.com/lightsparkdev/grid-js-sdk/commit/b3e8864a570272cad87b73fd4bd4cb6dbed25b84)) + ## 1.7.1 (2026-04-28) Full Changelog: [v1.7.0...v1.7.1](https://github.com/lightsparkdev/grid-js-sdk/compare/v1.7.0...v1.7.1) diff --git a/jsr.json b/jsr.json index c08bdb0..e356562 100644 --- a/jsr.json +++ b/jsr.json @@ -1,6 +1,6 @@ { "name": "@lightsparkdev/grid", - "version": "1.7.1", + "version": "1.8.0", "exports": "./index.ts", "publish": { "exclude": [ diff --git a/package.json b/package.json index 062b20a..bf30d9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lightsparkdev/grid", - "version": "1.7.1", + "version": "1.8.0", "description": "The official TypeScript library for the Lightspark Grid API", "author": "Lightspark Grid ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index 5b80b92..f783130 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -1,7 +1,7 @@ { "dxt_version": "0.2", "name": "@lightsparkdev/grid-mcp", - "version": "1.7.1", + "version": "1.8.0", "description": "The official MCP Server for the Lightspark Grid API", "author": { "name": "Lightspark Grid", diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index ae18b4f..93403ad 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@lightsparkdev/grid-mcp", - "version": "1.7.1", + "version": "1.8.0", "description": "The official MCP Server for the Lightspark Grid API", "author": "Lightspark Grid ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index a332b7a..6948561 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -28,7 +28,7 @@ export const newMcpServer = async ({ new McpServer( { name: 'lightsparkdev_grid_api', - version: '1.7.1', + version: '1.8.0', }, { instructions: await getInstructions({ stainlessApiKey, customInstructionsPath }), diff --git a/src/version.ts b/src/version.ts index 63fe850..29d3ce7 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '1.7.1'; // x-release-please-version +export const VERSION = '1.8.0'; // x-release-please-version