From 7623f85c394e10f26f44b377a730d33edb9ea4c8 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 31 Aug 2026 23:48:55 +0000
Subject: [PATCH 01/15] docs(mcp): document code execution modes and the local
code runner
Documents where the code tool runs the agent's code, the
--code-execution-mode=local flag, and its Deno prerequisite.
---
packages/mcp-server/README.md | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/packages/mcp-server/README.md b/packages/mcp-server/README.md
index ec896e8d..811a8b87 100644
--- a/packages/mcp-server/README.md
+++ b/packages/mcp-server/README.md
@@ -62,20 +62,33 @@ claude mcp add lithic_mcp_api --header "x-lithic-api-key: My Lithic API Key" --t
## Code Mode
This MCP server is built on the "Code Mode" tool scheme. In this MCP Server,
-your agent will write code against the TypeScript SDK, which will then be executed in an
-isolated sandbox. To accomplish this, the server will expose two tools to your agent:
+your agent will write code against the TypeScript SDK, which will then be executed in a
+sandbox. To accomplish this, the server will expose two tools to your agent:
- The first tool is a docs search tool, which can be used to generically query for
documentation about your API/SDK.
- The second tool is a code tool, where the agent can write code against the TypeScript SDK.
- The code will be executed in a sandbox environment without web or filesystem access. Then,
- anything the code returns or prints will be returned to the agent as the result of the
- tool call.
+ The code is executed in a sandbox whose filesystem and network access are restricted to
+ what the SDK needs — see "Where code runs" below. Then, anything the code returns or
+ prints will be returned to the agent as the result of the tool call.
Using this scheme, agents are capable of performing very complex tasks deterministically
and repeatably.
+### Where code runs
+
+The `--code-execution-mode` flag controls where the code tool runs your agent's code:
+
+- `--code-execution-mode=local` runs each code tool call in a Deno subprocess on the same
+ machine as the MCP server, restricted to reading the server's own files and to making network
+ requests to your API host. Nothing is sent to Stainless. Deno must be installed for this mode
+ to work: install it from https://deno.land, or add it to the MCP server's dependencies with
+ `npm install deno`.
+
+- `--code-execution-mode=stainless-sandbox` sends the code to a Stainless-hosted sandbox to be
+ executed there. This mode is deprecated and is being turned off, so use `local` instead.
+
## Running remotely
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.
From 022c00bec0a58609473ce0a843f526f01382c064 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 1 Sep 2026 12:53:16 +0000
Subject: [PATCH 02/15] feat(api): add OTHER enum value to type field in
auth_rules.v2
---
.stats.yml | 4 +-
packages/mcp-server/src/local-docs-search.ts | 22 +++++-----
src/resources/auth-rules/v2/v2.ts | 42 +++++++++++++++++---
3 files changed, 50 insertions(+), 18 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 47c7d754..9326df23 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 216
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-38a020a15ab14f79c7fea3290822406cf80a9d43d46ab3295632a9723f5e42cd.yml
-openapi_spec_hash: 5a7357a17c5119bc91d8f5e42297fac3
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-9a4064ca9be1efe3e33d922cae77a5d186b6a0119ef1d3601b5ded1447feb7f7.yml
+openapi_spec_hash: bff457821129b2eb4fc5150e23efa197
config_hash: 27fa50e251754c8982e3dc615ef6da41
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index 2a9548a7..2400f6c2 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -963,10 +963,10 @@ const EMBEDDED_METHODS: MethodEntry[] = [
stainlessPath: '(resource) auth_rules.v2 > (method) create',
qualified: 'client.authRules.v2.create',
params: [
- "{ parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; account_tokens?: string[]; business_account_tokens?: string[]; event_stream?: string; name?: string; } | { card_tokens: string[]; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; event_stream?: string; name?: string; } | { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; program_level: boolean; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; event_stream?: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; name?: string; };",
+ "{ parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; type: string; account_tokens?: string[]; business_account_tokens?: string[]; event_stream?: string; name?: string; } | { card_tokens: string[]; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; type: string; event_stream?: string; name?: string; } | { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; program_level: boolean; type: string; event_stream?: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; name?: string; };",
],
response:
- "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
+ "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
perLanguage: {
typescript: {
method: 'client.authRules.v2.create',
@@ -1024,9 +1024,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
'starting_after?: string;',
],
response:
- "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
+ "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
markdown:
- "## list\n\n`client.authRules.v2.list(account_token?: string, business_account_token?: string, card_token?: string, ending_before?: string, event_stream?: string, event_streams?: string[], page_size?: number, scope?: 'PROGRAM' | 'ACCOUNT' | 'BUSINESS_ACCOUNT' | 'CARD' | 'ANY', starting_after?: string): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**get** `/v2/auth_rules`\n\nLists V2 Auth rules\n\n### Parameters\n\n- `account_token?: string`\n Only return Auth Rules that are bound to the provided account token.\n\n- `business_account_token?: string`\n Only return Auth Rules that are bound to the provided business account token.\n\n- `card_token?: string`\n Only return Auth Rules that are bound to the provided card token.\n\n- `ending_before?: string`\n A cursor representing an item's token before which a page of results should end. Used to retrieve the previous page of results before this item.\n\n- `event_stream?: string`\n Deprecated: Use event_streams instead. Only return Auth rules that are executed during the provided event stream.\n\n- `event_streams?: string[]`\n Only return Auth rules that are executed during any of the provided event streams. If event_streams and event_stream are specified, the values will be combined.\n\n- `page_size?: number`\n Page size (for pagination).\n\n- `scope?: 'PROGRAM' | 'ACCOUNT' | 'BUSINESS_ACCOUNT' | 'CARD' | 'ANY'`\n Only return Auth Rules that are bound to the provided scope.\n\n- `starting_after?: string`\n A cursor representing an item's token after which a page of results should begin. Used to retrieve the next page of results after this item.\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\n// Automatically fetches more pages as needed.\nfor await (const authRule of client.authRules.v2.list()) {\n console.log(authRule);\n}\n```",
+ "## list\n\n`client.authRules.v2.list(account_token?: string, business_account_token?: string, card_token?: string, ending_before?: string, event_stream?: string, event_streams?: string[], page_size?: number, scope?: 'PROGRAM' | 'ACCOUNT' | 'BUSINESS_ACCOUNT' | 'CARD' | 'ANY', starting_after?: string): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**get** `/v2/auth_rules`\n\nLists V2 Auth rules\n\n### Parameters\n\n- `account_token?: string`\n Only return Auth Rules that are bound to the provided account token.\n\n- `business_account_token?: string`\n Only return Auth Rules that are bound to the provided business account token.\n\n- `card_token?: string`\n Only return Auth Rules that are bound to the provided card token.\n\n- `ending_before?: string`\n A cursor representing an item's token before which a page of results should end. Used to retrieve the previous page of results before this item.\n\n- `event_stream?: string`\n Deprecated: Use event_streams instead. Only return Auth rules that are executed during the provided event stream.\n\n- `event_streams?: string[]`\n Only return Auth rules that are executed during any of the provided event streams. If event_streams and event_stream are specified, the values will be combined.\n\n- `page_size?: number`\n Page size (for pagination).\n\n- `scope?: 'PROGRAM' | 'ACCOUNT' | 'BUSINESS_ACCOUNT' | 'CARD' | 'ANY'`\n Only return Auth Rules that are bound to the provided scope.\n\n- `starting_after?: string`\n A cursor representing an item's token after which a page of results should begin. Used to retrieve the next page of results after this item.\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: string`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\n// Automatically fetches more pages as needed.\nfor await (const authRule of client.authRules.v2.list()) {\n console.log(authRule);\n}\n```",
perLanguage: {
typescript: {
method: 'client.authRules.v2.list',
@@ -1073,9 +1073,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
qualified: 'client.authRules.v2.retrieve',
params: ['auth_rule_token: string;'],
response:
- "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
+ "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
markdown:
- "## retrieve\n\n`client.authRules.v2.retrieve(auth_rule_token: string): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**get** `/v2/auth_rules/{auth_rule_token}`\n\nFetches a V2 Auth rule by its token\n\n### Parameters\n\n- `auth_rule_token: string`\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst authRule = await client.authRules.v2.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(authRule);\n```",
+ "## retrieve\n\n`client.authRules.v2.retrieve(auth_rule_token: string): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**get** `/v2/auth_rules/{auth_rule_token}`\n\nFetches a V2 Auth rule by its token\n\n### Parameters\n\n- `auth_rule_token: string`\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: string`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst authRule = await client.authRules.v2.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(authRule);\n```",
perLanguage: {
typescript: {
method: 'client.authRules.v2.retrieve',
@@ -1127,7 +1127,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
"body: { account_tokens?: string[]; business_account_tokens?: string[]; name?: string; state?: 'INACTIVE'; } | { card_tokens?: string[]; name?: string; state?: 'INACTIVE'; } | { excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; name?: string; program_level?: boolean; state?: 'INACTIVE'; };",
],
response:
- "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
+ "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
perLanguage: {
typescript: {
method: 'client.authRules.v2.update',
@@ -1227,9 +1227,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
"parameters?: { conditions: { attribute: conditional_attribute; operation: conditional_operation; value: conditional_value; }[]; } | { period: { duration: number; type: 'CUSTOM'; } | { type: 'DAY'; } | { type: 'WEEK'; day_of_week?: number; } | { type: 'MONTH'; day_of_month?: number; } | { type: 'YEAR'; day_of_month?: number; month?: number; }; scope: 'CARD' | 'ACCOUNT'; filters?: { exclude_countries?: string[]; exclude_mccs?: string[]; include_countries?: string[]; include_mccs?: string[]; include_pan_entry_modes?: string[]; }; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { interval?: 'LIFETIME' | '7D' | '30D' | '90D'; scope?: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: { key: string; type: 'TAG'; value: string; } | { queue_token: string; scope: 'CARD' | 'ACCOUNT' | 'PROGRAM'; type: 'CREATE_CASE'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { filters?: spend_velocity_filters; interval?: 'LIFETIME' | '7D' | '30D' | '90D'; period?: velocity_limit_period; scope?: 'CARD' | 'ACCOUNT' | 'GLOBAL'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; } | { action: { key: string; type: 'TAG'; value: string; } | { queue_token: string; scope: 'FINANCIAL_ACCOUNT' | 'PROGRAM'; type: 'CREATE_CASE'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { code: string; features: { type: 'AUTHORIZATION'; name?: string; } | { type: 'AUTHENTICATION'; name?: string; } | { type: 'TOKENIZATION'; name?: string; } | { type: 'ACH_RECEIPT'; name?: string; } | { type: 'CARD_TRANSACTION'; name?: string; } | { type: 'ACH_PAYMENT'; name?: string; } | { type: 'EXTERNAL_BANK_ACCOUNT'; name?: string; } | { type: 'CARD'; name?: string; } | { type: 'ACCOUNT_HOLDER'; name?: string; } | { type: 'IP_METADATA'; name?: string; } | { period: velocity_limit_period; scope: 'CARD' | 'ACCOUNT'; type: 'SPEND_VELOCITY'; filters?: velocity_limit_filters; name?: string; } | { period: velocity_limit_period; scope: 'FINANCIAL_ACCOUNT' | 'GLOBAL'; type: 'PAYMENT_VELOCITY'; filters?: object; name?: string; } | { scope: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; type: 'TRANSACTION_HISTORY_SIGNALS'; name?: string; } | { scope: 'CARD' | 'ACCOUNT'; type: 'CONSECUTIVE_DECLINES'; name?: string; } | { scope: 'FINANCIAL_ACCOUNT'; type: 'ACH_PAYMENT_HISTORY'; name?: string; }[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { interval?: 'LIFETIME' | '7D' | '30D' | '90D'; scope?: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; };",
],
response:
- "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
+ "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
markdown:
- "## draft\n\n`client.authRules.v2.draft(auth_rule_token: string, parameters?: { conditions: auth_rule_condition[]; } | { period: velocity_limit_period; scope: 'CARD' | 'ACCOUNT'; filters?: velocity_limit_filters; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: object[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: object[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: object[]; } | { action: object | object; conditions: object[]; } | { action: object | object; conditions: object[]; } | { action: card_transaction_update_action; conditions: object[]; } | { action: ach_payment_update_action; conditions: object[]; } | { code: string; features: rule_feature[]; } | { action: object; conditions: object[]; }): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**post** `/v2/auth_rules/{auth_rule_token}/draft`\n\nCreates a new draft version of a rule that will be ran in shadow mode.\n\nThis can also be utilized to reset the draft parameters, causing a draft version to no longer be ran in shadow mode.\n\n\n### Parameters\n\n- `auth_rule_token: string`\n\n- `parameters?: { conditions: { attribute: conditional_attribute; operation: conditional_operation; value: conditional_value; }[]; } | { period: { duration: number; type: 'CUSTOM'; } | { type: 'DAY'; } | { type: 'WEEK'; day_of_week?: number; } | { type: 'MONTH'; day_of_month?: number; } | { type: 'YEAR'; day_of_month?: number; month?: number; }; scope: 'CARD' | 'ACCOUNT'; filters?: { exclude_countries?: string[]; exclude_mccs?: string[]; include_countries?: string[]; include_mccs?: string[]; include_pan_entry_modes?: string[]; }; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { interval?: 'LIFETIME' | '7D' | '30D' | '90D'; scope?: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: { key: string; type: 'TAG'; value: string; } | { queue_token: string; scope: 'CARD' | 'ACCOUNT' | 'PROGRAM'; type: 'CREATE_CASE'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { filters?: spend_velocity_filters; interval?: 'LIFETIME' | '7D' | '30D' | '90D'; period?: velocity_limit_period; scope?: 'CARD' | 'ACCOUNT' | 'GLOBAL'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; } | { action: { key: string; type: 'TAG'; value: string; } | { queue_token: string; scope: 'FINANCIAL_ACCOUNT' | 'PROGRAM'; type: 'CREATE_CASE'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { code: string; features: { type: 'AUTHORIZATION'; name?: string; } | { type: 'AUTHENTICATION'; name?: string; } | { type: 'TOKENIZATION'; name?: string; } | { type: 'ACH_RECEIPT'; name?: string; } | { type: 'CARD_TRANSACTION'; name?: string; } | { type: 'ACH_PAYMENT'; name?: string; } | { type: 'EXTERNAL_BANK_ACCOUNT'; name?: string; } | { type: 'CARD'; name?: string; } | { type: 'ACCOUNT_HOLDER'; name?: string; } | { type: 'IP_METADATA'; name?: string; } | { period: velocity_limit_period; scope: 'CARD' | 'ACCOUNT'; type: 'SPEND_VELOCITY'; filters?: velocity_limit_filters; name?: string; } | { period: velocity_limit_period; scope: 'FINANCIAL_ACCOUNT' | 'GLOBAL'; type: 'PAYMENT_VELOCITY'; filters?: object; name?: string; } | { scope: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; type: 'TRANSACTION_HISTORY_SIGNALS'; name?: string; } | { scope: 'CARD' | 'ACCOUNT'; type: 'CONSECUTIVE_DECLINES'; name?: string; } | { scope: 'FINANCIAL_ACCOUNT'; type: 'ACH_PAYMENT_HISTORY'; name?: string; }[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { interval?: 'LIFETIME' | '7D' | '30D' | '90D'; scope?: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; }`\n Parameters for the Auth Rule\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst authRule = await client.authRules.v2.draft('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(authRule);\n```",
+ "## draft\n\n`client.authRules.v2.draft(auth_rule_token: string, parameters?: { conditions: auth_rule_condition[]; } | { period: velocity_limit_period; scope: 'CARD' | 'ACCOUNT'; filters?: velocity_limit_filters; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: object[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: object[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: object[]; } | { action: object | object; conditions: object[]; } | { action: object | object; conditions: object[]; } | { action: card_transaction_update_action; conditions: object[]; } | { action: ach_payment_update_action; conditions: object[]; } | { code: string; features: rule_feature[]; } | { action: object; conditions: object[]; }): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**post** `/v2/auth_rules/{auth_rule_token}/draft`\n\nCreates a new draft version of a rule that will be ran in shadow mode.\n\nThis can also be utilized to reset the draft parameters, causing a draft version to no longer be ran in shadow mode.\n\n\n### Parameters\n\n- `auth_rule_token: string`\n\n- `parameters?: { conditions: { attribute: conditional_attribute; operation: conditional_operation; value: conditional_value; }[]; } | { period: { duration: number; type: 'CUSTOM'; } | { type: 'DAY'; } | { type: 'WEEK'; day_of_week?: number; } | { type: 'MONTH'; day_of_month?: number; } | { type: 'YEAR'; day_of_month?: number; month?: number; }; scope: 'CARD' | 'ACCOUNT'; filters?: { exclude_countries?: string[]; exclude_mccs?: string[]; include_countries?: string[]; include_mccs?: string[]; include_pan_entry_modes?: string[]; }; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { interval?: 'LIFETIME' | '7D' | '30D' | '90D'; scope?: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { action: { key: string; type: 'TAG'; value: string; } | { queue_token: string; scope: 'CARD' | 'ACCOUNT' | 'PROGRAM'; type: 'CREATE_CASE'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { filters?: spend_velocity_filters; interval?: 'LIFETIME' | '7D' | '30D' | '90D'; period?: velocity_limit_period; scope?: 'CARD' | 'ACCOUNT' | 'GLOBAL'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; } | { action: { key: string; type: 'TAG'; value: string; } | { queue_token: string; scope: 'FINANCIAL_ACCOUNT' | 'PROGRAM'; type: 'CREATE_CASE'; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; }[]; } | { code: string; features: { type: 'AUTHORIZATION'; name?: string; } | { type: 'AUTHENTICATION'; name?: string; } | { type: 'TOKENIZATION'; name?: string; } | { type: 'ACH_RECEIPT'; name?: string; } | { type: 'CARD_TRANSACTION'; name?: string; } | { type: 'ACH_PAYMENT'; name?: string; } | { type: 'EXTERNAL_BANK_ACCOUNT'; name?: string; } | { type: 'CARD'; name?: string; } | { type: 'ACCOUNT_HOLDER'; name?: string; } | { type: 'IP_METADATA'; name?: string; } | { period: velocity_limit_period; scope: 'CARD' | 'ACCOUNT'; type: 'SPEND_VELOCITY'; filters?: velocity_limit_filters; name?: string; } | { period: velocity_limit_period; scope: 'FINANCIAL_ACCOUNT' | 'GLOBAL'; type: 'PAYMENT_VELOCITY'; filters?: object; name?: string; } | { scope: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; type: 'TRANSACTION_HISTORY_SIGNALS'; name?: string; } | { scope: 'CARD' | 'ACCOUNT'; type: 'CONSECUTIVE_DECLINES'; name?: string; } | { scope: 'FINANCIAL_ACCOUNT'; type: 'ACH_PAYMENT_HISTORY'; name?: string; }[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: string; value: string | number | number | string[] | string; parameters?: { interval?: 'LIFETIME' | '7D' | '30D' | '90D'; scope?: 'CARD' | 'ACCOUNT' | 'BUSINESS_ACCOUNT'; unit?: 'MPH' | 'KPH' | 'MILES' | 'KILOMETERS'; }; }[]; }`\n Parameters for the Auth Rule\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: string`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst authRule = await client.authRules.v2.draft('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(authRule);\n```",
perLanguage: {
typescript: {
method: 'client.authRules.v2.draft',
@@ -1328,9 +1328,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
qualified: 'client.authRules.v2.promote',
params: ['auth_rule_token: string;'],
response:
- "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
+ "{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }",
markdown:
- "## promote\n\n`client.authRules.v2.promote(auth_rule_token: string): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**post** `/v2/auth_rules/{auth_rule_token}/promote`\n\nPromotes the draft version of an Auth rule to the currently active version such that it is enforced in the respective stream.\n\n### Parameters\n\n- `auth_rule_token: string`\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE'`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst authRule = await client.authRules.v2.promote('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(authRule);\n```",
+ "## promote\n\n`client.authRules.v2.promote(auth_rule_token: string): { token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: object; draft_version: object; event_stream: event_stream; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n**post** `/v2/auth_rules/{auth_rule_token}/promote`\n\nPromotes the draft version of an Auth rule to the currently active version such that it is enforced in the respective stream.\n\n### Parameters\n\n- `auth_rule_token: string`\n\n### Returns\n\n- `{ token: string; account_tokens: string[]; business_account_tokens: string[]; card_tokens: string[]; current_version: { parameters: object | object | object | object | object | object | object | object | object | object | object; version: number; }; draft_version: { error: string; parameters: object | object | object | object | object | object | object | object | object | object | object; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }; event_stream: string; lithic_managed: boolean; name: string; program_level: boolean; state: 'ACTIVE' | 'INACTIVE'; type: string; excluded_account_tokens?: string[]; excluded_business_account_tokens?: string[]; excluded_card_tokens?: string[]; }`\n\n - `token: string`\n - `account_tokens: string[]`\n - `business_account_tokens: string[]`\n - `card_tokens: string[]`\n - `current_version: { parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; version: number; }`\n - `draft_version: { error: string; parameters: { conditions: object[]; } | { period: object | object | object | object | object; scope: 'CARD' | 'ACCOUNT'; filters?: object; limit_amount?: number; limit_cash_amount?: number; limit_cash_count?: number; limit_count?: number; } | { merchants: { comment?: string; descriptor?: string; merchant_id?: string; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: 'DECLINE' | 'CHALLENGE'; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: { type: 'APPROVE'; } | { code: string; type: 'RETURN'; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: { type: 'DECLINE'; reason?: string; } | { type: 'REQUIRE_TFA'; reason?: string; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; } | { action: object | object; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; }[]; } | { code: string; features: object | object | object | object | object | object | object | object | object | object | object | object | object | object | object[]; } | { action: { mode: 'REPLACE_WITH_AMOUNT' | 'ADD_PERCENTAGE' | 'ADD_AMOUNT'; type: 'HOLD_ADJUSTMENT'; value: number; }; conditions: { attribute: string; operation: conditional_operation; value: conditional_value; parameters?: object; }[]; }; state: 'PENDING' | 'SHADOWING' | 'ERROR'; version: number; }`\n - `event_stream: string`\n - `lithic_managed: boolean`\n - `name: string`\n - `program_level: boolean`\n - `state: 'ACTIVE' | 'INACTIVE'`\n - `type: string`\n - `excluded_account_tokens?: string[]`\n - `excluded_business_account_tokens?: string[]`\n - `excluded_card_tokens?: string[]`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst authRule = await client.authRules.v2.promote('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(authRule);\n```",
perLanguage: {
typescript: {
method: 'client.authRules.v2.promote',
diff --git a/src/resources/auth-rules/v2/v2.ts b/src/resources/auth-rules/v2/v2.ts
index 5a1551c3..1c221bd2 100644
--- a/src/resources/auth-rules/v2/v2.ts
+++ b/src/resources/auth-rules/v2/v2.ts
@@ -259,8 +259,16 @@ export interface AuthRule {
* - `TYPESCRIPT_CODE`: AUTHORIZATION, THREE_DS_AUTHENTICATION, TOKENIZATION,
* ACH_CREDIT_RECEIPT, ACH_DEBIT_RECEIPT, CARD_TRANSACTION_UPDATE, or
* ACH_PAYMENT_UPDATE event stream.
+ * - `OTHER`: A rule whose type is not exposed through this API. Rules of this type
+ * are read-only; `OTHER` cannot be used when creating a rule.
*/
- type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE';
+ type:
+ | 'CONDITIONAL_BLOCK'
+ | 'VELOCITY_LIMIT'
+ | 'MERCHANT_LOCK'
+ | 'CONDITIONAL_ACTION'
+ | 'TYPESCRIPT_CODE'
+ | 'OTHER';
/**
* Account tokens to which the Auth Rule does not apply.
@@ -3351,8 +3359,16 @@ export declare namespace V2CreateParams {
* - `TYPESCRIPT_CODE`: AUTHORIZATION, THREE_DS_AUTHENTICATION, TOKENIZATION,
* ACH_CREDIT_RECEIPT, ACH_DEBIT_RECEIPT, CARD_TRANSACTION_UPDATE, or
* ACH_PAYMENT_UPDATE event stream.
+ * - `OTHER`: A rule whose type is not exposed through this API. Rules of this type
+ * are read-only; `OTHER` cannot be used when creating a rule.
*/
- type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE';
+ type:
+ | 'CONDITIONAL_BLOCK'
+ | 'VELOCITY_LIMIT'
+ | 'MERCHANT_LOCK'
+ | 'CONDITIONAL_ACTION'
+ | 'TYPESCRIPT_CODE'
+ | 'OTHER';
/**
* Account tokens to which the Auth Rule applies.
@@ -3413,8 +3429,16 @@ export declare namespace V2CreateParams {
* - `TYPESCRIPT_CODE`: AUTHORIZATION, THREE_DS_AUTHENTICATION, TOKENIZATION,
* ACH_CREDIT_RECEIPT, ACH_DEBIT_RECEIPT, CARD_TRANSACTION_UPDATE, or
* ACH_PAYMENT_UPDATE event stream.
+ * - `OTHER`: A rule whose type is not exposed through this API. Rules of this type
+ * are read-only; `OTHER` cannot be used when creating a rule.
*/
- type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE';
+ type:
+ | 'CONDITIONAL_BLOCK'
+ | 'VELOCITY_LIMIT'
+ | 'MERCHANT_LOCK'
+ | 'CONDITIONAL_ACTION'
+ | 'TYPESCRIPT_CODE'
+ | 'OTHER';
/**
* The event stream during which the rule will be evaluated.
@@ -3465,8 +3489,16 @@ export declare namespace V2CreateParams {
* - `TYPESCRIPT_CODE`: AUTHORIZATION, THREE_DS_AUTHENTICATION, TOKENIZATION,
* ACH_CREDIT_RECEIPT, ACH_DEBIT_RECEIPT, CARD_TRANSACTION_UPDATE, or
* ACH_PAYMENT_UPDATE event stream.
- */
- type: 'CONDITIONAL_BLOCK' | 'VELOCITY_LIMIT' | 'MERCHANT_LOCK' | 'CONDITIONAL_ACTION' | 'TYPESCRIPT_CODE';
+ * - `OTHER`: A rule whose type is not exposed through this API. Rules of this type
+ * are read-only; `OTHER` cannot be used when creating a rule.
+ */
+ type:
+ | 'CONDITIONAL_BLOCK'
+ | 'VELOCITY_LIMIT'
+ | 'MERCHANT_LOCK'
+ | 'CONDITIONAL_ACTION'
+ | 'TYPESCRIPT_CODE'
+ | 'OTHER';
/**
* The event stream during which the rule will be evaluated.
From d89001c431cbfcb4a0be1e61a79299d8d6096794 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 3 Sep 2026 16:13:06 +0000
Subject: [PATCH 03/15] feat(api): add EXTERNAL_STABLECOIN category and events
to payments/account-activity/statements
---
.stats.yml | 4 ++--
src/resources/account-activity.ts | 3 +++
src/resources/external-payments.ts | 10 +++++++++-
.../financial-accounts/statements/line-items.ts | 6 ++++++
src/resources/payments.ts | 1 +
src/resources/shared.ts | 5 +++++
6 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 9326df23..36e76ee0 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 216
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-9a4064ca9be1efe3e33d922cae77a5d186b6a0119ef1d3601b5ded1447feb7f7.yml
-openapi_spec_hash: bff457821129b2eb4fc5150e23efa197
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-61d6a4ff8361065995b3a743d6034b7deb3d307e3f3d0c9ef24010dd1b71d692.yml
+openapi_spec_hash: 736b5c82d6b4a14788140fe05e0fbc30
config_hash: 27fa50e251754c8982e3dc615ef6da41
diff --git a/src/resources/account-activity.ts b/src/resources/account-activity.ts
index cb98eaa7..17bdfc01 100644
--- a/src/resources/account-activity.ts
+++ b/src/resources/account-activity.ts
@@ -107,6 +107,7 @@ export namespace AccountActivityListResponse {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER'
| 'EXTERNAL_WIRE'
| 'MANAGEMENT_ADJUSTMENT'
@@ -250,6 +251,7 @@ export namespace AccountActivityRetrieveTransactionResponse {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER'
| 'EXTERNAL_WIRE'
| 'MANAGEMENT_ADJUSTMENT'
@@ -383,6 +385,7 @@ export interface AccountActivityListParams extends CursorPageParams {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER'
| 'EXTERNAL_WIRE'
| 'MANAGEMENT_ADJUSTMENT'
diff --git a/src/resources/external-payments.ts b/src/resources/external-payments.ts
index 0abeca89..88ae3f49 100644
--- a/src/resources/external-payments.ts
+++ b/src/resources/external-payments.ts
@@ -120,6 +120,7 @@ export interface ExternalPayment {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER';
currency?: string;
@@ -190,7 +191,12 @@ export namespace ExternalPayment {
| 'EXTERNAL_RTP_CANCELED'
| 'EXTERNAL_RTP_SETTLED'
| 'EXTERNAL_RTP_REVERSED'
- | 'EXTERNAL_RTP_RELEASED';
+ | 'EXTERNAL_RTP_RELEASED'
+ | 'EXTERNAL_STABLECOIN_INITIATED'
+ | 'EXTERNAL_STABLECOIN_CANCELED'
+ | 'EXTERNAL_STABLECOIN_SETTLED'
+ | 'EXTERNAL_STABLECOIN_REVERSED'
+ | 'EXTERNAL_STABLECOIN_RELEASED';
}
}
@@ -203,6 +209,7 @@ export interface ExternalPaymentCreateParams {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER';
effective_date: string;
@@ -242,6 +249,7 @@ export interface ExternalPaymentListParams extends CursorPageParams {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER';
/**
diff --git a/src/resources/financial-accounts/statements/line-items.ts b/src/resources/financial-accounts/statements/line-items.ts
index d2003ff3..8381da3e 100644
--- a/src/resources/financial-accounts/statements/line-items.ts
+++ b/src/resources/financial-accounts/statements/line-items.ts
@@ -79,6 +79,7 @@ export namespace StatementLineItems {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER'
| 'EXTERNAL_WIRE'
| 'MANAGEMENT_ADJUSTMENT'
@@ -160,6 +161,11 @@ export namespace StatementLineItems {
| 'EXTERNAL_RTP_RELEASED'
| 'EXTERNAL_RTP_REVERSED'
| 'EXTERNAL_RTP_SETTLED'
+ | 'EXTERNAL_STABLECOIN_CANCELED'
+ | 'EXTERNAL_STABLECOIN_INITIATED'
+ | 'EXTERNAL_STABLECOIN_RELEASED'
+ | 'EXTERNAL_STABLECOIN_REVERSED'
+ | 'EXTERNAL_STABLECOIN_SETTLED'
| 'EXTERNAL_TRANSFER_CANCELED'
| 'EXTERNAL_TRANSFER_INITIATED'
| 'EXTERNAL_TRANSFER_RELEASED'
diff --git a/src/resources/payments.ts b/src/resources/payments.ts
index 0158804e..9bcf3350 100644
--- a/src/resources/payments.ts
+++ b/src/resources/payments.ts
@@ -212,6 +212,7 @@ export interface Payment {
| 'EXTERNAL_CHECK'
| 'EXTERNAL_FEDNOW'
| 'EXTERNAL_RTP'
+ | 'EXTERNAL_STABLECOIN'
| 'EXTERNAL_TRANSFER'
| 'EXTERNAL_WIRE'
| 'MANAGEMENT_ADJUSTMENT'
diff --git a/src/resources/shared.ts b/src/resources/shared.ts
index 0f29ba0e..368b4c65 100644
--- a/src/resources/shared.ts
+++ b/src/resources/shared.ts
@@ -256,6 +256,11 @@ export interface FinancialEvent {
| 'EXTERNAL_RTP_RELEASED'
| 'EXTERNAL_RTP_REVERSED'
| 'EXTERNAL_RTP_SETTLED'
+ | 'EXTERNAL_STABLECOIN_CANCELED'
+ | 'EXTERNAL_STABLECOIN_INITIATED'
+ | 'EXTERNAL_STABLECOIN_RELEASED'
+ | 'EXTERNAL_STABLECOIN_REVERSED'
+ | 'EXTERNAL_STABLECOIN_SETTLED'
| 'EXTERNAL_TRANSFER_CANCELED'
| 'EXTERNAL_TRANSFER_INITIATED'
| 'EXTERNAL_TRANSFER_RELEASED'
From 1f241df9bbd3b4c5c31521f07f3ccb52f06b8640 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 10 Sep 2026 15:53:16 +0000
Subject: [PATCH 04/15] feat: TRE-14429: Document the stablecoin payments
endpoint
---
.stats.yml | 8 +-
api.md | 2 +
packages/mcp-server/src/code-tool-worker.ts | 1 +
packages/mcp-server/src/local-docs-search.ts | 68 ++++++++++-
packages/mcp-server/src/methods.ts | 6 +
src/client.ts | 4 +
src/resources/index.ts | 2 +
src/resources/payments.ts | 114 ++++++++++++++++++-
tests/api-resources/payments.test.ts | 28 +++++
9 files changed, 223 insertions(+), 10 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 36e76ee0..3bbc4737 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 216
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-61d6a4ff8361065995b3a743d6034b7deb3d307e3f3d0c9ef24010dd1b71d692.yml
-openapi_spec_hash: 736b5c82d6b4a14788140fe05e0fbc30
-config_hash: 27fa50e251754c8982e3dc615ef6da41
+configured_endpoints: 217
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-70147140a7b2043acf622024eb3bde9b04264f8e9a695d4c79b5ee4db1534518.yml
+openapi_spec_hash: 7a181cb1cfaaa201143bd9d04a841a2e
+config_hash: e95c2dda5d175f9316457e0a84e35dce
diff --git a/api.md b/api.md
index 16e674ac..5c54a2ce 100644
--- a/api.md
+++ b/api.md
@@ -645,6 +645,7 @@ Types:
- Payment
- PaymentCreateResponse
+- PaymentCreateStablecoinResponse
- PaymentRetryResponse
- PaymentSimulateActionResponse
- PaymentSimulateReceiptResponse
@@ -656,6 +657,7 @@ Methods:
- client.payments.create({ ...params }) -> PaymentCreateResponse
- client.payments.retrieve(paymentToken) -> Payment
- client.payments.list({ ...params }) -> PaymentsCursorPage
+- client.payments.createStablecoin({ ...params }) -> PaymentCreateStablecoinResponse
- client.payments.retry(paymentToken) -> PaymentRetryResponse
- client.payments.return(paymentToken, { ...params }) -> Payment
- client.payments.simulateAction(paymentToken, { ...params }) -> PaymentSimulateActionResponse
diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts
index 1efcebac..b6055793 100644
--- a/packages/mcp-server/src/code-tool-worker.ts
+++ b/packages/mcp-server/src/code-tool-worker.ts
@@ -270,6 +270,7 @@ const fuse = new Fuse(
'client.externalBankAccounts.microDeposits.create',
'client.blockchainRecipients.create',
'client.payments.create',
+ 'client.payments.createStablecoin',
'client.payments.list',
'client.payments.retrieve',
'client.payments.retry',
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index 2400f6c2..b7f36f7e 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -8546,7 +8546,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
'account_token?: string;',
'begin?: string;',
'business_account_token?: string;',
- "category?: 'ACH';",
+ "category?: 'ACH' | 'STABLECOIN';",
'end?: string;',
'ending_before?: string;',
'financial_account_token?: string;',
@@ -8558,7 +8558,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
response:
"{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: object[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: object | object | object; pending_amount: number; related_account_tokens: object; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }",
markdown:
- "## list\n\n`client.payments.list(account_token?: string, begin?: string, business_account_token?: string, category?: 'ACH', end?: string, ending_before?: string, financial_account_token?: string, page_size?: number, result?: 'APPROVED' | 'DECLINED', starting_after?: string, status?: 'DECLINED' | 'PENDING' | 'RETURNED' | 'REVERSED' | 'SETTLED'): { token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: object[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: object | object | object; pending_amount: number; related_account_tokens: object; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n\n**get** `/v1/payments`\n\nList all the payments for the provided search criteria.\n\n### Parameters\n\n- `account_token?: string`\n\n- `begin?: string`\n Date string in RFC 3339 format. Only entries created after the specified time will be included. UTC time zone.\n\n- `business_account_token?: string`\n\n- `category?: 'ACH'`\n\n- `end?: string`\n Date string in RFC 3339 format. Only entries created before the specified time will be included. UTC time zone.\n\n- `ending_before?: string`\n A cursor representing an item's token before which a page of results should end. Used to retrieve the previous page of results before this item.\n\n- `financial_account_token?: string`\n\n- `page_size?: number`\n Page size (for pagination).\n\n- `result?: 'APPROVED' | 'DECLINED'`\n\n- `starting_after?: string`\n A cursor representing an item's token after which a page of results should begin. Used to retrieve the next page of results after this item.\n\n- `status?: 'DECLINED' | 'PENDING' | 'RETURNED' | 'REVERSED' | 'SETTLED'`\n\n### Returns\n\n- `{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: object; debtor?: object; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }; pending_amount: number; related_account_tokens: { account_token: string; business_account_token: string; }; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n Payment transaction\n\n - `token: string`\n - `category: string`\n - `created: string`\n - `descriptor: string`\n - `direction: 'CREDIT' | 'DEBIT'`\n - `events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]`\n - `family: 'PAYMENT'`\n - `financial_account_token: string`\n - `method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'`\n - `method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: { account_number?: string; agent_id?: string; agent_name?: string; name?: string; }; debtor?: { account_number?: string; agent_id?: string; agent_name?: string; name?: string; }; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }`\n - `pending_amount: number`\n - `related_account_tokens: { account_token: string; business_account_token: string; }`\n - `result: 'APPROVED' | 'DECLINED'`\n - `settled_amount: number`\n - `source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'`\n - `status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'`\n - `updated: string`\n - `blockchain_recipient_token?: string`\n - `currency?: string`\n - `expected_release_date?: string`\n - `external_bank_account_token?: string`\n - `tags?: object`\n - `type?: string`\n - `user_defined_id?: string`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\n// Automatically fetches more pages as needed.\nfor await (const payment of client.payments.list()) {\n console.log(payment);\n}\n```",
+ "## list\n\n`client.payments.list(account_token?: string, begin?: string, business_account_token?: string, category?: 'ACH' | 'STABLECOIN', end?: string, ending_before?: string, financial_account_token?: string, page_size?: number, result?: 'APPROVED' | 'DECLINED', starting_after?: string, status?: 'DECLINED' | 'PENDING' | 'RETURNED' | 'REVERSED' | 'SETTLED'): { token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: object[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: object | object | object; pending_amount: number; related_account_tokens: object; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n\n**get** `/v1/payments`\n\nList all the payments for the provided search criteria.\n\n### Parameters\n\n- `account_token?: string`\n\n- `begin?: string`\n Date string in RFC 3339 format. Only entries created after the specified time will be included. UTC time zone.\n\n- `business_account_token?: string`\n\n- `category?: 'ACH' | 'STABLECOIN'`\n\n- `end?: string`\n Date string in RFC 3339 format. Only entries created before the specified time will be included. UTC time zone.\n\n- `ending_before?: string`\n A cursor representing an item's token before which a page of results should end. Used to retrieve the previous page of results before this item.\n\n- `financial_account_token?: string`\n\n- `page_size?: number`\n Page size (for pagination).\n\n- `result?: 'APPROVED' | 'DECLINED'`\n\n- `starting_after?: string`\n A cursor representing an item's token after which a page of results should begin. Used to retrieve the next page of results after this item.\n\n- `status?: 'DECLINED' | 'PENDING' | 'RETURNED' | 'REVERSED' | 'SETTLED'`\n\n### Returns\n\n- `{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: object; debtor?: object; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }; pending_amount: number; related_account_tokens: { account_token: string; business_account_token: string; }; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n Payment transaction\n\n - `token: string`\n - `category: string`\n - `created: string`\n - `descriptor: string`\n - `direction: 'CREDIT' | 'DEBIT'`\n - `events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]`\n - `family: 'PAYMENT'`\n - `financial_account_token: string`\n - `method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'`\n - `method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: { account_number?: string; agent_id?: string; agent_name?: string; name?: string; }; debtor?: { account_number?: string; agent_id?: string; agent_name?: string; name?: string; }; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }`\n - `pending_amount: number`\n - `related_account_tokens: { account_token: string; business_account_token: string; }`\n - `result: 'APPROVED' | 'DECLINED'`\n - `settled_amount: number`\n - `source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'`\n - `status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'`\n - `updated: string`\n - `blockchain_recipient_token?: string`\n - `currency?: string`\n - `expected_release_date?: string`\n - `external_bank_account_token?: string`\n - `tags?: object`\n - `type?: string`\n - `user_defined_id?: string`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\n// Automatically fetches more pages as needed.\nfor await (const payment of client.payments.list()) {\n console.log(payment);\n}\n```",
perLanguage: {
typescript: {
method: 'client.payments.list',
@@ -8600,7 +8600,8 @@ const EMBEDDED_METHODS: MethodEntry[] = [
endpoint: '/v1/payments',
httpMethod: 'post',
summary: 'Create payment',
- description: 'Initiates a payment between a financial account and an external bank account.',
+ description:
+ 'Initiates an ACH payment between a financial account and an external bank account.\n\nThis endpoint originates on the ACH rail only. To send a stablecoin payout, use the\n[Create stablecoin payment](https://docs.lithic.com/reference/createstablecoinpayment)\nendpoint. Payments on every rail are read back through\n[List payments](https://docs.lithic.com/reference/searchpayments).\n',
stainlessPath: '(resource) payments > (method) create',
qualified: 'client.payments.create',
params: [
@@ -8618,7 +8619,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
response:
"{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: object[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: object | object | object; pending_amount: number; related_account_tokens: object; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }",
markdown:
- "## create\n\n`client.payments.create(amount: number, external_bank_account_token: string, financial_account_token: string, method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY', method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB'; ach_hold_period?: number; addenda?: string; override_company_name?: string; }, type: 'COLLECTION' | 'PAYMENT', token?: string, hold?: { token: string; }, memo?: string, user_defined_id?: string): object`\n\n**post** `/v1/payments`\n\nInitiates a payment between a financial account and an external bank account.\n\n### Parameters\n\n- `amount: number`\n\n- `external_bank_account_token: string`\n\n- `financial_account_token: string`\n\n- `method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY'`\n\n- `method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB'; ach_hold_period?: number; addenda?: string; override_company_name?: string; }`\n - `sec_code: 'CCD' | 'PPD' | 'WEB'`\n - `ach_hold_period?: number`\n Number of days to hold the ACH payment\n - `addenda?: string`\n - `override_company_name?: string`\n Value to override the configured company name with. Can only be used if allowed to override\n\n- `type: 'COLLECTION' | 'PAYMENT'`\n\n- `token?: string`\n Customer-provided token that will serve as an idempotency token. This token will become the transaction token.\n\n- `hold?: { token: string; }`\n Optional hold to settle when this payment is initiated.\n - `token: string`\n Token of the hold to settle when this payment is initiated.\n\n- `memo?: string`\n\n- `user_defined_id?: string`\n\n### Returns\n\n- `{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: wire_party_details; debtor?: wire_party_details; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }; pending_amount: number; related_account_tokens: { account_token: string; business_account_token: string; }; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n Payment transaction\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst payment = await client.payments.create({\n amount: 1,\n external_bank_account_token: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n financial_account_token: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n method: 'ACH_NEXT_DAY',\n method_attributes: { sec_code: 'CCD' },\n type: 'COLLECTION',\n});\n\nconsole.log(payment);\n```",
+ "## create\n\n`client.payments.create(amount: number, external_bank_account_token: string, financial_account_token: string, method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY', method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB'; ach_hold_period?: number; addenda?: string; override_company_name?: string; }, type: 'COLLECTION' | 'PAYMENT', token?: string, hold?: { token: string; }, memo?: string, user_defined_id?: string): object`\n\n**post** `/v1/payments`\n\nInitiates an ACH payment between a financial account and an external bank account.\n\nThis endpoint originates on the ACH rail only. To send a stablecoin payout, use the\n[Create stablecoin payment](https://docs.lithic.com/reference/createstablecoinpayment)\nendpoint. Payments on every rail are read back through\n[List payments](https://docs.lithic.com/reference/searchpayments).\n\n\n### Parameters\n\n- `amount: number`\n\n- `external_bank_account_token: string`\n\n- `financial_account_token: string`\n\n- `method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY'`\n\n- `method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB'; ach_hold_period?: number; addenda?: string; override_company_name?: string; }`\n - `sec_code: 'CCD' | 'PPD' | 'WEB'`\n - `ach_hold_period?: number`\n Number of days to hold the ACH payment\n - `addenda?: string`\n - `override_company_name?: string`\n Value to override the configured company name with. Can only be used if allowed to override\n\n- `type: 'COLLECTION' | 'PAYMENT'`\n\n- `token?: string`\n Customer-provided token that will serve as an idempotency token. This token will become the transaction token.\n\n- `hold?: { token: string; }`\n Optional hold to settle when this payment is initiated.\n - `token: string`\n Token of the hold to settle when this payment is initiated.\n\n- `memo?: string`\n\n- `user_defined_id?: string`\n\n### Returns\n\n- `{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: wire_party_details; debtor?: wire_party_details; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }; pending_amount: number; related_account_tokens: { account_token: string; business_account_token: string; }; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n Payment transaction\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst payment = await client.payments.create({\n amount: 1,\n external_bank_account_token: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n financial_account_token: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n method: 'ACH_NEXT_DAY',\n method_attributes: { sec_code: 'CCD' },\n type: 'COLLECTION',\n});\n\nconsole.log(payment);\n```",
perLanguage: {
typescript: {
method: 'client.payments.create',
@@ -8656,6 +8657,65 @@ const EMBEDDED_METHODS: MethodEntry[] = [
},
},
},
+ {
+ name: 'create_stablecoin',
+ endpoint: '/v1/payments/stablecoin',
+ httpMethod: 'post',
+ summary: 'Create stablecoin payment',
+ description:
+ "Initiates a stablecoin payout from a financial account to a registered blockchain recipient.\n\nThe recipient must have been registered with\n[Create blockchain recipient](https://docs.lithic.com/reference/createblockchainrecipient) and\nhave completed address screening — only a recipient in the `ENABLED` verification state can\nreceive a payout. The destination address and chain come from the recipient, so they are not\nsupplied here.\n\nOnly payouts are initiated through this endpoint. Stablecoin pay-ins are credited from\non-chain deposits to a financial account's deposit address and are not created through the\nAPI. Funds are placed on hold when the payout is initiated, and a payout that fails on chain\nreverses that hold. A payout cannot be cancelled once it has been submitted on chain.\n\nThis endpoint is only available to stablecoin-enabled programs. Contact your customer success\nmanager to learn more.\n",
+ stainlessPath: '(resource) payments > (method) create_stablecoin',
+ qualified: 'client.payments.createStablecoin',
+ params: [
+ 'amount: number;',
+ 'blockchain_recipient_token: string;',
+ 'financial_account_token: string;',
+ "type: 'PAYMENT';",
+ 'token?: string;',
+ 'hold?: { token: string; };',
+ 'memo?: string;',
+ ],
+ response:
+ "{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: object[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: object | object | object; pending_amount: number; related_account_tokens: object; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }",
+ markdown:
+ "## create_stablecoin\n\n`client.payments.createStablecoin(amount: number, blockchain_recipient_token: string, financial_account_token: string, type: 'PAYMENT', token?: string, hold?: { token: string; }, memo?: string): object`\n\n**post** `/v1/payments/stablecoin`\n\nInitiates a stablecoin payout from a financial account to a registered blockchain recipient.\n\nThe recipient must have been registered with\n[Create blockchain recipient](https://docs.lithic.com/reference/createblockchainrecipient) and\nhave completed address screening — only a recipient in the `ENABLED` verification state can\nreceive a payout. The destination address and chain come from the recipient, so they are not\nsupplied here.\n\nOnly payouts are initiated through this endpoint. Stablecoin pay-ins are credited from\non-chain deposits to a financial account's deposit address and are not created through the\nAPI. Funds are placed on hold when the payout is initiated, and a payout that fails on chain\nreverses that hold. A payout cannot be cancelled once it has been submitted on chain.\n\nThis endpoint is only available to stablecoin-enabled programs. Contact your customer success\nmanager to learn more.\n\n\n### Parameters\n\n- `amount: number`\n Payout amount in cents\n\n- `blockchain_recipient_token: string`\n Token of the blockchain recipient to send the payout to. The recipient must be in the `ENABLED` verification state\n\n- `financial_account_token: string`\n Token of the financial account the payout is funded from\n\n- `type: 'PAYMENT'`\n Direction of the payment. Stablecoin supports payouts only\n\n- `token?: string`\n Customer-provided token that will serve as an idempotency token. This token will become the transaction token\n\n- `hold?: { token: string; }`\n Optional hold to settle when this payout is initiated\n - `token: string`\n Token of the hold to settle when this payout is initiated\n\n- `memo?: string`\n Memo recorded on the payout. Defaults to `Stablecoin payout on ` when omitted\n\n### Returns\n\n- `{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: wire_party_details; debtor?: wire_party_details; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }; pending_amount: number; related_account_tokens: { account_token: string; business_account_token: string; }; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n Payment transaction\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst response = await client.payments.createStablecoin({\n amount: 1588,\n blockchain_recipient_token: '1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9',\n financial_account_token: '35b0c466-a3e3-519a-9549-ead6a6a2277d',\n type: 'PAYMENT',\n});\n\nconsole.log(response);\n```",
+ perLanguage: {
+ typescript: {
+ method: 'client.payments.createStablecoin',
+ example:
+ "import Lithic from 'lithic';\n\nconst client = new Lithic({\n apiKey: process.env['LITHIC_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.payments.createStablecoin({\n amount: 1588,\n blockchain_recipient_token: '1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9',\n financial_account_token: '35b0c466-a3e3-519a-9549-ead6a6a2277d',\n type: 'PAYMENT',\n memo: 'Vendor payout',\n});\n\nconsole.log(response);",
+ },
+ python: {
+ method: 'payments.create_stablecoin',
+ example:
+ 'import os\nfrom lithic import Lithic\n\nclient = Lithic(\n api_key=os.environ.get("LITHIC_API_KEY"), # This is the default and can be omitted\n)\nresponse = client.payments.create_stablecoin(\n amount=1588,\n blockchain_recipient_token="1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9",\n financial_account_token="35b0c466-a3e3-519a-9549-ead6a6a2277d",\n type="PAYMENT",\n memo="Vendor payout",\n)\nprint(response)',
+ },
+ java: {
+ method: 'payments().createStablecoin',
+ example:
+ 'package com.lithic.api.example;\n\nimport com.lithic.api.client.LithicClient;\nimport com.lithic.api.client.okhttp.LithicOkHttpClient;\nimport com.lithic.api.models.PaymentCreateStablecoinParams;\nimport com.lithic.api.models.PaymentCreateStablecoinResponse;\n\npublic final class Main {\n private Main() {}\n\n public static void main(String[] args) {\n LithicClient client = LithicOkHttpClient.fromEnv();\n\n PaymentCreateStablecoinParams params = PaymentCreateStablecoinParams.builder()\n .amount(1588L)\n .blockchainRecipientToken("1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9")\n .financialAccountToken("35b0c466-a3e3-519a-9549-ead6a6a2277d")\n .type(PaymentCreateStablecoinParams.Type.PAYMENT)\n .build();\n PaymentCreateStablecoinResponse response = client.payments().createStablecoin(params);\n }\n}',
+ },
+ kotlin: {
+ method: 'payments().createStablecoin',
+ example:
+ 'package com.lithic.api.example\n\nimport com.lithic.api.client.LithicClient\nimport com.lithic.api.client.okhttp.LithicOkHttpClient\nimport com.lithic.api.models.PaymentCreateStablecoinParams\nimport com.lithic.api.models.PaymentCreateStablecoinResponse\n\nfun main() {\n val client: LithicClient = LithicOkHttpClient.fromEnv()\n\n val params: PaymentCreateStablecoinParams = PaymentCreateStablecoinParams.builder()\n .amount(1588L)\n .blockchainRecipientToken("1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9")\n .financialAccountToken("35b0c466-a3e3-519a-9549-ead6a6a2277d")\n .type(PaymentCreateStablecoinParams.Type.PAYMENT)\n .build()\n val response: PaymentCreateStablecoinResponse = client.payments().createStablecoin(params)\n}',
+ },
+ go: {
+ method: 'client.Payments.NewStablecoin',
+ example:
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/lithic-com/lithic-go"\n\t"github.com/lithic-com/lithic-go/option"\n)\n\nfunc main() {\n\tclient := lithic.NewClient(\n\t\toption.WithAPIKey("My Lithic API Key"),\n\t)\n\tresponse, err := client.Payments.NewStablecoin(context.TODO(), lithic.PaymentNewStablecoinParams{\n\t\tAmount: lithic.F(int64(1588)),\n\t\tBlockchainRecipientToken: lithic.F("1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9"),\n\t\tFinancialAccountToken: lithic.F("35b0c466-a3e3-519a-9549-ead6a6a2277d"),\n\t\tType: lithic.F(lithic.PaymentNewStablecoinParamsTypePayment),\n\t\tMemo: lithic.F("Vendor payout"),\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", response)\n}\n',
+ },
+ ruby: {
+ method: 'payments.create_stablecoin',
+ example:
+ 'require "lithic"\n\nlithic = Lithic::Client.new(\n api_key: "My Lithic API Key",\n environment: "sandbox" # defaults to "production"\n)\n\nresponse = lithic.payments.create_stablecoin(\n amount: 1588,\n blockchain_recipient_token: "1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9",\n financial_account_token: "35b0c466-a3e3-519a-9549-ead6a6a2277d",\n type: :PAYMENT\n)\n\nputs(response)',
+ },
+ http: {
+ example:
+ 'curl https://api.lithic.com/v1/payments/stablecoin \\\n -H \'Content-Type: application/json\' \\\n -H "Authorization: $LITHIC_API_KEY" \\\n -d \'{\n "amount": 1588,\n "blockchain_recipient_token": "1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9",\n "financial_account_token": "35b0c466-a3e3-519a-9549-ead6a6a2277d",\n "type": "PAYMENT",\n "memo": "Vendor payout"\n }\'',
+ },
+ },
+ },
{
name: 'retrieve',
endpoint: '/v1/payments/{payment_token}',
diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts
index f163b203..24c44f9f 100644
--- a/packages/mcp-server/src/methods.ts
+++ b/packages/mcp-server/src/methods.ts
@@ -995,6 +995,12 @@ export const sdkMethods: SdkMethod[] = [
httpMethod: 'get',
httpPath: '/v1/payments',
},
+ {
+ clientCallName: 'client.payments.createStablecoin',
+ fullyQualifiedName: 'payments.createStablecoin',
+ httpMethod: 'post',
+ httpPath: '/v1/payments/stablecoin',
+ },
{
clientCallName: 'client.payments.retry',
fullyQualifiedName: 'payments.retry',
diff --git a/src/client.ts b/src/client.ts
index 390c0859..a5ac96ea 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -146,6 +146,8 @@ import {
Payment,
PaymentCreateParams,
PaymentCreateResponse,
+ PaymentCreateStablecoinParams,
+ PaymentCreateStablecoinResponse,
PaymentListParams,
PaymentRetryResponse,
PaymentReturnParams,
@@ -1484,6 +1486,7 @@ export declare namespace Lithic {
Payments as Payments,
type Payment as Payment,
type PaymentCreateResponse as PaymentCreateResponse,
+ type PaymentCreateStablecoinResponse as PaymentCreateStablecoinResponse,
type PaymentRetryResponse as PaymentRetryResponse,
type PaymentSimulateActionResponse as PaymentSimulateActionResponse,
type PaymentSimulateReceiptResponse as PaymentSimulateReceiptResponse,
@@ -1492,6 +1495,7 @@ export declare namespace Lithic {
type PaymentsCursorPage as PaymentsCursorPage,
type PaymentCreateParams as PaymentCreateParams,
type PaymentListParams as PaymentListParams,
+ type PaymentCreateStablecoinParams as PaymentCreateStablecoinParams,
type PaymentReturnParams as PaymentReturnParams,
type PaymentSimulateActionParams as PaymentSimulateActionParams,
type PaymentSimulateReceiptParams as PaymentSimulateReceiptParams,
diff --git a/src/resources/index.ts b/src/resources/index.ts
index 94506812..fff0d02c 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -220,6 +220,7 @@ export {
Payments,
type Payment,
type PaymentCreateResponse,
+ type PaymentCreateStablecoinResponse,
type PaymentRetryResponse,
type PaymentSimulateActionResponse,
type PaymentSimulateReceiptResponse,
@@ -227,6 +228,7 @@ export {
type PaymentSimulateReturnResponse,
type PaymentCreateParams,
type PaymentListParams,
+ type PaymentCreateStablecoinParams,
type PaymentReturnParams,
type PaymentSimulateActionParams,
type PaymentSimulateReceiptParams,
diff --git a/src/resources/payments.ts b/src/resources/payments.ts
index 9bcf3350..b6128ded 100644
--- a/src/resources/payments.ts
+++ b/src/resources/payments.ts
@@ -10,7 +10,14 @@ import { path } from '../internal/utils/path';
export class Payments extends APIResource {
/**
- * Initiates a payment between a financial account and an external bank account.
+ * Initiates an ACH payment between a financial account and an external bank
+ * account.
+ *
+ * This endpoint originates on the ACH rail only. To send a stablecoin payout, use
+ * the
+ * [Create stablecoin payment](https://docs.lithic.com/reference/createstablecoinpayment)
+ * endpoint. Payments on every rail are read back through
+ * [List payments](https://docs.lithic.com/reference/searchpayments).
*
* @example
* ```ts
@@ -62,6 +69,45 @@ export class Payments extends APIResource {
return this._client.getAPIList('/v1/payments', CursorPage, { query, ...options });
}
+ /**
+ * Initiates a stablecoin payout from a financial account to a registered
+ * blockchain recipient.
+ *
+ * The recipient must have been registered with
+ * [Create blockchain recipient](https://docs.lithic.com/reference/createblockchainrecipient)
+ * and have completed address screening — only a recipient in the `ENABLED`
+ * verification state can receive a payout. The destination address and chain come
+ * from the recipient, so they are not supplied here.
+ *
+ * Only payouts are initiated through this endpoint. Stablecoin pay-ins are
+ * credited from on-chain deposits to a financial account's deposit address and are
+ * not created through the API. Funds are placed on hold when the payout is
+ * initiated, and a payout that fails on chain reverses that hold. A payout cannot
+ * be cancelled once it has been submitted on chain.
+ *
+ * This endpoint is only available to stablecoin-enabled programs. Contact your
+ * customer success manager to learn more.
+ *
+ * @example
+ * ```ts
+ * const response = await client.payments.createStablecoin({
+ * amount: 1588,
+ * blockchain_recipient_token:
+ * '1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9',
+ * financial_account_token:
+ * '35b0c466-a3e3-519a-9549-ead6a6a2277d',
+ * type: 'PAYMENT',
+ * memo: 'Vendor payout',
+ * });
+ * ```
+ */
+ createStablecoin(
+ body: PaymentCreateStablecoinParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.post('/v1/payments/stablecoin', { body, ...options });
+ }
+
/**
* Retry an origination which has been returned.
*
@@ -619,6 +665,16 @@ export interface PaymentCreateResponse extends Payment {
balance?: BalancesAPI.Balance;
}
+/**
+ * Payment transaction
+ */
+export interface PaymentCreateStablecoinResponse extends Payment {
+ /**
+ * Balance
+ */
+ balance?: BalancesAPI.Balance;
+}
+
/**
* Payment transaction
*/
@@ -766,7 +822,7 @@ export interface PaymentListParams extends CursorPageParams {
business_account_token?: string;
- category?: 'ACH';
+ category?: 'ACH' | 'STABLECOIN';
/**
* Date string in RFC 3339 format. Only entries created before the specified time
@@ -781,6 +837,58 @@ export interface PaymentListParams extends CursorPageParams {
status?: 'DECLINED' | 'PENDING' | 'RETURNED' | 'REVERSED' | 'SETTLED';
}
+export interface PaymentCreateStablecoinParams {
+ /**
+ * Payout amount in cents
+ */
+ amount: number;
+
+ /**
+ * Token of the blockchain recipient to send the payout to. The recipient must be
+ * in the `ENABLED` verification state
+ */
+ blockchain_recipient_token: string;
+
+ /**
+ * Token of the financial account the payout is funded from
+ */
+ financial_account_token: string;
+
+ /**
+ * Direction of the payment. Stablecoin supports payouts only
+ */
+ type: 'PAYMENT';
+
+ /**
+ * Customer-provided token that will serve as an idempotency token. This token will
+ * become the transaction token
+ */
+ token?: string;
+
+ /**
+ * Optional hold to settle when this payout is initiated
+ */
+ hold?: PaymentCreateStablecoinParams.Hold;
+
+ /**
+ * Memo recorded on the payout. Defaults to `Stablecoin payout on ` when
+ * omitted
+ */
+ memo?: string;
+}
+
+export namespace PaymentCreateStablecoinParams {
+ /**
+ * Optional hold to settle when this payout is initiated
+ */
+ export interface Hold {
+ /**
+ * Token of the hold to settle when this payout is initiated
+ */
+ token: string;
+ }
+}
+
export interface PaymentReturnParams {
/**
* Globally unique identifier for the financial account
@@ -903,6 +1011,7 @@ export declare namespace Payments {
export {
type Payment as Payment,
type PaymentCreateResponse as PaymentCreateResponse,
+ type PaymentCreateStablecoinResponse as PaymentCreateStablecoinResponse,
type PaymentRetryResponse as PaymentRetryResponse,
type PaymentSimulateActionResponse as PaymentSimulateActionResponse,
type PaymentSimulateReceiptResponse as PaymentSimulateReceiptResponse,
@@ -911,6 +1020,7 @@ export declare namespace Payments {
type PaymentsCursorPage as PaymentsCursorPage,
type PaymentCreateParams as PaymentCreateParams,
type PaymentListParams as PaymentListParams,
+ type PaymentCreateStablecoinParams as PaymentCreateStablecoinParams,
type PaymentReturnParams as PaymentReturnParams,
type PaymentSimulateActionParams as PaymentSimulateActionParams,
type PaymentSimulateReceiptParams as PaymentSimulateReceiptParams,
diff --git a/tests/api-resources/payments.test.ts b/tests/api-resources/payments.test.ts
index 6b57065a..2f266205 100644
--- a/tests/api-resources/payments.test.ts
+++ b/tests/api-resources/payments.test.ts
@@ -90,6 +90,34 @@ describe('resource payments', () => {
).rejects.toThrow(Lithic.NotFoundError);
});
+ test('createStablecoin: only required params', async () => {
+ const responsePromise = client.payments.createStablecoin({
+ amount: 1588,
+ blockchain_recipient_token: '1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9',
+ financial_account_token: '35b0c466-a3e3-519a-9549-ead6a6a2277d',
+ type: 'PAYMENT',
+ });
+ 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);
+ });
+
+ test('createStablecoin: required and optional params', async () => {
+ const response = await client.payments.createStablecoin({
+ amount: 1588,
+ blockchain_recipient_token: '1e3fdb71-4b52-4a30-a7a9-52c85e26a1d9',
+ financial_account_token: '35b0c466-a3e3-519a-9549-ead6a6a2277d',
+ type: 'PAYMENT',
+ token: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
+ hold: { token: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' },
+ memo: 'Vendor payout',
+ });
+ });
+
test('retry', async () => {
const responsePromise = client.payments.retry('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');
const rawResponse = await responsePromise.asResponse();
From 67bb3d0ae9522b3f4b76df53fbf43961f5bb874e Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 10 Sep 2026 17:05:24 +0000
Subject: [PATCH 05/15] feat: TRE-14349: add installment plan management
operation event types
---
.stats.yml | 4 ++--
src/resources/financial-accounts/statements/line-items.ts | 2 ++
src/resources/management-operations.ts | 4 ++++
src/resources/shared.ts | 2 ++
4 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 3bbc4737..d5cfb794 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 217
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-70147140a7b2043acf622024eb3bde9b04264f8e9a695d4c79b5ee4db1534518.yml
-openapi_spec_hash: 7a181cb1cfaaa201143bd9d04a841a2e
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-17e70cd484ec2fc2aca1243462ac8849153dbbe9b9245959ff51681b14f74024.yml
+openapi_spec_hash: cc75e169c1c5ddc9ed619de07ee94d70
config_hash: e95c2dda5d175f9316457e0a84e35dce
diff --git a/src/resources/financial-accounts/statements/line-items.ts b/src/resources/financial-accounts/statements/line-items.ts
index 8381da3e..26cd08cd 100644
--- a/src/resources/financial-accounts/statements/line-items.ts
+++ b/src/resources/financial-accounts/statements/line-items.ts
@@ -178,6 +178,8 @@ export namespace StatementLineItems {
| 'EXTERNAL_WIRE_SETTLED'
| 'FINANCIAL_AUTHORIZATION'
| 'FINANCIAL_CREDIT_AUTHORIZATION'
+ | 'INSTALLMENT_FEE'
+ | 'INSTALLMENT_FEE_REVERSAL'
| 'INTEREST'
| 'INTEREST_REVERSAL'
| 'INTERNAL_ADJUSTMENT'
diff --git a/src/resources/management-operations.ts b/src/resources/management-operations.ts
index b4ee63b2..f9056326 100644
--- a/src/resources/management-operations.ts
+++ b/src/resources/management-operations.ts
@@ -163,6 +163,8 @@ export namespace ManagementOperationTransaction {
| 'CURRENCY_CONVERSION_REVERSAL'
| 'INTEREST'
| 'INTEREST_REVERSAL'
+ | 'INSTALLMENT_FEE'
+ | 'INSTALLMENT_FEE_REVERSAL'
| 'LATE_PAYMENT'
| 'LATE_PAYMENT_REVERSAL'
| 'BILLING_ERROR'
@@ -216,6 +218,8 @@ export interface ManagementOperationCreateParams {
| 'CURRENCY_CONVERSION_REVERSAL'
| 'INTEREST'
| 'INTEREST_REVERSAL'
+ | 'INSTALLMENT_FEE'
+ | 'INSTALLMENT_FEE_REVERSAL'
| 'LATE_PAYMENT'
| 'LATE_PAYMENT_REVERSAL'
| 'BILLING_ERROR'
diff --git a/src/resources/shared.ts b/src/resources/shared.ts
index 368b4c65..7ee17f57 100644
--- a/src/resources/shared.ts
+++ b/src/resources/shared.ts
@@ -273,6 +273,8 @@ export interface FinancialEvent {
| 'EXTERNAL_WIRE_SETTLED'
| 'FINANCIAL_AUTHORIZATION'
| 'FINANCIAL_CREDIT_AUTHORIZATION'
+ | 'INSTALLMENT_FEE'
+ | 'INSTALLMENT_FEE_REVERSAL'
| 'INTEREST'
| 'INTEREST_REVERSAL'
| 'INTERNAL_ADJUSTMENT'
From 60110124c2d5033eef60f80a8a90b6f5fccae5fb Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 10 Sep 2026 17:57:58 +0000
Subject: [PATCH 06/15] feat: Add missing blockchain/stablecoin endpoints to
the spec
---
.stats.yml | 8 +--
api.md | 1 +
packages/mcp-server/src/code-tool-worker.ts | 1 +
packages/mcp-server/src/local-docs-search.ts | 51 +++++++++++++++++++
packages/mcp-server/src/methods.ts | 6 +++
src/resources/blockchain-recipients.ts | 20 ++++++++
.../blockchain-recipients.test.ts | 11 ++++
7 files changed, 94 insertions(+), 4 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index d5cfb794..a8ba0390 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 217
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-17e70cd484ec2fc2aca1243462ac8849153dbbe9b9245959ff51681b14f74024.yml
-openapi_spec_hash: cc75e169c1c5ddc9ed619de07ee94d70
-config_hash: e95c2dda5d175f9316457e0a84e35dce
+configured_endpoints: 218
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-c4c2ee9eddaa18ab29ef2d881e7c373d214d167b3eb7a74559f862ce36e95f74.yml
+openapi_spec_hash: 3b1897cb075e1f19e2ce33e95781656a
+config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/api.md b/api.md
index 5c54a2ce..173a0700 100644
--- a/api.md
+++ b/api.md
@@ -638,6 +638,7 @@ Types:
Methods:
- client.blockchainRecipients.create({ ...params }) -> BlockchainRecipient
+- client.blockchainRecipients.retrieve(blockchainRecipientToken) -> BlockchainRecipient
# Payments
diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts
index b6055793..c1925a1b 100644
--- a/packages/mcp-server/src/code-tool-worker.ts
+++ b/packages/mcp-server/src/code-tool-worker.ts
@@ -269,6 +269,7 @@ const fuse = new Fuse(
'client.externalBankAccounts.update',
'client.externalBankAccounts.microDeposits.create',
'client.blockchainRecipients.create',
+ 'client.blockchainRecipients.retrieve',
'client.payments.create',
'client.payments.createStablecoin',
'client.payments.list',
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index b7f36f7e..f47a3763 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -8534,6 +8534,57 @@ const EMBEDDED_METHODS: MethodEntry[] = [
},
},
},
+ {
+ name: 'retrieve',
+ endpoint: '/v1/blockchain_recipients/{blockchain_recipient_token}',
+ httpMethod: 'get',
+ summary: 'Get blockchain recipient',
+ description:
+ 'Get a blockchain recipient by token\n\nUse this to poll the `verification_state` after registering an address: a recipient cannot receive\na payout until screening completes and moves it out of `PENDING`\n',
+ stainlessPath: '(resource) blockchain_recipients > (method) retrieve',
+ qualified: 'client.blockchainRecipients.retrieve',
+ params: ['blockchain_recipient_token: string;'],
+ response:
+ "{ token: string; account_token: string; address_tag: string; chain: string; created: string; external_id: string; name: string; owner: string; owner_type: 'INDIVIDUAL' | 'BUSINESS'; program_id: string; state: 'ENABLED' | 'CLOSED' | 'PAUSED'; updated: string; verification_state: 'PENDING' | 'ENABLED' | 'FAILED_VERIFICATION' | 'INSUFFICIENT_FUNDS'; }",
+ markdown:
+ "## retrieve\n\n`client.blockchainRecipients.retrieve(blockchain_recipient_token: string): { token: string; account_token: string; address_tag: string; chain: string; created: string; external_id: string; name: string; owner: string; owner_type: owner_type; program_id: string; state: 'ENABLED' | 'CLOSED' | 'PAUSED'; updated: string; verification_state: 'PENDING' | 'ENABLED' | 'FAILED_VERIFICATION' | 'INSUFFICIENT_FUNDS'; }`\n\n**get** `/v1/blockchain_recipients/{blockchain_recipient_token}`\n\nGet a blockchain recipient by token\n\nUse this to poll the `verification_state` after registering an address: a recipient cannot receive\na payout until screening completes and moves it out of `PENDING`\n\n\n### Parameters\n\n- `blockchain_recipient_token: string`\n\n### Returns\n\n- `{ token: string; account_token: string; address_tag: string; chain: string; created: string; external_id: string; name: string; owner: string; owner_type: 'INDIVIDUAL' | 'BUSINESS'; program_id: string; state: 'ENABLED' | 'CLOSED' | 'PAUSED'; updated: string; verification_state: 'PENDING' | 'ENABLED' | 'FAILED_VERIFICATION' | 'INSUFFICIENT_FUNDS'; }`\n\n - `token: string`\n - `account_token: string`\n - `address_tag: string`\n - `chain: string`\n - `created: string`\n - `external_id: string`\n - `name: string`\n - `owner: string`\n - `owner_type: 'INDIVIDUAL' | 'BUSINESS'`\n - `program_id: string`\n - `state: 'ENABLED' | 'CLOSED' | 'PAUSED'`\n - `updated: string`\n - `verification_state: 'PENDING' | 'ENABLED' | 'FAILED_VERIFICATION' | 'INSUFFICIENT_FUNDS'`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst blockchainRecipient = await client.blockchainRecipients.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(blockchainRecipient);\n```",
+ perLanguage: {
+ typescript: {
+ method: 'client.blockchainRecipients.retrieve',
+ example:
+ "import Lithic from 'lithic';\n\nconst client = new Lithic({\n apiKey: process.env['LITHIC_API_KEY'], // This is the default and can be omitted\n});\n\nconst blockchainRecipient = await client.blockchainRecipients.retrieve(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(blockchainRecipient.external_id);",
+ },
+ python: {
+ method: 'blockchain_recipients.retrieve',
+ example:
+ 'import os\nfrom lithic import Lithic\n\nclient = Lithic(\n api_key=os.environ.get("LITHIC_API_KEY"), # This is the default and can be omitted\n)\nblockchain_recipient = client.blockchain_recipients.retrieve(\n "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",\n)\nprint(blockchain_recipient.external_id)',
+ },
+ java: {
+ method: 'blockchainRecipients().retrieve',
+ example:
+ 'package com.lithic.api.example;\n\nimport com.lithic.api.client.LithicClient;\nimport com.lithic.api.client.okhttp.LithicOkHttpClient;\nimport com.lithic.api.models.BlockchainRecipient;\nimport com.lithic.api.models.BlockchainRecipientRetrieveParams;\n\npublic final class Main {\n private Main() {}\n\n public static void main(String[] args) {\n LithicClient client = LithicOkHttpClient.fromEnv();\n\n BlockchainRecipient blockchainRecipient = client.blockchainRecipients().retrieve("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e");\n }\n}',
+ },
+ kotlin: {
+ method: 'blockchainRecipients().retrieve',
+ example:
+ 'package com.lithic.api.example\n\nimport com.lithic.api.client.LithicClient\nimport com.lithic.api.client.okhttp.LithicOkHttpClient\nimport com.lithic.api.models.BlockchainRecipient\nimport com.lithic.api.models.BlockchainRecipientRetrieveParams\n\nfun main() {\n val client: LithicClient = LithicOkHttpClient.fromEnv()\n\n val blockchainRecipient: BlockchainRecipient = client.blockchainRecipients().retrieve("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")\n}',
+ },
+ go: {
+ method: 'client.BlockchainRecipients.Get',
+ example:
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/lithic-com/lithic-go"\n\t"github.com/lithic-com/lithic-go/option"\n)\n\nfunc main() {\n\tclient := lithic.NewClient(\n\t\toption.WithAPIKey("My Lithic API Key"),\n\t)\n\tblockchainRecipient, err := client.BlockchainRecipients.Get(context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", blockchainRecipient.ExternalID)\n}\n',
+ },
+ ruby: {
+ method: 'blockchain_recipients.retrieve',
+ example:
+ 'require "lithic"\n\nlithic = Lithic::Client.new(\n api_key: "My Lithic API Key",\n environment: "sandbox" # defaults to "production"\n)\n\nblockchain_recipient = lithic.blockchain_recipients.retrieve("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")\n\nputs(blockchain_recipient)',
+ },
+ http: {
+ example:
+ 'curl https://api.lithic.com/v1/blockchain_recipients/$BLOCKCHAIN_RECIPIENT_TOKEN \\\n -H "Authorization: $LITHIC_API_KEY"',
+ },
+ },
+ },
{
name: 'list',
endpoint: '/v1/payments',
diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts
index 24c44f9f..b5ec1391 100644
--- a/packages/mcp-server/src/methods.ts
+++ b/packages/mcp-server/src/methods.ts
@@ -977,6 +977,12 @@ export const sdkMethods: SdkMethod[] = [
httpMethod: 'post',
httpPath: '/v1/blockchain_recipients',
},
+ {
+ clientCallName: 'client.blockchainRecipients.retrieve',
+ fullyQualifiedName: 'blockchainRecipients.retrieve',
+ httpMethod: 'get',
+ httpPath: '/v1/blockchain_recipients/{blockchain_recipient_token}',
+ },
{
clientCallName: 'client.payments.create',
fullyQualifiedName: 'payments.create',
diff --git a/src/resources/blockchain-recipients.ts b/src/resources/blockchain-recipients.ts
index 0626b789..5d0da76f 100644
--- a/src/resources/blockchain-recipients.ts
+++ b/src/resources/blockchain-recipients.ts
@@ -4,6 +4,7 @@ import { APIResource } from '../core/resource';
import * as ExternalBankAccountsAPI from './external-bank-accounts/external-bank-accounts';
import { APIPromise } from '../core/api-promise';
import { RequestOptions } from '../internal/request-options';
+import { path } from '../internal/utils/path';
export class BlockchainRecipients extends APIResource {
/**
@@ -31,6 +32,25 @@ export class BlockchainRecipients extends APIResource {
create(body: BlockchainRecipientCreateParams, options?: RequestOptions): APIPromise {
return this._client.post('/v1/blockchain_recipients', { body, ...options });
}
+
+ /**
+ * Get a blockchain recipient by token
+ *
+ * Use this to poll the `verification_state` after registering an address: a
+ * recipient cannot receive a payout until screening completes and moves it out of
+ * `PENDING`
+ *
+ * @example
+ * ```ts
+ * const blockchainRecipient =
+ * await client.blockchainRecipients.retrieve(
+ * '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
+ * );
+ * ```
+ */
+ retrieve(blockchainRecipientToken: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/v1/blockchain_recipients/${blockchainRecipientToken}`, options);
+ }
}
export interface BlockchainRecipient {
diff --git a/tests/api-resources/blockchain-recipients.test.ts b/tests/api-resources/blockchain-recipients.test.ts
index d1532f41..67a2710d 100644
--- a/tests/api-resources/blockchain-recipients.test.ts
+++ b/tests/api-resources/blockchain-recipients.test.ts
@@ -36,4 +36,15 @@ describe('resource blockchainRecipients', () => {
name: 'Cold wallet',
});
});
+
+ test('retrieve', async () => {
+ const responsePromise = client.blockchainRecipients.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');
+ 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);
+ });
});
From e174e1b4fa580e4b93f4a91384a3a771a474506b Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 11 Sep 2026 15:28:58 +0000
Subject: [PATCH 07/15] feat(api): add card.pin_updated webhook event
---
.stats.yml | 4 ++--
api.md | 1 +
src/client.ts | 2 ++
src/resources/events/events.ts | 5 +++++
src/resources/events/subscriptions.ts | 3 +++
src/resources/index.ts | 1 +
src/resources/webhooks.ts | 32 +++++++++++++++++++++++++++
7 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index a8ba0390..848bba66 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-c4c2ee9eddaa18ab29ef2d881e7c373d214d167b3eb7a74559f862ce36e95f74.yml
-openapi_spec_hash: 3b1897cb075e1f19e2ce33e95781656a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-6acbf033ded2c03ed5d5c64b6bea9f3250323bf7879a11e9c545aa30e65b3cca.yml
+openapi_spec_hash: c6007083223ccff12c5c15bc9e531b41
config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/api.md b/api.md
index 173a0700..0e3f3758 100644
--- a/api.md
+++ b/api.md
@@ -909,6 +909,7 @@ Types:
- BookTransferTransactionUpdatedWebhookEvent
- CardCreatedWebhookEvent
- CardConvertedWebhookEvent
+- CardPinUpdatedWebhookEvent
- CardRenewedWebhookEvent
- CardReissuedWebhookEvent
- CardShippedWebhookEvent
diff --git a/src/client.ts b/src/client.ts
index a5ac96ea..8e058fb8 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -211,6 +211,7 @@ import {
CardAuthorizationChallengeWebhookEvent,
CardConvertedWebhookEvent,
CardCreatedWebhookEvent,
+ CardPinUpdatedWebhookEvent,
CardReissuedWebhookEvent,
CardRenewedWebhookEvent,
CardShippedWebhookEvent,
@@ -1625,6 +1626,7 @@ export declare namespace Lithic {
type BookTransferTransactionUpdatedWebhookEvent as BookTransferTransactionUpdatedWebhookEvent,
type CardCreatedWebhookEvent as CardCreatedWebhookEvent,
type CardConvertedWebhookEvent as CardConvertedWebhookEvent,
+ type CardPinUpdatedWebhookEvent as CardPinUpdatedWebhookEvent,
type CardRenewedWebhookEvent as CardRenewedWebhookEvent,
type CardReissuedWebhookEvent as CardReissuedWebhookEvent,
type CardShippedWebhookEvent as CardShippedWebhookEvent,
diff --git a/src/resources/events/events.ts b/src/resources/events/events.ts
index d6d9567a..675bcf48 100644
--- a/src/resources/events/events.ts
+++ b/src/resources/events/events.ts
@@ -123,6 +123,8 @@ export interface Event {
* - card.converted: Occurs when a card is converted from virtual to physical
* cards.
* - card.created: Occurs when a new card is created.
+ * - card.pin_updated: Occurs when a card's PIN is set, changed, unblocked, or
+ * blocked due to excessive incorrect PIN attempts.
* - card.reissued: Occurs when a card is reissued.
* - card.renewed: Occurs when a card is renewed.
* - card.shipped: Occurs when a card is shipped.
@@ -240,6 +242,7 @@ export interface Event {
| 'card_transaction.updated'
| 'card.converted'
| 'card.created'
+ | 'card.pin_updated'
| 'card.reissued'
| 'card.renewed'
| 'card.shipped'
@@ -327,6 +330,7 @@ export interface EventSubscription {
| 'card_transaction.updated'
| 'card.converted'
| 'card.created'
+ | 'card.pin_updated'
| 'card.reissued'
| 'card.renewed'
| 'card.shipped'
@@ -452,6 +456,7 @@ export interface EventListParams extends CursorPageParams {
| 'card_transaction.updated'
| 'card.converted'
| 'card.created'
+ | 'card.pin_updated'
| 'card.reissued'
| 'card.renewed'
| 'card.shipped'
diff --git a/src/resources/events/subscriptions.ts b/src/resources/events/subscriptions.ts
index 3cd8b991..9e894002 100644
--- a/src/resources/events/subscriptions.ts
+++ b/src/resources/events/subscriptions.ts
@@ -182,6 +182,7 @@ export interface SubscriptionCreateParams {
| 'card_transaction.updated'
| 'card.converted'
| 'card.created'
+ | 'card.pin_updated'
| 'card.reissued'
| 'card.renewed'
| 'card.shipped'
@@ -267,6 +268,7 @@ export interface SubscriptionUpdateParams {
| 'card_transaction.updated'
| 'card.converted'
| 'card.created'
+ | 'card.pin_updated'
| 'card.reissued'
| 'card.renewed'
| 'card.shipped'
@@ -382,6 +384,7 @@ export interface SubscriptionSendSimulatedExampleParams {
| 'card_transaction.updated'
| 'card.converted'
| 'card.created'
+ | 'card.pin_updated'
| 'card.reissued'
| 'card.renewed'
| 'card.shipped'
diff --git a/src/resources/index.ts b/src/resources/index.ts
index fff0d02c..d477a077 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -322,6 +322,7 @@ export {
type BookTransferTransactionUpdatedWebhookEvent,
type CardCreatedWebhookEvent,
type CardConvertedWebhookEvent,
+ type CardPinUpdatedWebhookEvent,
type CardRenewedWebhookEvent,
type CardReissuedWebhookEvent,
type CardShippedWebhookEvent,
diff --git a/src/resources/webhooks.ts b/src/resources/webhooks.ts
index 0bd104ef..77c0b800 100644
--- a/src/resources/webhooks.ts
+++ b/src/resources/webhooks.ts
@@ -823,6 +823,36 @@ export interface CardConvertedWebhookEvent {
event_type: 'card.converted';
}
+export interface CardPinUpdatedWebhookEvent {
+ /**
+ * The token of the card whose PIN or PIN status was updated
+ */
+ card_token: string;
+
+ /**
+ * The type of event that occurred.
+ */
+ event_type: 'card.pin_updated';
+
+ /**
+ * The card's PIN status after the update
+ */
+ pin_status: 'OK' | 'BLOCKED';
+
+ /**
+ * The reason for the PIN update:
+ *
+ * - `PIN_SET` - The PIN was set for the first time; `pin_status` is `OK`
+ * - `PIN_CHANGED` - The PIN was changed, including when changing a blocked PIN;
+ * `pin_status` is `OK`
+ * - `PIN_UNBLOCKED` - The PIN was unblocked without changing it; `pin_status` is
+ * `OK`
+ * - `EXCESSIVE_PIN_ATTEMPTS` - The PIN was blocked due to excessive incorrect PIN
+ * attempts; `pin_status` is `BLOCKED`
+ */
+ status_reason: 'PIN_SET' | 'PIN_CHANGED' | 'PIN_UNBLOCKED' | 'EXCESSIVE_PIN_ATTEMPTS';
+}
+
export interface CardRenewedWebhookEvent {
/**
* The type of event that occurred.
@@ -2425,6 +2455,7 @@ export type ParsedWebhookEvent =
| BookTransferTransactionUpdatedWebhookEvent
| CardCreatedWebhookEvent
| CardConvertedWebhookEvent
+ | CardPinUpdatedWebhookEvent
| CardRenewedWebhookEvent
| CardReissuedWebhookEvent
| CardShippedWebhookEvent
@@ -2913,6 +2944,7 @@ export declare namespace Webhooks {
type BookTransferTransactionUpdatedWebhookEvent as BookTransferTransactionUpdatedWebhookEvent,
type CardCreatedWebhookEvent as CardCreatedWebhookEvent,
type CardConvertedWebhookEvent as CardConvertedWebhookEvent,
+ type CardPinUpdatedWebhookEvent as CardPinUpdatedWebhookEvent,
type CardRenewedWebhookEvent as CardRenewedWebhookEvent,
type CardReissuedWebhookEvent as CardReissuedWebhookEvent,
type CardShippedWebhookEvent as CardShippedWebhookEvent,
From 9872235a163047bd300ed1222ec79e2fcc9a1fc1 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 11 Sep 2026 17:41:43 +0000
Subject: [PATCH 08/15] feat(api): add psd2_context field to
threeDS.authentication response
---
.stats.yml | 4 +-
packages/mcp-server/src/local-docs-search.ts | 4 +-
src/resources/three-ds/three-ds.ts | 60 ++++++++++++++++++++
3 files changed, 64 insertions(+), 4 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 848bba66..36ae0494 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-6acbf033ded2c03ed5d5c64b6bea9f3250323bf7879a11e9c545aa30e65b3cca.yml
-openapi_spec_hash: c6007083223ccff12c5c15bc9e531b41
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-e1085922e2d7ee4ce3122f1d9dfe675877f5551a591630592cfea38bd6fea9ed.yml
+openapi_spec_hash: e9ca63bde70f9e3953e0a135e7daf185
config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index f47a3763..363eb9ca 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -9148,9 +9148,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
qualified: 'client.threeDS.authentication.retrieve',
params: ['three_ds_authentication_token: string;'],
response:
- "{ token: string; account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'; authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'; card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'; card_token: string; cardholder: object; channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'; created: string; merchant: object; message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'; three_ds_requestor_challenge_indicator: string; additional_data?: object; app?: object; authentication_request_type?: string; browser?: object; challenge_metadata?: object; challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'; decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'; three_ri_request_type?: string; transaction?: object; }",
+ "{ token: string; account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'; authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'; card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'; card_token: string; cardholder: object; channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'; created: string; merchant: object; message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'; three_ds_requestor_challenge_indicator: string; additional_data?: object; app?: object; authentication_request_type?: string; browser?: object; challenge_metadata?: object; challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'; decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'; psd2_context?: object; three_ri_request_type?: string; transaction?: object; }",
markdown:
- "## retrieve\n\n`client.threeDS.authentication.retrieve(three_ds_authentication_token: string): { token: string; account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'; authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'; card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'; card_token: string; cardholder: object; channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'; created: string; merchant: object; message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'; three_ds_requestor_challenge_indicator: string; additional_data?: object; app?: object; authentication_request_type?: string; browser?: object; challenge_metadata?: object; challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'; decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'; three_ri_request_type?: string; transaction?: object; }`\n\n**get** `/v1/three_ds_authentication/{three_ds_authentication_token}`\n\nGet 3DS Authentication by token\n\n### Parameters\n\n- `three_ds_authentication_token: string`\n\n### Returns\n\n- `{ token: string; account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'; authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'; card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'; card_token: string; cardholder: { address_match?: boolean; address_on_file_match?: 'MATCH' | 'MATCH_ADDRESS_ONLY' | 'MATCH_ZIP_ONLY' | 'MISMATCH' | 'NOT_PRESENT'; billing_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; email?: string; name?: string; phone_number_home?: string; phone_number_mobile?: string; phone_number_work?: string; shipping_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; }; channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'; created: string; merchant: { risk_indicator: { delivery_email_address?: string; delivery_time_frame?: 'ELECTRONIC_DELIVERY' | 'OVERNIGHT_SHIPPING' | 'SAME_DAY_SHIPPING' | 'TWO_DAY_OR_MORE_SHIPPING'; gift_card_amount?: number; gift_card_count?: number; gift_card_currency?: string; order_availability?: 'FUTURE_AVAILABILITY' | 'MERCHANDISE_AVAILABLE'; pre_order_available_date?: string; reorder_items?: 'FIRST_TIME_ORDERED' | 'REORDERED'; shipping_method?: string; }; id?: string; country?: string; mcc?: string; name?: string; }; message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'; three_ds_requestor_challenge_indicator: string; additional_data?: { network_decision?: 'LOW_RISK' | 'NOT_LOW_RISK'; network_risk_score?: number; }; app?: { device?: string; device_info?: string; ip?: string; latitude?: number; locale?: string; longitude?: number; os?: string; platform?: string; screen_height?: number; screen_width?: number; time_zone?: string; }; authentication_request_type?: string; browser?: { accept_header?: string; ip?: string; java_enabled?: boolean; javascript_enabled?: boolean; language?: string; time_zone?: string; user_agent?: string; }; challenge_metadata?: { method_type: 'SMS_OTP' | 'OUT_OF_BAND'; status: string; phone_number?: string; }; challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'; decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'; three_ri_request_type?: string; transaction?: { amount: number; cardholder_amount: number; currency: string; currency_exponent: number; date_time: string; type: string; }; }`\n Represents a 3DS authentication\n\n - `token: string`\n - `account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'`\n - `authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'`\n - `card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'`\n - `card_token: string`\n - `cardholder: { address_match?: boolean; address_on_file_match?: 'MATCH' | 'MATCH_ADDRESS_ONLY' | 'MATCH_ZIP_ONLY' | 'MISMATCH' | 'NOT_PRESENT'; billing_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; email?: string; name?: string; phone_number_home?: string; phone_number_mobile?: string; phone_number_work?: string; shipping_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; }`\n - `channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'`\n - `created: string`\n - `merchant: { risk_indicator: { delivery_email_address?: string; delivery_time_frame?: 'ELECTRONIC_DELIVERY' | 'OVERNIGHT_SHIPPING' | 'SAME_DAY_SHIPPING' | 'TWO_DAY_OR_MORE_SHIPPING'; gift_card_amount?: number; gift_card_count?: number; gift_card_currency?: string; order_availability?: 'FUTURE_AVAILABILITY' | 'MERCHANDISE_AVAILABLE'; pre_order_available_date?: string; reorder_items?: 'FIRST_TIME_ORDERED' | 'REORDERED'; shipping_method?: string; }; id?: string; country?: string; mcc?: string; name?: string; }`\n - `message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'`\n - `three_ds_requestor_challenge_indicator: string`\n - `additional_data?: { network_decision?: 'LOW_RISK' | 'NOT_LOW_RISK'; network_risk_score?: number; }`\n - `app?: { device?: string; device_info?: string; ip?: string; latitude?: number; locale?: string; longitude?: number; os?: string; platform?: string; screen_height?: number; screen_width?: number; time_zone?: string; }`\n - `authentication_request_type?: string`\n - `browser?: { accept_header?: string; ip?: string; java_enabled?: boolean; javascript_enabled?: boolean; language?: string; time_zone?: string; user_agent?: string; }`\n - `challenge_metadata?: { method_type: 'SMS_OTP' | 'OUT_OF_BAND'; status: string; phone_number?: string; }`\n - `challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'`\n - `decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'`\n - `three_ri_request_type?: string`\n - `transaction?: { amount: number; cardholder_amount: number; currency: string; currency_exponent: number; date_time: string; type: string; }`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst threeDSAuthentication = await client.threeDS.authentication.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(threeDSAuthentication);\n```",
+ "## retrieve\n\n`client.threeDS.authentication.retrieve(three_ds_authentication_token: string): { token: string; account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'; authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'; card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'; card_token: string; cardholder: object; channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'; created: string; merchant: object; message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'; three_ds_requestor_challenge_indicator: string; additional_data?: object; app?: object; authentication_request_type?: string; browser?: object; challenge_metadata?: object; challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'; decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'; psd2_context?: object; three_ri_request_type?: string; transaction?: object; }`\n\n**get** `/v1/three_ds_authentication/{three_ds_authentication_token}`\n\nGet 3DS Authentication by token\n\n### Parameters\n\n- `three_ds_authentication_token: string`\n\n### Returns\n\n- `{ token: string; account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'; authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'; card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'; card_token: string; cardholder: { address_match?: boolean; address_on_file_match?: 'MATCH' | 'MATCH_ADDRESS_ONLY' | 'MATCH_ZIP_ONLY' | 'MISMATCH' | 'NOT_PRESENT'; billing_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; email?: string; name?: string; phone_number_home?: string; phone_number_mobile?: string; phone_number_work?: string; shipping_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; }; channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'; created: string; merchant: { risk_indicator: { delivery_email_address?: string; delivery_time_frame?: 'ELECTRONIC_DELIVERY' | 'OVERNIGHT_SHIPPING' | 'SAME_DAY_SHIPPING' | 'TWO_DAY_OR_MORE_SHIPPING'; gift_card_amount?: number; gift_card_count?: number; gift_card_currency?: string; order_availability?: 'FUTURE_AVAILABILITY' | 'MERCHANDISE_AVAILABLE'; pre_order_available_date?: string; reorder_items?: 'FIRST_TIME_ORDERED' | 'REORDERED'; shipping_method?: string; }; id?: string; country?: string; mcc?: string; name?: string; }; message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'; three_ds_requestor_challenge_indicator: string; additional_data?: { network_decision?: 'LOW_RISK' | 'NOT_LOW_RISK'; network_risk_score?: number; }; app?: { device?: string; device_info?: string; ip?: string; latitude?: number; locale?: string; longitude?: number; os?: string; platform?: string; screen_height?: number; screen_width?: number; time_zone?: string; }; authentication_request_type?: string; browser?: { accept_header?: string; ip?: string; java_enabled?: boolean; javascript_enabled?: boolean; language?: string; time_zone?: string; user_agent?: string; }; challenge_metadata?: { method_type: 'SMS_OTP' | 'OUT_OF_BAND'; status: string; phone_number?: string; }; challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'; decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'; psd2_context?: { acquirer_exemption?: string; lithic_exemption_validation?: 'ACCEPTED' | 'REJECTED' | 'NOT_VALIDATED'; }; three_ri_request_type?: string; transaction?: { amount: number; cardholder_amount: number; currency: string; currency_exponent: number; date_time: string; type: string; }; }`\n Represents a 3DS authentication\n\n - `token: string`\n - `account_type: 'CREDIT' | 'DEBIT' | 'NOT_APPLICABLE'`\n - `authentication_result: 'DECLINE' | 'SUCCESS' | 'PENDING_CHALLENGE' | 'PENDING_DECISION'`\n - `card_expiry_check: 'MATCH' | 'MISMATCH' | 'NOT_PRESENT'`\n - `card_token: string`\n - `cardholder: { address_match?: boolean; address_on_file_match?: 'MATCH' | 'MATCH_ADDRESS_ONLY' | 'MATCH_ZIP_ONLY' | 'MISMATCH' | 'NOT_PRESENT'; billing_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; email?: string; name?: string; phone_number_home?: string; phone_number_mobile?: string; phone_number_work?: string; shipping_address?: { address1?: string; address2?: string; address3?: string; city?: string; country?: string; postal_code?: string; }; }`\n - `channel: 'APP_BASED' | 'BROWSER' | 'THREE_DS_REQUESTOR_INITIATED'`\n - `created: string`\n - `merchant: { risk_indicator: { delivery_email_address?: string; delivery_time_frame?: 'ELECTRONIC_DELIVERY' | 'OVERNIGHT_SHIPPING' | 'SAME_DAY_SHIPPING' | 'TWO_DAY_OR_MORE_SHIPPING'; gift_card_amount?: number; gift_card_count?: number; gift_card_currency?: string; order_availability?: 'FUTURE_AVAILABILITY' | 'MERCHANDISE_AVAILABLE'; pre_order_available_date?: string; reorder_items?: 'FIRST_TIME_ORDERED' | 'REORDERED'; shipping_method?: string; }; id?: string; country?: string; mcc?: string; name?: string; }`\n - `message_category: 'NON_PAYMENT_AUTHENTICATION' | 'PAYMENT_AUTHENTICATION'`\n - `three_ds_requestor_challenge_indicator: string`\n - `additional_data?: { network_decision?: 'LOW_RISK' | 'NOT_LOW_RISK'; network_risk_score?: number; }`\n - `app?: { device?: string; device_info?: string; ip?: string; latitude?: number; locale?: string; longitude?: number; os?: string; platform?: string; screen_height?: number; screen_width?: number; time_zone?: string; }`\n - `authentication_request_type?: string`\n - `browser?: { accept_header?: string; ip?: string; java_enabled?: boolean; javascript_enabled?: boolean; language?: string; time_zone?: string; user_agent?: string; }`\n - `challenge_metadata?: { method_type: 'SMS_OTP' | 'OUT_OF_BAND'; status: string; phone_number?: string; }`\n - `challenge_orchestrated_by?: 'LITHIC' | 'CUSTOMER' | 'NO_CHALLENGE'`\n - `decision_made_by?: 'LITHIC_RULES' | 'LITHIC_DEFAULT' | 'CUSTOMER_RULES' | 'CUSTOMER_ENDPOINT' | 'NETWORK' | 'UNKNOWN'`\n - `psd2_context?: { acquirer_exemption?: string; lithic_exemption_validation?: 'ACCEPTED' | 'REJECTED' | 'NOT_VALIDATED'; }`\n - `three_ri_request_type?: string`\n - `transaction?: { amount: number; cardholder_amount: number; currency: string; currency_exponent: number; date_time: string; type: string; }`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst threeDSAuthentication = await client.threeDS.authentication.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(threeDSAuthentication);\n```",
perLanguage: {
typescript: {
method: 'client.threeDS.authentication.retrieve',
diff --git a/src/resources/three-ds/three-ds.ts b/src/resources/three-ds/three-ds.ts
index 93c2c3b9..68617c85 100644
--- a/src/resources/three-ds/three-ds.ts
+++ b/src/resources/three-ds/three-ds.ts
@@ -170,6 +170,13 @@ export interface ThreeDSAuthentication {
| 'UNKNOWN'
| null;
+ /**
+ * PSD2/SCA context for EEA and UK transactions. Present when Lithic determines the
+ * transaction is in scope for PSD2 Strong Customer Authentication. Absent for
+ * out-of-scope transactions.
+ */
+ psd2_context?: ThreeDSAuthentication.Psd2Context | null;
+
/**
* Type of 3DS Requestor Initiated (3RI) request — i.e., a 3DS authentication that
* takes place at the initiation of the merchant rather than the cardholder. The
@@ -632,6 +639,59 @@ export namespace ThreeDSAuthentication {
phone_number?: string | null;
}
+ /**
+ * PSD2/SCA context for EEA and UK transactions. Present when Lithic determines the
+ * transaction is in scope for PSD2 Strong Customer Authentication. Absent for
+ * out-of-scope transactions.
+ */
+ export interface Psd2Context {
+ /**
+ * SCA exemption declared by the acquirer in the 3DS authentication request.
+ *
+ * - `NONE` - No exemption claimed
+ * - `TRANSACTION_RISK_ANALYSIS` - Transaction Risk Analysis (TRA) exemption;
+ * acquirer asserts low fraud risk
+ * - `LOW_VALUE` - Low-value payment exemption; transaction is below the EUR 30
+ * threshold
+ * - `RECURRING_PAYMENT` - Recurring payment with a fixed amount to the same payee
+ * - `MERCHANT_INITIATED_TRANSACTION` - Merchant-initiated transaction (MIT);
+ * cardholder not present
+ * - `TRUSTED_BENEFICIARY` - Trusted beneficiary; merchant is on cardholder's
+ * whitelist
+ * - `STRONG_CUSTOMER_AUTHENTICATION_DELEGATION` - SCA already performed by a
+ * delegated third-party authenticator
+ * - `SECURE_CORPORATE_PAYMENT` - Secure corporate payment using a dedicated
+ * corporate card or process
+ * - `AUTHENTICATION_OUTAGE_EXCEPTION` - Authentication outage exception;
+ * scheme-level fallback during ACS downtime
+ * - `BUNDLED` - Mastercard only; bundled exemption code where the exact exemption
+ * type cannot be distinguished
+ */
+ acquirer_exemption?:
+ | 'NONE'
+ | 'TRANSACTION_RISK_ANALYSIS'
+ | 'LOW_VALUE'
+ | 'RECURRING_PAYMENT'
+ | 'MERCHANT_INITIATED_TRANSACTION'
+ | 'TRUSTED_BENEFICIARY'
+ | 'STRONG_CUSTOMER_AUTHENTICATION_DELEGATION'
+ | 'SECURE_CORPORATE_PAYMENT'
+ | 'AUTHENTICATION_OUTAGE_EXCEPTION'
+ | 'BUNDLED';
+
+ /**
+ * Lithic's validation of the acquirer-declared exemption. Absent when no acquirer
+ * exemption was declared.
+ *
+ * - `ACCEPTED` - Lithic signals support the acquirer's claim
+ * - `REJECTED` - Lithic signals contradict the claim, or a required signal is
+ * missing
+ * - `NOT_VALIDATED` - Exemption was declared but Lithic has no basis to evaluate
+ * it; treated as `REJECTED` for challenge purposes
+ */
+ lithic_exemption_validation?: 'ACCEPTED' | 'REJECTED' | 'NOT_VALIDATED';
+ }
+
/**
* Object containing data about the e-commerce transaction for which the merchant
* is requesting authentication.
From fa0ae4c9d0d466dc66ee5fe7bc5bc3174db1d4e0 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 15 Sep 2026 17:59:56 +0000
Subject: [PATCH 09/15] feat: [CARDS-5174] Add reiusse/renew 409 error
---
.stats.yml | 4 ++--
packages/mcp-server/src/local-docs-search.ts | 8 ++++----
src/resources/cards/cards.ts | 6 ++++--
yarn.lock | 6 +++---
4 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 36ae0494..c5508542 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-e1085922e2d7ee4ce3122f1d9dfe675877f5551a591630592cfea38bd6fea9ed.yml
-openapi_spec_hash: e9ca63bde70f9e3953e0a135e7daf185
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-d25e38eb235b2a76fb0920a6316f134eeb541476224cf9d2b8bf7e899d06f9f4.yml
+openapi_spec_hash: 7b64684e889ae161a1354dc34f3499dd
config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index 363eb9ca..78c5f3c0 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -3541,7 +3541,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
httpMethod: 'post',
summary: 'Reissue physical card',
description:
- 'Initiate print and shipment of a duplicate physical card (e.g. card is physically damaged). The PAN, expiry, and CVC2 will remain the same and the original card can continue to be used until the new card is activated.\nOnly applies to cards of type `PHYSICAL`. A card can be reissued or renewed a total of 8 times.',
+ 'Initiate print and shipment of a duplicate physical card (e.g. card is physically damaged). The PAN, expiry, and CVC2 will remain the same and the original card can continue to be used until the new card is activated.\nOnly applies to cards of type `PHYSICAL`. A card can be reissued or renewed a total of 8 times.\nReturns `409` if the card is still ongoing manufacturing when using Thales as a manufacturer.',
stainlessPath: '(resource) cards > (method) reissue',
qualified: 'client.cards.reissue',
params: [
@@ -3554,7 +3554,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
response:
"{ token: string; account_token: string; card_program_token: string; created: string; funding: { token: string; created: string; last_four: string; state: 'DELETED' | 'ENABLED' | 'PENDING'; type: 'DEPOSITORY_CHECKING' | 'DEPOSITORY_SAVINGS'; account_name?: string; nickname?: string; }; last_four: string; pin_status: 'OK' | 'BLOCKED' | 'NOT_SET'; spend_limit: number; spend_limit_duration: 'ANNUALLY' | 'FOREVER' | 'MONTHLY' | 'TRANSACTION'; state: 'CLOSED' | 'OPEN' | 'PAUSED' | 'PENDING_ACTIVATION' | 'PENDING_FULFILLMENT'; type: 'MERCHANT_LOCKED' | 'PHYSICAL' | 'SINGLE_USE' | 'VIRTUAL' | 'UNLOCKED' | 'DIGITAL_WALLET'; auth_rule_tokens?: string[]; bulk_order_token?: string; cardholder_currency?: string; comment?: string; digital_card_art_token?: string; exp_month?: string; exp_year?: string; hostname?: string; memo?: string; network_program_token?: string; pending_commands?: string[]; product_id?: string; replacement_for?: string; substatus?: string; }",
markdown:
- "## reissue\n\n`client.cards.reissue(card_token: string, carrier?: { qr_code_url?: string; }, product_id?: string, shipping_address?: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }, shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'): object`\n\n**post** `/v1/cards/{card_token}/reissue`\n\nInitiate print and shipment of a duplicate physical card (e.g. card is physically damaged). The PAN, expiry, and CVC2 will remain the same and the original card can continue to be used until the new card is activated.\nOnly applies to cards of type `PHYSICAL`. A card can be reissued or renewed a total of 8 times.\n\n### Parameters\n\n- `card_token: string`\n\n- `carrier?: { qr_code_url?: string; }`\n If omitted, the previous carrier will be used.\n - `qr_code_url?: string`\n QR code URL to display on the card carrier. The `qr_code_url` field requires your domain to be allowlisted by Lithic before use. Contact Support to configure your QR code domain\n\n- `product_id?: string`\n Specifies the configuration (e.g. physical card art) that the card should be manufactured with, and only applies to cards of type `PHYSICAL`. This must be configured with Lithic before use.\n\n\n- `shipping_address?: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }`\n If omitted, the previous shipping address will be used.\n - `address1: string`\n Valid USPS routable address.\n - `city: string`\n City\n - `country: string`\n Uppercase ISO 3166-1 alpha-3 three character abbreviation.\n - `first_name: string`\n Customer's first name. This will be the first name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `last_name: string`\n Customer's surname (family name). This will be the last name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `postal_code: string`\n Postal code (formerly zipcode). For US addresses, either five-digit postal code or nine-digit postal code (ZIP+4) using the format 12345-1234.\n - `state: string`\n Uppercase ISO 3166-2 two character abbreviation for US and CA. Optional with a limit of 24 characters for other countries.\n - `address2?: string`\n Unit number (if applicable).\n - `email?: string`\n Email address to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n - `line2_text?: string`\n Text to be printed on line two of the physical card. Use of this field requires additional permissions.\n - `phone_number?: string`\n Cardholder's phone number in E.164 format to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n\n- `shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'`\n Shipping method for the card. Only applies to cards of type PHYSICAL.\nUse of options besides `STANDARD` require additional permissions.\n\n* `STANDARD` - USPS regular mail or similar international option, with no tracking\n* `STANDARD_WITH_TRACKING` - USPS regular mail or similar international option, with tracking\n* `PRIORITY` - USPS Priority, 1-3 day shipping, with tracking\n* `EXPRESS` - FedEx or UPS depending on card manufacturer, Express, 3-day shipping, with tracking\n* `2_DAY` - FedEx or UPS depending on card manufacturer, 2-day shipping, with tracking\n* `EXPEDITED` - FedEx or UPS depending on card manufacturer, Standard Overnight or similar international option, with tracking\n* `BULK` - Card will be shipped as part of a bulk fulfillment order. The shipping method and timeline are inherited from the parent bulk order.\n\n### Returns\n\n- `{ token: string; account_token: string; card_program_token: string; created: string; funding: { token: string; created: string; last_four: string; state: 'DELETED' | 'ENABLED' | 'PENDING'; type: 'DEPOSITORY_CHECKING' | 'DEPOSITORY_SAVINGS'; account_name?: string; nickname?: string; }; last_four: string; pin_status: 'OK' | 'BLOCKED' | 'NOT_SET'; spend_limit: number; spend_limit_duration: 'ANNUALLY' | 'FOREVER' | 'MONTHLY' | 'TRANSACTION'; state: 'CLOSED' | 'OPEN' | 'PAUSED' | 'PENDING_ACTIVATION' | 'PENDING_FULFILLMENT'; type: 'MERCHANT_LOCKED' | 'PHYSICAL' | 'SINGLE_USE' | 'VIRTUAL' | 'UNLOCKED' | 'DIGITAL_WALLET'; auth_rule_tokens?: string[]; bulk_order_token?: string; cardholder_currency?: string; comment?: string; digital_card_art_token?: string; exp_month?: string; exp_year?: string; hostname?: string; memo?: string; network_program_token?: string; pending_commands?: string[]; product_id?: string; replacement_for?: string; substatus?: string; }`\n Card details with potentially PCI sensitive information for Enterprise customers\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst card = await client.cards.reissue('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(card);\n```",
+ "## reissue\n\n`client.cards.reissue(card_token: string, carrier?: { qr_code_url?: string; }, product_id?: string, shipping_address?: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }, shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'): object`\n\n**post** `/v1/cards/{card_token}/reissue`\n\nInitiate print and shipment of a duplicate physical card (e.g. card is physically damaged). The PAN, expiry, and CVC2 will remain the same and the original card can continue to be used until the new card is activated.\nOnly applies to cards of type `PHYSICAL`. A card can be reissued or renewed a total of 8 times.\nReturns `409` if the card is still ongoing manufacturing when using Thales as a manufacturer.\n\n### Parameters\n\n- `card_token: string`\n\n- `carrier?: { qr_code_url?: string; }`\n If omitted, the previous carrier will be used.\n - `qr_code_url?: string`\n QR code URL to display on the card carrier. The `qr_code_url` field requires your domain to be allowlisted by Lithic before use. Contact Support to configure your QR code domain\n\n- `product_id?: string`\n Specifies the configuration (e.g. physical card art) that the card should be manufactured with, and only applies to cards of type `PHYSICAL`. This must be configured with Lithic before use.\n\n\n- `shipping_address?: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }`\n If omitted, the previous shipping address will be used.\n - `address1: string`\n Valid USPS routable address.\n - `city: string`\n City\n - `country: string`\n Uppercase ISO 3166-1 alpha-3 three character abbreviation.\n - `first_name: string`\n Customer's first name. This will be the first name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `last_name: string`\n Customer's surname (family name). This will be the last name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `postal_code: string`\n Postal code (formerly zipcode). For US addresses, either five-digit postal code or nine-digit postal code (ZIP+4) using the format 12345-1234.\n - `state: string`\n Uppercase ISO 3166-2 two character abbreviation for US and CA. Optional with a limit of 24 characters for other countries.\n - `address2?: string`\n Unit number (if applicable).\n - `email?: string`\n Email address to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n - `line2_text?: string`\n Text to be printed on line two of the physical card. Use of this field requires additional permissions.\n - `phone_number?: string`\n Cardholder's phone number in E.164 format to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n\n- `shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'`\n Shipping method for the card. Only applies to cards of type PHYSICAL.\nUse of options besides `STANDARD` require additional permissions.\n\n* `STANDARD` - USPS regular mail or similar international option, with no tracking\n* `STANDARD_WITH_TRACKING` - USPS regular mail or similar international option, with tracking\n* `PRIORITY` - USPS Priority, 1-3 day shipping, with tracking\n* `EXPRESS` - FedEx or UPS depending on card manufacturer, Express, 3-day shipping, with tracking\n* `2_DAY` - FedEx or UPS depending on card manufacturer, 2-day shipping, with tracking\n* `EXPEDITED` - FedEx or UPS depending on card manufacturer, Standard Overnight or similar international option, with tracking\n* `BULK` - Card will be shipped as part of a bulk fulfillment order. The shipping method and timeline are inherited from the parent bulk order.\n\n### Returns\n\n- `{ token: string; account_token: string; card_program_token: string; created: string; funding: { token: string; created: string; last_four: string; state: 'DELETED' | 'ENABLED' | 'PENDING'; type: 'DEPOSITORY_CHECKING' | 'DEPOSITORY_SAVINGS'; account_name?: string; nickname?: string; }; last_four: string; pin_status: 'OK' | 'BLOCKED' | 'NOT_SET'; spend_limit: number; spend_limit_duration: 'ANNUALLY' | 'FOREVER' | 'MONTHLY' | 'TRANSACTION'; state: 'CLOSED' | 'OPEN' | 'PAUSED' | 'PENDING_ACTIVATION' | 'PENDING_FULFILLMENT'; type: 'MERCHANT_LOCKED' | 'PHYSICAL' | 'SINGLE_USE' | 'VIRTUAL' | 'UNLOCKED' | 'DIGITAL_WALLET'; auth_rule_tokens?: string[]; bulk_order_token?: string; cardholder_currency?: string; comment?: string; digital_card_art_token?: string; exp_month?: string; exp_year?: string; hostname?: string; memo?: string; network_program_token?: string; pending_commands?: string[]; product_id?: string; replacement_for?: string; substatus?: string; }`\n Card details with potentially PCI sensitive information for Enterprise customers\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst card = await client.cards.reissue('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(card);\n```",
perLanguage: {
typescript: {
method: 'client.cards.reissue',
@@ -3749,7 +3749,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
httpMethod: 'post',
summary: 'Renew a card',
description:
- 'Applies to card types `PHYSICAL` and `VIRTUAL`.\nFor `PHYSICAL`, creates a new card with the same card token and PAN, but updated expiry and CVC2 code. The original card will keep working for card-present transactions until the new card is activated. For card-not-present transactions, the original card details (expiry, CVC2) will also keep working until the new card is activated.\nA `PHYSICAL` card can be reissued or renewed a total of 8 times.\nFor `VIRTUAL`, the card will retain the same card token and PAN and receive an updated expiry and CVC2 code.\n`product_id`, `shipping_method`, `shipping_address`, `carrier` are only relevant for renewing `PHYSICAL` cards.',
+ 'Applies to card types `PHYSICAL` and `VIRTUAL`.\nFor `PHYSICAL`, creates a new card with the same card token and PAN, but updated expiry and CVC2 code. The original card will keep working for card-present transactions until the new card is activated. For card-not-present transactions, the original card details (expiry, CVC2) will also keep working until the new card is activated.\nA `PHYSICAL` card can be reissued or renewed a total of 8 times.\nFor `VIRTUAL`, the card will retain the same card token and PAN and receive an updated expiry and CVC2 code.\n`product_id`, `shipping_method`, `shipping_address`, `carrier` are only relevant for renewing `PHYSICAL` cards.\nReturns `409` if the card is still ongoing manufacturing when using Thales as a manufacturer.',
stainlessPath: '(resource) cards > (method) renew',
qualified: 'client.cards.renew',
params: [
@@ -3764,7 +3764,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
response:
"{ token: string; account_token: string; card_program_token: string; created: string; funding: { token: string; created: string; last_four: string; state: 'DELETED' | 'ENABLED' | 'PENDING'; type: 'DEPOSITORY_CHECKING' | 'DEPOSITORY_SAVINGS'; account_name?: string; nickname?: string; }; last_four: string; pin_status: 'OK' | 'BLOCKED' | 'NOT_SET'; spend_limit: number; spend_limit_duration: 'ANNUALLY' | 'FOREVER' | 'MONTHLY' | 'TRANSACTION'; state: 'CLOSED' | 'OPEN' | 'PAUSED' | 'PENDING_ACTIVATION' | 'PENDING_FULFILLMENT'; type: 'MERCHANT_LOCKED' | 'PHYSICAL' | 'SINGLE_USE' | 'VIRTUAL' | 'UNLOCKED' | 'DIGITAL_WALLET'; auth_rule_tokens?: string[]; bulk_order_token?: string; cardholder_currency?: string; comment?: string; digital_card_art_token?: string; exp_month?: string; exp_year?: string; hostname?: string; memo?: string; network_program_token?: string; pending_commands?: string[]; product_id?: string; replacement_for?: string; substatus?: string; }",
markdown:
- "## renew\n\n`client.cards.renew(card_token: string, shipping_address: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }, carrier?: { qr_code_url?: string; }, exp_month?: string, exp_year?: string, product_id?: string, shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'): object`\n\n**post** `/v1/cards/{card_token}/renew`\n\nApplies to card types `PHYSICAL` and `VIRTUAL`.\nFor `PHYSICAL`, creates a new card with the same card token and PAN, but updated expiry and CVC2 code. The original card will keep working for card-present transactions until the new card is activated. For card-not-present transactions, the original card details (expiry, CVC2) will also keep working until the new card is activated.\nA `PHYSICAL` card can be reissued or renewed a total of 8 times.\nFor `VIRTUAL`, the card will retain the same card token and PAN and receive an updated expiry and CVC2 code.\n`product_id`, `shipping_method`, `shipping_address`, `carrier` are only relevant for renewing `PHYSICAL` cards.\n\n### Parameters\n\n- `card_token: string`\n\n- `shipping_address: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }`\n The shipping address this card will be sent to.\n - `address1: string`\n Valid USPS routable address.\n - `city: string`\n City\n - `country: string`\n Uppercase ISO 3166-1 alpha-3 three character abbreviation.\n - `first_name: string`\n Customer's first name. This will be the first name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `last_name: string`\n Customer's surname (family name). This will be the last name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `postal_code: string`\n Postal code (formerly zipcode). For US addresses, either five-digit postal code or nine-digit postal code (ZIP+4) using the format 12345-1234.\n - `state: string`\n Uppercase ISO 3166-2 two character abbreviation for US and CA. Optional with a limit of 24 characters for other countries.\n - `address2?: string`\n Unit number (if applicable).\n - `email?: string`\n Email address to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n - `line2_text?: string`\n Text to be printed on line two of the physical card. Use of this field requires additional permissions.\n - `phone_number?: string`\n Cardholder's phone number in E.164 format to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n\n- `carrier?: { qr_code_url?: string; }`\n If omitted, the previous carrier will be used.\n - `qr_code_url?: string`\n QR code URL to display on the card carrier. The `qr_code_url` field requires your domain to be allowlisted by Lithic before use. Contact Support to configure your QR code domain\n\n- `exp_month?: string`\n Two digit (MM) expiry month. If neither `exp_month` nor `exp_year` is provided, an expiration date five years in the future will be generated. Five years is the maximum expiration date.\n\n- `exp_year?: string`\n Four digit (yyyy) expiry year. If neither `exp_month` nor `exp_year` is provided, an expiration date five years in the future will be generated. Five years is the maximum expiration date.\n\n- `product_id?: string`\n Specifies the configuration (e.g. physical card art) that the card should be manufactured with, and only applies to cards of type `PHYSICAL`. This must be configured with Lithic before use.\n\n\n- `shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'`\n Shipping method for the card. Only applies to cards of type PHYSICAL.\nUse of options besides `STANDARD` require additional permissions.\n\n* `STANDARD` - USPS regular mail or similar international option, with no tracking\n* `STANDARD_WITH_TRACKING` - USPS regular mail or similar international option, with tracking\n* `PRIORITY` - USPS Priority, 1-3 day shipping, with tracking\n* `EXPRESS` - FedEx or UPS depending on card manufacturer, Express, 3-day shipping, with tracking\n* `2_DAY` - FedEx or UPS depending on card manufacturer, 2-day shipping, with tracking\n* `EXPEDITED` - FedEx or UPS depending on card manufacturer, Standard Overnight or similar international option, with tracking\n* `BULK` - Card will be shipped as part of a bulk fulfillment order. The shipping method and timeline are inherited from the parent bulk order.\n\n### Returns\n\n- `{ token: string; account_token: string; card_program_token: string; created: string; funding: { token: string; created: string; last_four: string; state: 'DELETED' | 'ENABLED' | 'PENDING'; type: 'DEPOSITORY_CHECKING' | 'DEPOSITORY_SAVINGS'; account_name?: string; nickname?: string; }; last_four: string; pin_status: 'OK' | 'BLOCKED' | 'NOT_SET'; spend_limit: number; spend_limit_duration: 'ANNUALLY' | 'FOREVER' | 'MONTHLY' | 'TRANSACTION'; state: 'CLOSED' | 'OPEN' | 'PAUSED' | 'PENDING_ACTIVATION' | 'PENDING_FULFILLMENT'; type: 'MERCHANT_LOCKED' | 'PHYSICAL' | 'SINGLE_USE' | 'VIRTUAL' | 'UNLOCKED' | 'DIGITAL_WALLET'; auth_rule_tokens?: string[]; bulk_order_token?: string; cardholder_currency?: string; comment?: string; digital_card_art_token?: string; exp_month?: string; exp_year?: string; hostname?: string; memo?: string; network_program_token?: string; pending_commands?: string[]; product_id?: string; replacement_for?: string; substatus?: string; }`\n Card details with potentially PCI sensitive information for Enterprise customers\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst card = await client.cards.renew('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', { shipping_address: {\n address1: '5 Broad Street',\n city: 'NEW YORK',\n country: 'USA',\n first_name: 'Janet',\n last_name: 'Yellen',\n postal_code: '10001',\n state: 'NY',\n} });\n\nconsole.log(card);\n```",
+ "## renew\n\n`client.cards.renew(card_token: string, shipping_address: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }, carrier?: { qr_code_url?: string; }, exp_month?: string, exp_year?: string, product_id?: string, shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'): object`\n\n**post** `/v1/cards/{card_token}/renew`\n\nApplies to card types `PHYSICAL` and `VIRTUAL`.\nFor `PHYSICAL`, creates a new card with the same card token and PAN, but updated expiry and CVC2 code. The original card will keep working for card-present transactions until the new card is activated. For card-not-present transactions, the original card details (expiry, CVC2) will also keep working until the new card is activated.\nA `PHYSICAL` card can be reissued or renewed a total of 8 times.\nFor `VIRTUAL`, the card will retain the same card token and PAN and receive an updated expiry and CVC2 code.\n`product_id`, `shipping_method`, `shipping_address`, `carrier` are only relevant for renewing `PHYSICAL` cards.\nReturns `409` if the card is still ongoing manufacturing when using Thales as a manufacturer.\n\n### Parameters\n\n- `card_token: string`\n\n- `shipping_address: { address1: string; city: string; country: string; first_name: string; last_name: string; postal_code: string; state: string; address2?: string; email?: string; line2_text?: string; phone_number?: string; }`\n The shipping address this card will be sent to.\n - `address1: string`\n Valid USPS routable address.\n - `city: string`\n City\n - `country: string`\n Uppercase ISO 3166-1 alpha-3 three character abbreviation.\n - `first_name: string`\n Customer's first name. This will be the first name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `last_name: string`\n Customer's surname (family name). This will be the last name printed on the physical card. The combined length of `first_name` and `last_name` may not exceed 25 characters.\n - `postal_code: string`\n Postal code (formerly zipcode). For US addresses, either five-digit postal code or nine-digit postal code (ZIP+4) using the format 12345-1234.\n - `state: string`\n Uppercase ISO 3166-2 two character abbreviation for US and CA. Optional with a limit of 24 characters for other countries.\n - `address2?: string`\n Unit number (if applicable).\n - `email?: string`\n Email address to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n - `line2_text?: string`\n Text to be printed on line two of the physical card. Use of this field requires additional permissions.\n - `phone_number?: string`\n Cardholder's phone number in E.164 format to be contacted for expedited shipping process purposes. Required if `shipping_method` is `EXPEDITED`.\n\n- `carrier?: { qr_code_url?: string; }`\n If omitted, the previous carrier will be used.\n - `qr_code_url?: string`\n QR code URL to display on the card carrier. The `qr_code_url` field requires your domain to be allowlisted by Lithic before use. Contact Support to configure your QR code domain\n\n- `exp_month?: string`\n Two digit (MM) expiry month. If neither `exp_month` nor `exp_year` is provided, an expiration date five years in the future will be generated. Five years is the maximum expiration date.\n\n- `exp_year?: string`\n Four digit (yyyy) expiry year. If neither `exp_month` nor `exp_year` is provided, an expiration date five years in the future will be generated. Five years is the maximum expiration date.\n\n- `product_id?: string`\n Specifies the configuration (e.g. physical card art) that the card should be manufactured with, and only applies to cards of type `PHYSICAL`. This must be configured with Lithic before use.\n\n\n- `shipping_method?: '2_DAY' | 'BULK' | 'EXPEDITED' | 'EXPRESS' | 'PRIORITY' | 'STANDARD' | 'STANDARD_WITH_TRACKING'`\n Shipping method for the card. Only applies to cards of type PHYSICAL.\nUse of options besides `STANDARD` require additional permissions.\n\n* `STANDARD` - USPS regular mail or similar international option, with no tracking\n* `STANDARD_WITH_TRACKING` - USPS regular mail or similar international option, with tracking\n* `PRIORITY` - USPS Priority, 1-3 day shipping, with tracking\n* `EXPRESS` - FedEx or UPS depending on card manufacturer, Express, 3-day shipping, with tracking\n* `2_DAY` - FedEx or UPS depending on card manufacturer, 2-day shipping, with tracking\n* `EXPEDITED` - FedEx or UPS depending on card manufacturer, Standard Overnight or similar international option, with tracking\n* `BULK` - Card will be shipped as part of a bulk fulfillment order. The shipping method and timeline are inherited from the parent bulk order.\n\n### Returns\n\n- `{ token: string; account_token: string; card_program_token: string; created: string; funding: { token: string; created: string; last_four: string; state: 'DELETED' | 'ENABLED' | 'PENDING'; type: 'DEPOSITORY_CHECKING' | 'DEPOSITORY_SAVINGS'; account_name?: string; nickname?: string; }; last_four: string; pin_status: 'OK' | 'BLOCKED' | 'NOT_SET'; spend_limit: number; spend_limit_duration: 'ANNUALLY' | 'FOREVER' | 'MONTHLY' | 'TRANSACTION'; state: 'CLOSED' | 'OPEN' | 'PAUSED' | 'PENDING_ACTIVATION' | 'PENDING_FULFILLMENT'; type: 'MERCHANT_LOCKED' | 'PHYSICAL' | 'SINGLE_USE' | 'VIRTUAL' | 'UNLOCKED' | 'DIGITAL_WALLET'; auth_rule_tokens?: string[]; bulk_order_token?: string; cardholder_currency?: string; comment?: string; digital_card_art_token?: string; exp_month?: string; exp_year?: string; hostname?: string; memo?: string; network_program_token?: string; pending_commands?: string[]; product_id?: string; replacement_for?: string; substatus?: string; }`\n Card details with potentially PCI sensitive information for Enterprise customers\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst card = await client.cards.renew('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', { shipping_address: {\n address1: '5 Broad Street',\n city: 'NEW YORK',\n country: 'USA',\n first_name: 'Janet',\n last_name: 'Yellen',\n postal_code: '10001',\n state: 'NY',\n} });\n\nconsole.log(card);\n```",
perLanguage: {
typescript: {
method: 'client.cards.renew',
diff --git a/src/resources/cards/cards.ts b/src/resources/cards/cards.ts
index 217dc075..0af55f55 100644
--- a/src/resources/cards/cards.ts
+++ b/src/resources/cards/cards.ts
@@ -312,7 +312,8 @@ export class Cards extends APIResource {
* physically damaged). The PAN, expiry, and CVC2 will remain the same and the
* original card can continue to be used until the new card is activated. Only
* applies to cards of type `PHYSICAL`. A card can be reissued or renewed a total
- * of 8 times.
+ * of 8 times. Returns `409` if the card is still ongoing manufacturing when using
+ * Thales as a manufacturer.
*
* @example
* ```ts
@@ -351,7 +352,8 @@ export class Cards extends APIResource {
* `PHYSICAL` card can be reissued or renewed a total of 8 times. For `VIRTUAL`,
* the card will retain the same card token and PAN and receive an updated expiry
* and CVC2 code. `product_id`, `shipping_method`, `shipping_address`, `carrier`
- * are only relevant for renewing `PHYSICAL` cards.
+ * are only relevant for renewing `PHYSICAL` cards. Returns `409` if the card is
+ * still ongoing manufacturing when using Thales as a manufacturer.
*
* @example
* ```ts
diff --git a/yarn.lock b/yarn.lock
index 4ee83286..6bd14306 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1233,9 +1233,9 @@ baseline-browser-mapping@^2.9.0:
integrity sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==
brace-expansion@^2.0.2:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.4.tgz#589dab11c0018d0366be64cd8bf12c8dbecc8326"
- integrity sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.7.tgz#14ea3836731823bb24740225ea43b941b436f9d1"
+ integrity sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==
dependencies:
balanced-match "^1.0.0"
From d40e9cd20eb0a8d1547648cb3fdec27976d6c604 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 15 Sep 2026 18:30:09 +0000
Subject: [PATCH 10/15] feat(api): add STABLECOIN_REVIEWED event type to
payment simulate action
---
.stats.yml | 4 ++--
src/resources/payments.ts | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index c5508542..50c924c0 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-d25e38eb235b2a76fb0920a6316f134eeb541476224cf9d2b8bf7e899d06f9f4.yml
-openapi_spec_hash: 7b64684e889ae161a1354dc34f3499dd
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-da0eed08089ca63f636cb174cdabe65591f65bb8a16bd5db94439834cc509044.yml
+openapi_spec_hash: 2f7de4d9c35540a1d0163b75b4c08f6d
config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/src/resources/payments.ts b/src/resources/payments.ts
index b6128ded..4e040eb0 100644
--- a/src/resources/payments.ts
+++ b/src/resources/payments.ts
@@ -935,7 +935,8 @@ export interface PaymentSimulateActionParams {
| 'ACH_RECEIPT_RELEASED_EARLY'
| 'ACH_RETURN_INITIATED'
| 'ACH_RETURN_PROCESSED'
- | 'ACH_RETURN_SETTLED';
+ | 'ACH_RETURN_SETTLED'
+ | 'STABLECOIN_REVIEWED';
/**
* Date of Death for ACH Return
From bb3cc935769cfe3c0b69728d6d83ef7e802baa97 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 15 Sep 2026 19:22:08 +0000
Subject: [PATCH 11/15] feat: AUTH-3759: Add DECLINE_SCA_REQUIRED and
SCA_REQUIRED enum entries
---
.stats.yml | 4 ++--
src/resources/auth-rules/v2/v2.ts | 2 ++
src/resources/transactions/transactions.ts | 2 ++
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 50c924c0..d986b031 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-da0eed08089ca63f636cb174cdabe65591f65bb8a16bd5db94439834cc509044.yml
-openapi_spec_hash: 2f7de4d9c35540a1d0163b75b4c08f6d
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-22e6715ab0428fcbda66e78f701a4324634ac8934106a450c50a341a4ad75a39.yml
+openapi_spec_hash: 3c728da2d5bf1544686a6f09a0e3e393
config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/src/resources/auth-rules/v2/v2.ts b/src/resources/auth-rules/v2/v2.ts
index 1c221bd2..7c1110bf 100644
--- a/src/resources/auth-rules/v2/v2.ts
+++ b/src/resources/auth-rules/v2/v2.ts
@@ -1924,6 +1924,7 @@ export namespace ReportStats {
| 'PROGRAM_SUSPENDED'
| 'PROGRAM_USAGE_RESTRICTION'
| 'REVERSAL_UNMATCHED'
+ | 'SCA_REQUIRED'
| 'SECURITY_VIOLATION'
| 'SINGLE_USE_CARD_REATTEMPTED'
| 'SUSPECTED_FRAUD'
@@ -2696,6 +2697,7 @@ export namespace V2ListResultsResponse {
| 'PROGRAM_SUSPENDED'
| 'PROGRAM_USAGE_RESTRICTION'
| 'REVERSAL_UNMATCHED'
+ | 'SCA_REQUIRED'
| 'SECURITY_VIOLATION'
| 'SINGLE_USE_CARD_REATTEMPTED'
| 'SUSPECTED_FRAUD'
diff --git a/src/resources/transactions/transactions.ts b/src/resources/transactions/transactions.ts
index 5e559aec..2c187360 100644
--- a/src/resources/transactions/transactions.ts
+++ b/src/resources/transactions/transactions.ts
@@ -804,6 +804,7 @@ export namespace Transaction {
| 'PROGRAM_SUSPENDED'
| 'PROGRAM_USAGE_RESTRICTION'
| 'REVERSAL_UNMATCHED'
+ | 'SCA_REQUIRED'
| 'SECURITY_VIOLATION'
| 'SINGLE_USE_CARD_REATTEMPTED'
| 'SUSPECTED_FRAUD'
@@ -1125,6 +1126,7 @@ export namespace Transaction {
| 'PROGRAM_SUSPENDED'
| 'PROGRAM_USAGE_RESTRICTION'
| 'REVERSAL_UNMATCHED'
+ | 'SCA_REQUIRED'
| 'SECURITY_VIOLATION'
| 'SINGLE_USE_CARD_REATTEMPTED'
| 'SUSPECTED_FRAUD'
From c2550c85089ea32157af9de5f31e3935db7c5681 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 16 Sep 2026 13:56:16 +0000
Subject: [PATCH 12/15] feat(api): add FEE/FEE_REVERSAL to
line-items/management-operations/financial events
---
.stats.yml | 4 ++--
src/resources/financial-accounts/statements/line-items.ts | 2 ++
src/resources/management-operations.ts | 8 ++++++--
src/resources/shared.ts | 2 ++
4 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index d986b031..50b5107a 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-22e6715ab0428fcbda66e78f701a4324634ac8934106a450c50a341a4ad75a39.yml
-openapi_spec_hash: 3c728da2d5bf1544686a6f09a0e3e393
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-cc426da9e5047cbcd8e764a20ea1afd35c685ebaedc87128f0a22f9f05ae1537.yml
+openapi_spec_hash: 731d6efde305387fde11ba31972f176b
config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/src/resources/financial-accounts/statements/line-items.ts b/src/resources/financial-accounts/statements/line-items.ts
index 26cd08cd..ac258569 100644
--- a/src/resources/financial-accounts/statements/line-items.ts
+++ b/src/resources/financial-accounts/statements/line-items.ts
@@ -176,6 +176,8 @@ export namespace StatementLineItems {
| 'EXTERNAL_WIRE_RELEASED'
| 'EXTERNAL_WIRE_REVERSED'
| 'EXTERNAL_WIRE_SETTLED'
+ | 'FEE'
+ | 'FEE_REVERSAL'
| 'FINANCIAL_AUTHORIZATION'
| 'FINANCIAL_CREDIT_AUTHORIZATION'
| 'INSTALLMENT_FEE'
diff --git a/src/resources/management-operations.ts b/src/resources/management-operations.ts
index f9056326..7d76d4f4 100644
--- a/src/resources/management-operations.ts
+++ b/src/resources/management-operations.ts
@@ -182,7 +182,9 @@ export namespace ManagementOperationTransaction {
| 'QUARTERLY'
| 'QUARTERLY_REVERSAL'
| 'MONTHLY'
- | 'MONTHLY_REVERSAL';
+ | 'MONTHLY_REVERSAL'
+ | 'FEE'
+ | 'FEE_REVERSAL';
subtype?: string | null;
}
@@ -237,7 +239,9 @@ export interface ManagementOperationCreateParams {
| 'QUARTERLY'
| 'QUARTERLY_REVERSAL'
| 'MONTHLY'
- | 'MONTHLY_REVERSAL';
+ | 'MONTHLY_REVERSAL'
+ | 'FEE'
+ | 'FEE_REVERSAL';
financial_account_token: string;
diff --git a/src/resources/shared.ts b/src/resources/shared.ts
index 7ee17f57..6a4da9b4 100644
--- a/src/resources/shared.ts
+++ b/src/resources/shared.ts
@@ -271,6 +271,8 @@ export interface FinancialEvent {
| 'EXTERNAL_WIRE_RELEASED'
| 'EXTERNAL_WIRE_REVERSED'
| 'EXTERNAL_WIRE_SETTLED'
+ | 'FEE'
+ | 'FEE_REVERSAL'
| 'FINANCIAL_AUTHORIZATION'
| 'FINANCIAL_CREDIT_AUTHORIZATION'
| 'INSTALLMENT_FEE'
From ad8c6d429b3868c9202c2ff7a0d00ae21376487b Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 16 Sep 2026 21:45:43 +0000
Subject: [PATCH 13/15] feat: [TRE-14464] Update /retry payments endpoint to
accept method
---
.stats.yml | 4 ++--
MIGRATION.md | 1 +
api.md | 2 +-
packages/mcp-server/src/local-docs-search.ts | 10 +++++-----
src/client.ts | 2 ++
src/resources/index.ts | 1 +
src/resources/payments.ts | 19 +++++++++++++++++--
tests/api-resources/payments.test.ts | 11 +++++++++++
8 files changed, 40 insertions(+), 10 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 50b5107a..ce934163 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-cc426da9e5047cbcd8e764a20ea1afd35c685ebaedc87128f0a22f9f05ae1537.yml
-openapi_spec_hash: 731d6efde305387fde11ba31972f176b
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-701e31821e8acdd56e8afce852fd2207ef6962cc314fdc1e9d814adf8aae8e1f.yml
+openapi_spec_hash: ddf405339b9f603c2ebc58a0a168bfbd
config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
diff --git a/MIGRATION.md b/MIGRATION.md
index 0a144080..ac2ae69f 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -146,6 +146,7 @@ client.example.list(undefined, { headers: { ... } });
- `client.externalBankAccounts.retryMicroDeposits()`
- `client.externalBankAccounts.retryPrenote()`
- `client.payments.list()`
+- `client.payments.retry()`
- `client.reports.settlement.listDetails()`
- `client.reports.settlement.networkTotals.list()`
- `client.cardPrograms.list()`
diff --git a/api.md b/api.md
index 0e3f3758..c5d4fb17 100644
--- a/api.md
+++ b/api.md
@@ -659,7 +659,7 @@ Methods:
- client.payments.retrieve(paymentToken) -> Payment
- client.payments.list({ ...params }) -> PaymentsCursorPage
- client.payments.createStablecoin({ ...params }) -> PaymentCreateStablecoinResponse
-- client.payments.retry(paymentToken) -> PaymentRetryResponse
+- client.payments.retry(paymentToken, { ...params }) -> PaymentRetryResponse
- client.payments.return(paymentToken, { ...params }) -> Payment
- client.payments.simulateAction(paymentToken, { ...params }) -> PaymentSimulateActionResponse
- client.payments.simulateReceipt({ ...params }) -> PaymentSimulateReceiptResponse
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index 78c5f3c0..93698bb8 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -8925,21 +8925,21 @@ const EMBEDDED_METHODS: MethodEntry[] = [
description: 'Retry an origination which has been returned.',
stainlessPath: '(resource) payments > (method) retry',
qualified: 'client.payments.retry',
- params: ['payment_token: string;'],
+ params: ['payment_token: string;', "method?: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY';"],
response:
"{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: object[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: object | object | object; pending_amount: number; related_account_tokens: object; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }",
markdown:
- "## retry\n\n`client.payments.retry(payment_token: string): object`\n\n**post** `/v1/payments/{payment_token}/retry`\n\nRetry an origination which has been returned.\n\n### Parameters\n\n- `payment_token: string`\n\n### Returns\n\n- `{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: wire_party_details; debtor?: wire_party_details; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }; pending_amount: number; related_account_tokens: { account_token: string; business_account_token: string; }; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n Payment transaction\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst response = await client.payments.retry('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response);\n```",
+ "## retry\n\n`client.payments.retry(payment_token: string, method?: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY'): object`\n\n**post** `/v1/payments/{payment_token}/retry`\n\nRetry an origination which has been returned.\n\n### Parameters\n\n- `payment_token: string`\n\n- `method?: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY'`\n Settlement speed to retry the payment at. Defaults to the original payment's method.\nAn `ACH_SAME_DAY` retry is rejected if the payment is for $1,000,000.00 or more, or if\nit is submitted after the same day ACH cutoff\n\n### Returns\n\n- `{ token: string; category: string; created: string; descriptor: string; direction: 'CREDIT' | 'DEBIT'; events: { token: string; amount: number; created: string; result: 'APPROVED' | 'DECLINED'; type: string; detailed_results?: string[]; external_id?: string; }[]; family: 'PAYMENT'; financial_account_token: string; method: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY' | 'WIRE' | 'STABLECOIN'; method_attributes: { sec_code: 'CCD' | 'PPD' | 'WEB' | 'TEL' | 'CIE' | 'CTX'; ach_hold_period?: number; addenda?: string; company_id?: string; override_company_name?: string; receipt_routing_number?: string; recipient_name?: string; retries?: number; return_reason_code?: string; trace_numbers?: string[]; } | { wire_message_type: string; wire_network: 'FEDWIRE' | 'SWIFT'; creditor?: wire_party_details; debtor?: wire_party_details; message_id?: string; remittance_information?: string; } | { chain: string; transaction_hash?: string; }; pending_amount: number; related_account_tokens: { account_token: string; business_account_token: string; }; result: 'APPROVED' | 'DECLINED'; settled_amount: number; source: 'LITHIC' | 'EXTERNAL' | 'CUSTOMER'; status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'REVERSED' | 'CANCELED' | 'RETURNED'; updated: string; blockchain_recipient_token?: string; currency?: string; expected_release_date?: string; external_bank_account_token?: string; tags?: object; type?: string; user_defined_id?: string; }`\n Payment transaction\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst response = await client.payments.retry('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response);\n```",
perLanguage: {
typescript: {
method: 'client.payments.retry',
example:
- "import Lithic from 'lithic';\n\nconst client = new Lithic({\n apiKey: process.env['LITHIC_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.payments.retry('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(response);",
+ "import Lithic from 'lithic';\n\nconst client = new Lithic({\n apiKey: process.env['LITHIC_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.payments.retry('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n method: 'ACH_SAME_DAY',\n});\n\nconsole.log(response);",
},
python: {
method: 'payments.retry',
example:
- 'import os\nfrom lithic import Lithic\n\nclient = Lithic(\n api_key=os.environ.get("LITHIC_API_KEY"), # This is the default and can be omitted\n)\nresponse = client.payments.retry(\n "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",\n)\nprint(response)',
+ 'import os\nfrom lithic import Lithic\n\nclient = Lithic(\n api_key=os.environ.get("LITHIC_API_KEY"), # This is the default and can be omitted\n)\nresponse = client.payments.retry(\n payment_token="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",\n method="ACH_SAME_DAY",\n)\nprint(response)',
},
java: {
method: 'payments().retry',
@@ -8954,7 +8954,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
go: {
method: 'client.Payments.Retry',
example:
- 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/lithic-com/lithic-go"\n\t"github.com/lithic-com/lithic-go/option"\n)\n\nfunc main() {\n\tclient := lithic.NewClient(\n\t\toption.WithAPIKey("My Lithic API Key"),\n\t)\n\tresponse, err := client.Payments.Retry(context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", response)\n}\n',
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/lithic-com/lithic-go"\n\t"github.com/lithic-com/lithic-go/option"\n)\n\nfunc main() {\n\tclient := lithic.NewClient(\n\t\toption.WithAPIKey("My Lithic API Key"),\n\t)\n\tresponse, err := client.Payments.Retry(\n\t\tcontext.TODO(),\n\t\t"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",\n\t\tlithic.PaymentRetryParams{\n\t\t\tMethod: lithic.F(lithic.PaymentRetryParamsMethodACHSameDay),\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", response)\n}\n',
},
ruby: {
method: 'payments.retry_',
diff --git a/src/client.ts b/src/client.ts
index 8e058fb8..bf4bd8be 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -149,6 +149,7 @@ import {
PaymentCreateStablecoinParams,
PaymentCreateStablecoinResponse,
PaymentListParams,
+ PaymentRetryParams,
PaymentRetryResponse,
PaymentReturnParams,
PaymentSimulateActionParams,
@@ -1497,6 +1498,7 @@ export declare namespace Lithic {
type PaymentCreateParams as PaymentCreateParams,
type PaymentListParams as PaymentListParams,
type PaymentCreateStablecoinParams as PaymentCreateStablecoinParams,
+ type PaymentRetryParams as PaymentRetryParams,
type PaymentReturnParams as PaymentReturnParams,
type PaymentSimulateActionParams as PaymentSimulateActionParams,
type PaymentSimulateReceiptParams as PaymentSimulateReceiptParams,
diff --git a/src/resources/index.ts b/src/resources/index.ts
index d477a077..f1f738ae 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -229,6 +229,7 @@ export {
type PaymentCreateParams,
type PaymentListParams,
type PaymentCreateStablecoinParams,
+ type PaymentRetryParams,
type PaymentReturnParams,
type PaymentSimulateActionParams,
type PaymentSimulateReceiptParams,
diff --git a/src/resources/payments.ts b/src/resources/payments.ts
index 4e040eb0..a2323ba0 100644
--- a/src/resources/payments.ts
+++ b/src/resources/payments.ts
@@ -115,11 +115,16 @@ export class Payments extends APIResource {
* ```ts
* const response = await client.payments.retry(
* '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
+ * { method: 'ACH_SAME_DAY' },
* );
* ```
*/
- retry(paymentToken: string, options?: RequestOptions): APIPromise {
- return this._client.post(path`/v1/payments/${paymentToken}/retry`, options);
+ retry(
+ paymentToken: string,
+ body: PaymentRetryParams | null | undefined = {},
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.post(path`/v1/payments/${paymentToken}/retry`, { body, ...options });
}
/**
@@ -889,6 +894,15 @@ export namespace PaymentCreateStablecoinParams {
}
}
+export interface PaymentRetryParams {
+ /**
+ * Settlement speed to retry the payment at. Defaults to the original payment's
+ * method. An `ACH_SAME_DAY` retry is rejected if the payment is for $1,000,000.00
+ * or more, or if it is submitted after the same day ACH cutoff
+ */
+ method?: 'ACH_NEXT_DAY' | 'ACH_SAME_DAY';
+}
+
export interface PaymentReturnParams {
/**
* Globally unique identifier for the financial account
@@ -1022,6 +1036,7 @@ export declare namespace Payments {
type PaymentCreateParams as PaymentCreateParams,
type PaymentListParams as PaymentListParams,
type PaymentCreateStablecoinParams as PaymentCreateStablecoinParams,
+ type PaymentRetryParams as PaymentRetryParams,
type PaymentReturnParams as PaymentReturnParams,
type PaymentSimulateActionParams as PaymentSimulateActionParams,
type PaymentSimulateReceiptParams as PaymentSimulateReceiptParams,
diff --git a/tests/api-resources/payments.test.ts b/tests/api-resources/payments.test.ts
index 2f266205..ea315350 100644
--- a/tests/api-resources/payments.test.ts
+++ b/tests/api-resources/payments.test.ts
@@ -129,6 +129,17 @@ describe('resource payments', () => {
expect(dataAndResponse.response).toBe(rawResponse);
});
+ test('retry: 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.payments.retry(
+ '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
+ { method: 'ACH_SAME_DAY' },
+ { path: '/_stainless_unknown_path' },
+ ),
+ ).rejects.toThrow(Lithic.NotFoundError);
+ });
+
test('return: only required params', async () => {
const responsePromise = client.payments.return('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
financial_account_token: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
From e0bc36190aaac85568d469b9dc0daa4f0b4cb8ee Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 17 Sep 2026 20:14:44 +0000
Subject: [PATCH 14/15] feat: [TRE-14524] Add Open to buy API spec
---
.stats.yml | 8 +-
api.md | 11 +++
packages/mcp-server/src/code-tool-worker.ts | 1 +
packages/mcp-server/src/local-docs-search.ts | 51 +++++++++++
packages/mcp-server/src/methods.ts | 6 ++
.../financial-accounts/financial-accounts.ts | 10 +++
src/resources/financial-accounts/index.ts | 1 +
.../financial-accounts/open-to-buy.ts | 84 +++++++++++++++++++
.../financial-accounts/open-to-buy.test.ts | 23 +++++
9 files changed, 191 insertions(+), 4 deletions(-)
create mode 100644 src/resources/financial-accounts/open-to-buy.ts
create mode 100644 tests/api-resources/financial-accounts/open-to-buy.test.ts
diff --git a/.stats.yml b/.stats.yml
index ce934163..c48be9d8 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 218
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-701e31821e8acdd56e8afce852fd2207ef6962cc314fdc1e9d814adf8aae8e1f.yml
-openapi_spec_hash: ddf405339b9f603c2ebc58a0a168bfbd
-config_hash: b314c3c5c82a483d1a7812b31b1d1fc4
+configured_endpoints: 219
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-18e08b593c738bb6a429fe225dac7c4bf5d161a7dbb003e495b87a21d2aff6a8.yml
+openapi_spec_hash: b6f308ea5a6d9ad9c22c14e7574d9669
+config_hash: 0cfee7faa13d28e91697e2d79c50935e
diff --git a/api.md b/api.md
index c5d4fb17..789ebcbf 100644
--- a/api.md
+++ b/api.md
@@ -440,6 +440,17 @@ Methods:
- client.financialAccounts.balances.list(financialAccountToken, { ...params }) -> FinancialAccountBalancesSinglePage
+## OpenToBuy
+
+Types:
+
+- OpenToBuy
+- OpenToBuySummary
+
+Methods:
+
+- client.financialAccounts.openToBuy.retrieve(financialAccountToken) -> OpenToBuy
+
## FinancialTransactions
Methods:
diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts
index c1925a1b..cc17560b 100644
--- a/packages/mcp-server/src/code-tool-worker.ts
+++ b/packages/mcp-server/src/code-tool-worker.ts
@@ -226,6 +226,7 @@ const fuse = new Fuse(
'client.financialAccounts.update',
'client.financialAccounts.updateStatus',
'client.financialAccounts.balances.list',
+ 'client.financialAccounts.openToBuy.retrieve',
'client.financialAccounts.financialTransactions.list',
'client.financialAccounts.financialTransactions.retrieve',
'client.financialAccounts.creditConfiguration.retrieve',
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index 93698bb8..8bb1e7bd 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -6257,6 +6257,57 @@ const EMBEDDED_METHODS: MethodEntry[] = [
},
},
},
+ {
+ name: 'retrieve',
+ endpoint: '/v1/financial_accounts/{financial_account_token}/open_to_buy',
+ httpMethod: 'get',
+ summary: 'Get open to buy',
+ description:
+ 'Get the funds available for card spend backed by a given Security Account, along with the\nbalances that amount is derived from.\n\nOpen to buy is the amount Lithic authorizes card spend against. It is not a stored balance,\nso it is recalculated on every request from the Security Account, the funds held against spend\nLithic has already paid out to the networks on your behalf, and the spend that has not yet been\ncollected. The accounts that feed the calculation depend on your program setup, so\n`summary.settled_funds` is `null` outside Commercial Charge.\n\nSupported for Commercial Charge, Dynamic Reserve, and Secured Charge programs. Returns `404`\nif `financial_account_token` is not a Security Account you own, or if your program setup does\nnot use an open to buy calculation.\n',
+ stainlessPath: '(resource) financial_accounts.open_to_buy > (method) retrieve',
+ qualified: 'client.financialAccounts.openToBuy.retrieve',
+ params: ['financial_account_token: string;'],
+ response:
+ '{ open_to_buy: number; summary: { security: number; settled_funds: number; total_outstanding_spend: number; }; }',
+ markdown:
+ "## retrieve\n\n`client.financialAccounts.openToBuy.retrieve(financial_account_token: string): { open_to_buy: number; summary: open_to_buy_summary; }`\n\n**get** `/v1/financial_accounts/{financial_account_token}/open_to_buy`\n\nGet the funds available for card spend backed by a given Security Account, along with the\nbalances that amount is derived from.\n\nOpen to buy is the amount Lithic authorizes card spend against. It is not a stored balance,\nso it is recalculated on every request from the Security Account, the funds held against spend\nLithic has already paid out to the networks on your behalf, and the spend that has not yet been\ncollected. The accounts that feed the calculation depend on your program setup, so\n`summary.settled_funds` is `null` outside Commercial Charge.\n\nSupported for Commercial Charge, Dynamic Reserve, and Secured Charge programs. Returns `404`\nif `financial_account_token` is not a Security Account you own, or if your program setup does\nnot use an open to buy calculation.\n\n\n### Parameters\n\n- `financial_account_token: string`\n\n### Returns\n\n- `{ open_to_buy: number; summary: { security: number; settled_funds: number; total_outstanding_spend: number; }; }`\n Open to Buy\n\n - `open_to_buy: number`\n - `summary: { security: number; settled_funds: number; total_outstanding_spend: number; }`\n\n### Example\n\n```typescript\nimport Lithic from 'lithic';\n\nconst client = new Lithic();\n\nconst openToBuy = await client.financialAccounts.openToBuy.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\nconsole.log(openToBuy);\n```",
+ perLanguage: {
+ typescript: {
+ method: 'client.financialAccounts.openToBuy.retrieve',
+ example:
+ "import Lithic from 'lithic';\n\nconst client = new Lithic({\n apiKey: process.env['LITHIC_API_KEY'], // This is the default and can be omitted\n});\n\nconst openToBuy = await client.financialAccounts.openToBuy.retrieve(\n '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',\n);\n\nconsole.log(openToBuy.open_to_buy);",
+ },
+ python: {
+ method: 'financial_accounts.open_to_buy.retrieve',
+ example:
+ 'import os\nfrom lithic import Lithic\n\nclient = Lithic(\n api_key=os.environ.get("LITHIC_API_KEY"), # This is the default and can be omitted\n)\nopen_to_buy = client.financial_accounts.open_to_buy.retrieve(\n "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",\n)\nprint(open_to_buy.open_to_buy)',
+ },
+ java: {
+ method: 'financialAccounts().openToBuy().retrieve',
+ example:
+ 'package com.lithic.api.example;\n\nimport com.lithic.api.client.LithicClient;\nimport com.lithic.api.client.okhttp.LithicOkHttpClient;\nimport com.lithic.api.models.FinancialAccountOpenToBuyRetrieveParams;\nimport com.lithic.api.models.OpenToBuy;\n\npublic final class Main {\n private Main() {}\n\n public static void main(String[] args) {\n LithicClient client = LithicOkHttpClient.fromEnv();\n\n OpenToBuy openToBuy = client.financialAccounts().openToBuy().retrieve("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e");\n }\n}',
+ },
+ kotlin: {
+ method: 'financialAccounts().openToBuy().retrieve',
+ example:
+ 'package com.lithic.api.example\n\nimport com.lithic.api.client.LithicClient\nimport com.lithic.api.client.okhttp.LithicOkHttpClient\nimport com.lithic.api.models.FinancialAccountOpenToBuyRetrieveParams\nimport com.lithic.api.models.OpenToBuy\n\nfun main() {\n val client: LithicClient = LithicOkHttpClient.fromEnv()\n\n val openToBuy: OpenToBuy = client.financialAccounts().openToBuy().retrieve("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")\n}',
+ },
+ go: {
+ method: 'client.FinancialAccounts.OpenToBuy.Get',
+ example:
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/lithic-com/lithic-go"\n\t"github.com/lithic-com/lithic-go/option"\n)\n\nfunc main() {\n\tclient := lithic.NewClient(\n\t\toption.WithAPIKey("My Lithic API Key"),\n\t)\n\topenToBuy, err := client.FinancialAccounts.OpenToBuy.Get(context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", openToBuy.OpenToBuy)\n}\n',
+ },
+ ruby: {
+ method: 'financial_accounts.open_to_buy.retrieve',
+ example:
+ 'require "lithic"\n\nlithic = Lithic::Client.new(\n api_key: "My Lithic API Key",\n environment: "sandbox" # defaults to "production"\n)\n\nopen_to_buy = lithic.financial_accounts.open_to_buy.retrieve("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")\n\nputs(open_to_buy)',
+ },
+ http: {
+ example:
+ 'curl https://api.lithic.com/v1/financial_accounts/$FINANCIAL_ACCOUNT_TOKEN/open_to_buy \\\n -H "Authorization: $LITHIC_API_KEY"',
+ },
+ },
+ },
{
name: 'list',
endpoint: '/v1/financial_accounts/{financial_account_token}/financial_transactions',
diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts
index b5ec1391..16fbab8c 100644
--- a/packages/mcp-server/src/methods.ts
+++ b/packages/mcp-server/src/methods.ts
@@ -718,6 +718,12 @@ export const sdkMethods: SdkMethod[] = [
httpMethod: 'get',
httpPath: '/v1/financial_accounts/{financial_account_token}/balances',
},
+ {
+ clientCallName: 'client.financialAccounts.openToBuy.retrieve',
+ fullyQualifiedName: 'financialAccounts.openToBuy.retrieve',
+ httpMethod: 'get',
+ httpPath: '/v1/financial_accounts/{financial_account_token}/open_to_buy',
+ },
{
clientCallName: 'client.financialAccounts.financialTransactions.retrieve',
fullyQualifiedName: 'financialAccounts.financialTransactions.retrieve',
diff --git a/src/resources/financial-accounts/financial-accounts.ts b/src/resources/financial-accounts/financial-accounts.ts
index cf388519..820cc569 100644
--- a/src/resources/financial-accounts/financial-accounts.ts
+++ b/src/resources/financial-accounts/financial-accounts.ts
@@ -43,6 +43,8 @@ import {
LoanTapes,
LoanTapesCursorPage,
} from './loan-tapes';
+import * as OpenToBuyAPI from './open-to-buy';
+import { OpenToBuy, OpenToBuyResource, OpenToBuySummary } from './open-to-buy';
import * as StatementsAPI from './statements/statements';
import {
Statement,
@@ -59,6 +61,7 @@ import { path } from '../../internal/utils/path';
export class FinancialAccounts extends APIResource {
balances: BalancesAPI.Balances = new BalancesAPI.Balances(this._client);
+ openToBuy: OpenToBuyAPI.OpenToBuyResource = new OpenToBuyAPI.OpenToBuyResource(this._client);
financialTransactions: FinancialTransactionsAPI.FinancialTransactions =
new FinancialTransactionsAPI.FinancialTransactions(this._client);
creditConfiguration: CreditConfigurationAPI.CreditConfiguration =
@@ -581,6 +584,7 @@ export interface FinancialAccountUpdateStatusParams {
}
FinancialAccounts.Balances = Balances;
+FinancialAccounts.OpenToBuyResource = OpenToBuyResource;
FinancialAccounts.FinancialTransactions = FinancialTransactions;
FinancialAccounts.CreditConfiguration = CreditConfigurationAPICreditConfiguration;
FinancialAccounts.LoanTapes = LoanTapes;
@@ -604,6 +608,12 @@ export declare namespace FinancialAccounts {
export { Balances as Balances, type BalanceListParams as BalanceListParams };
+ export {
+ OpenToBuyResource as OpenToBuyResource,
+ type OpenToBuy as OpenToBuy,
+ type OpenToBuySummary as OpenToBuySummary,
+ };
+
export {
FinancialTransactions as FinancialTransactions,
type FinancialTransactionRetrieveParams as FinancialTransactionRetrieveParams,
diff --git a/src/resources/financial-accounts/index.ts b/src/resources/financial-accounts/index.ts
index bad98ab6..a2c53b64 100644
--- a/src/resources/financial-accounts/index.ts
+++ b/src/resources/financial-accounts/index.ts
@@ -51,6 +51,7 @@ export {
type LoanTapeListParams,
type LoanTapesCursorPage,
} from './loan-tapes';
+export { OpenToBuyResource, type OpenToBuy, type OpenToBuySummary } from './open-to-buy';
export {
Statements,
type Statement,
diff --git a/src/resources/financial-accounts/open-to-buy.ts b/src/resources/financial-accounts/open-to-buy.ts
new file mode 100644
index 00000000..a733d966
--- /dev/null
+++ b/src/resources/financial-accounts/open-to-buy.ts
@@ -0,0 +1,84 @@
+// 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';
+
+export class OpenToBuyResource extends APIResource {
+ /**
+ * Get the funds available for card spend backed by a given Security Account, along
+ * with the balances that amount is derived from.
+ *
+ * Open to buy is the amount Lithic authorizes card spend against. It is not a
+ * stored balance, so it is recalculated on every request from the Security
+ * Account, the funds held against spend Lithic has already paid out to the
+ * networks on your behalf, and the spend that has not yet been collected. The
+ * accounts that feed the calculation depend on your program setup, so
+ * `summary.settled_funds` is `null` outside Commercial Charge.
+ *
+ * Supported for Commercial Charge, Dynamic Reserve, and Secured Charge programs.
+ * Returns `404` if `financial_account_token` is not a Security Account you own, or
+ * if your program setup does not use an open to buy calculation.
+ *
+ * @example
+ * ```ts
+ * const openToBuy =
+ * await client.financialAccounts.openToBuy.retrieve(
+ * '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
+ * );
+ * ```
+ */
+ retrieve(financialAccountToken: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/v1/financial_accounts/${financialAccountToken}/open_to_buy`, options);
+ }
+}
+
+/**
+ * Open to Buy
+ */
+export interface OpenToBuy {
+ /**
+ * Funds available for card spend backed by this Security Account, in the
+ * currency's smallest unit (e.g., cents for USD). Equal to the sum of the amounts
+ * in `summary`, and reaches zero once outstanding spend has consumed all available
+ * funding
+ */
+ open_to_buy: number;
+
+ /**
+ * Balances that open to buy is derived from
+ */
+ summary: OpenToBuySummary;
+}
+
+/**
+ * Open to Buy Summary
+ */
+export interface OpenToBuySummary {
+ /**
+ * Available balance of the Security Account backing card spend, in the currency's
+ * smallest unit (e.g., cents for USD)
+ */
+ security: number;
+
+ /**
+ * Funding that has moved out of the Security Account to cover card spend Lithic
+ * has already paid out to the networks, in the currency's smallest unit (e.g.,
+ * cents for USD). Open to buy counts it alongside `security`, and it clears once
+ * collected from your business clients. Only Commercial Charge tracks this
+ * separately, so this is `null` for every other program setup
+ */
+ settled_funds: number | null;
+
+ /**
+ * Customer card spend that has not yet been collected, in the currency's smallest
+ * unit (e.g., cents for USD). Reported as a negative amount, because it reduces
+ * open to buy
+ */
+ total_outstanding_spend: number;
+}
+
+export declare namespace OpenToBuyResource {
+ export { type OpenToBuy as OpenToBuy, type OpenToBuySummary as OpenToBuySummary };
+}
diff --git a/tests/api-resources/financial-accounts/open-to-buy.test.ts b/tests/api-resources/financial-accounts/open-to-buy.test.ts
new file mode 100644
index 00000000..914939e6
--- /dev/null
+++ b/tests/api-resources/financial-accounts/open-to-buy.test.ts
@@ -0,0 +1,23 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import Lithic from 'lithic';
+
+const client = new Lithic({
+ apiKey: 'My Lithic API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource openToBuy', () => {
+ test('retrieve', async () => {
+ const responsePromise = client.financialAccounts.openToBuy.retrieve(
+ '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
+ );
+ 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);
+ });
+});
From d40fdb8e519be5e742dcaaeb131004aa2b2e6ae6 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 17 Sep 2026 20:15:25 +0000
Subject: [PATCH 15/15] release: 0.147.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 25 +++++++++++++++++++++++++
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 +-
7 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 2bf9d984..4fb7843b 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.146.0"
+ ".": "0.147.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1c031a3e..54170193 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,30 @@
# Changelog
+## 0.147.0 (2026-09-17)
+
+Full Changelog: [v0.146.0...v0.147.0](https://github.com/lithic-com/lithic-node/compare/v0.146.0...v0.147.0)
+
+### Features
+
+* [CARDS-5174] Add reiusse/renew 409 error ([fa0ae4c](https://github.com/lithic-com/lithic-node/commit/fa0ae4c9d0d466dc66ee5fe7bc5bc3174db1d4e0))
+* [TRE-14464] Update /retry payments endpoint to accept method ([ad8c6d4](https://github.com/lithic-com/lithic-node/commit/ad8c6d429b3868c9202c2ff7a0d00ae21376487b))
+* [TRE-14524] Add Open to buy API spec ([e0bc361](https://github.com/lithic-com/lithic-node/commit/e0bc36190aaac85568d469b9dc0daa4f0b4cb8ee))
+* Add missing blockchain/stablecoin endpoints to the spec ([6011012](https://github.com/lithic-com/lithic-node/commit/60110124c2d5033eef60f80a8a90b6f5fccae5fb))
+* **api:** add card.pin_updated webhook event ([e174e1b](https://github.com/lithic-com/lithic-node/commit/e174e1b4fa580e4b93f4a91384a3a771a474506b))
+* **api:** add EXTERNAL_STABLECOIN category and events to payments/account-activity/statements ([d89001c](https://github.com/lithic-com/lithic-node/commit/d89001c431cbfcb4a0be1e61a79299d8d6096794))
+* **api:** add FEE/FEE_REVERSAL to line-items/management-operations/financial events ([c2550c8](https://github.com/lithic-com/lithic-node/commit/c2550c85089ea32157af9de5f31e3935db7c5681))
+* **api:** add OTHER enum value to type field in auth_rules.v2 ([022c00b](https://github.com/lithic-com/lithic-node/commit/022c00bec0a58609473ce0a843f526f01382c064))
+* **api:** add psd2_context field to threeDS.authentication response ([9872235](https://github.com/lithic-com/lithic-node/commit/9872235a163047bd300ed1222ec79e2fcc9a1fc1))
+* **api:** add STABLECOIN_REVIEWED event type to payment simulate action ([d40e9cd](https://github.com/lithic-com/lithic-node/commit/d40e9cd20eb0a8d1547648cb3fdec27976d6c604))
+* AUTH-3759: Add DECLINE_SCA_REQUIRED and SCA_REQUIRED enum entries ([bb3cc93](https://github.com/lithic-com/lithic-node/commit/bb3cc935769cfe3c0b69728d6d83ef7e802baa97))
+* TRE-14349: add installment plan management operation event types ([67bb3d0](https://github.com/lithic-com/lithic-node/commit/67bb3d0ae9522b3f4b76df53fbf43961f5bb874e))
+* TRE-14429: Document the stablecoin payments endpoint ([1f241df](https://github.com/lithic-com/lithic-node/commit/1f241df9bbd3b4c5c31521f07f3ccb52f06b8640))
+
+
+### Documentation
+
+* **mcp:** document code execution modes and the local code runner ([7623f85](https://github.com/lithic-com/lithic-node/commit/7623f85c394e10f26f44b377a730d33edb9ea4c8))
+
## 0.146.0 (2026-08-31)
Full Changelog: [v0.145.0...v0.146.0](https://github.com/lithic-com/lithic-node/compare/v0.145.0...v0.146.0)
diff --git a/package.json b/package.json
index 1a12b504..237de14a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "lithic",
- "version": "0.146.0",
+ "version": "0.147.0",
"description": "The official TypeScript library for the Lithic API",
"author": "Lithic ",
"types": "dist/index.d.ts",
diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json
index d6adea3f..eadd8146 100644
--- a/packages/mcp-server/manifest.json
+++ b/packages/mcp-server/manifest.json
@@ -1,7 +1,7 @@
{
"dxt_version": "0.2",
"name": "lithic-mcp",
- "version": "0.146.0",
+ "version": "0.147.0",
"description": "The official MCP Server for the Lithic API",
"author": {
"name": "Lithic",
diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json
index 4fd3399d..0b80d44d 100644
--- a/packages/mcp-server/package.json
+++ b/packages/mcp-server/package.json
@@ -1,6 +1,6 @@
{
"name": "lithic-mcp",
- "version": "0.146.0",
+ "version": "0.147.0",
"description": "The official MCP Server for the Lithic API",
"author": "Lithic ",
"types": "dist/index.d.ts",
diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts
index 1d5aab1e..31f93d28 100644
--- a/packages/mcp-server/src/server.ts
+++ b/packages/mcp-server/src/server.ts
@@ -29,7 +29,7 @@ export const newMcpServer = async ({
new McpServer(
{
name: 'lithic_api',
- version: '0.146.0',
+ version: '0.147.0',
},
{
instructions: await getInstructions({ stainlessApiKey, customInstructionsPath }),
diff --git a/src/version.ts b/src/version.ts
index 6953fb55..7ede2cec 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.146.0'; // x-release-please-version
+export const VERSION = '0.147.0'; // x-release-please-version