Sign In

@warmio/contracts

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@warmio/contracts - npm Package Compare versions

Comparing version
1.0.0
to
1.1.0
+377
dist/mcp/distribution.d.ts
export declare const WARM_MCP_PACKAGE_NAME: '@warmio/mcp';
export declare const WARM_MCP_PACKAGE_SPEC: "@warmio/mcp@latest";
export declare const WARM_MCP_INSTALL_COMMAND: "npx -y @warmio/mcp@latest";
export declare const WARM_MCP_MINIMUM_NODE_VERSION: '>=18';
export declare const WARM_MCP_MODES: readonly ['context', 'automation'];
export type PrivateMcpMode = (typeof WARM_MCP_MODES)[number];
export type WarmMcpConfigPath = {
root: 'appData' | 'home';
segments: readonly string[];
};
export declare const WARM_MCP_CLIENTS: readonly [{
readonly id: 'claude-code';
readonly name: 'Claude Code';
readonly format: 'json';
readonly alwaysInclude: true;
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.claude.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.claude.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.claude.json'];
};
};
}, {
readonly id: 'claude-desktop';
readonly name: 'Claude Desktop';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['Library', 'Application Support', 'Claude', 'claude_desktop_config.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.config', 'claude', 'claude_desktop_config.json'];
};
readonly win32: {
readonly root: 'appData';
readonly segments: readonly ['Claude', 'claude_desktop_config.json'];
};
};
}, {
readonly id: 'cursor';
readonly name: 'Cursor';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.cursor', 'mcp.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.cursor', 'mcp.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.cursor', 'mcp.json'];
};
};
}, {
readonly id: 'windsurf';
readonly name: 'Windsurf';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.codeium', 'windsurf', 'mcp_config.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.codeium', 'windsurf', 'mcp_config.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.codeium', 'windsurf', 'mcp_config.json'];
};
};
}, {
readonly id: 'opencode';
readonly name: 'OpenCode';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.config', 'opencode', 'opencode.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.config', 'opencode', 'opencode.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.config', 'opencode', 'opencode.json'];
};
};
}, {
readonly id: 'codex-cli';
readonly name: 'Codex CLI';
readonly format: 'toml';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.codex', 'config.toml'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.codex', 'config.toml'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.codex', 'config.toml'];
};
};
}, {
readonly id: 'antigravity';
readonly name: 'Antigravity';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'antigravity', 'mcp_config.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'antigravity', 'mcp_config.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'antigravity', 'mcp_config.json'];
};
};
}, {
readonly id: 'gemini-cli';
readonly name: 'Gemini CLI';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'settings.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'settings.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'settings.json'];
};
};
}];
export type WarmMcpClientId = (typeof WARM_MCP_CLIENTS)[number]['id'];
export declare const WARM_MCP_PROJECT_CONFIGS: readonly ['.mcp.json', '.cursor/mcp.json', '.vscode/mcp.json'];
export declare const WARM_MCP_CREDENTIALS: {
readonly automation: {
readonly apiKeyEnv: 'WARM_AUTOMATION_API_KEY';
readonly apiKeyFileEnv: 'WARM_AUTOMATION_API_KEY_FILE';
readonly defaultFileName: 'automation_api_key';
};
readonly context: {
readonly apiKeyEnv: 'WARM_CONTEXT_API_KEY';
readonly apiKeyFileEnv: 'WARM_CONTEXT_API_KEY_FILE';
readonly defaultFileName: 'context_api_key';
};
};
export declare const WARM_MCP_SERVER_CONFIGS: {
readonly automation: {
readonly serverName: 'warm-automation';
readonly command: 'npx';
readonly args: readonly ["-y", "@warmio/mcp@latest", "mcp", "--mode", "automation"];
};
readonly context: {
readonly serverName: 'warm';
readonly command: 'npx';
readonly args: readonly ["-y", "@warmio/mcp@latest", "mcp", "--mode", "context"];
};
};
export declare const WARM_MCP_INSTALLER_COMMANDS: {
readonly automation: "npx -y @warmio/mcp@latest install --mode automation";
readonly context: "npx -y @warmio/mcp@latest install --mode context";
};
export declare const WARM_MCP_SERVER_COMMANDS: {
readonly automation: "npx -y @warmio/mcp@latest mcp --mode automation";
readonly context: "npx -y @warmio/mcp@latest mcp --mode context";
};
export declare const WARM_MCP_MANIFEST: {
readonly clients: readonly [{
readonly id: 'claude-code';
readonly name: 'Claude Code';
readonly format: 'json';
readonly alwaysInclude: true;
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.claude.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.claude.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.claude.json'];
};
};
}, {
readonly id: 'claude-desktop';
readonly name: 'Claude Desktop';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['Library', 'Application Support', 'Claude', 'claude_desktop_config.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.config', 'claude', 'claude_desktop_config.json'];
};
readonly win32: {
readonly root: 'appData';
readonly segments: readonly ['Claude', 'claude_desktop_config.json'];
};
};
}, {
readonly id: 'cursor';
readonly name: 'Cursor';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.cursor', 'mcp.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.cursor', 'mcp.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.cursor', 'mcp.json'];
};
};
}, {
readonly id: 'windsurf';
readonly name: 'Windsurf';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.codeium', 'windsurf', 'mcp_config.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.codeium', 'windsurf', 'mcp_config.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.codeium', 'windsurf', 'mcp_config.json'];
};
};
}, {
readonly id: 'opencode';
readonly name: 'OpenCode';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.config', 'opencode', 'opencode.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.config', 'opencode', 'opencode.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.config', 'opencode', 'opencode.json'];
};
};
}, {
readonly id: 'codex-cli';
readonly name: 'Codex CLI';
readonly format: 'toml';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.codex', 'config.toml'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.codex', 'config.toml'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.codex', 'config.toml'];
};
};
}, {
readonly id: 'antigravity';
readonly name: 'Antigravity';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'antigravity', 'mcp_config.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'antigravity', 'mcp_config.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'antigravity', 'mcp_config.json'];
};
};
}, {
readonly id: 'gemini-cli';
readonly name: 'Gemini CLI';
readonly format: 'json';
readonly configPaths: {
readonly darwin: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'settings.json'];
};
readonly linux: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'settings.json'];
};
readonly win32: {
readonly root: 'home';
readonly segments: readonly ['.gemini', 'settings.json'];
};
};
}];
readonly credentials: {
readonly automation: {
readonly apiKeyEnv: 'WARM_AUTOMATION_API_KEY';
readonly apiKeyFileEnv: 'WARM_AUTOMATION_API_KEY_FILE';
readonly defaultFileName: 'automation_api_key';
};
readonly context: {
readonly apiKeyEnv: 'WARM_CONTEXT_API_KEY';
readonly apiKeyFileEnv: 'WARM_CONTEXT_API_KEY_FILE';
readonly defaultFileName: 'context_api_key';
};
};
readonly installCommand: "npx -y @warmio/mcp@latest";
readonly installerCommands: {
readonly automation: "npx -y @warmio/mcp@latest install --mode automation";
readonly context: "npx -y @warmio/mcp@latest install --mode context";
};
readonly minimumNodeVersion: ">=18";
readonly modes: readonly ["context", "automation"];
readonly packageName: "@warmio/mcp";
readonly packageSpec: "@warmio/mcp@latest";
readonly projectConfigs: readonly [".mcp.json", ".cursor/mcp.json", ".vscode/mcp.json"];
readonly serverCommands: {
readonly automation: "npx -y @warmio/mcp@latest mcp --mode automation";
readonly context: "npx -y @warmio/mcp@latest mcp --mode context";
};
readonly serverConfigs: {
readonly automation: {
readonly serverName: 'warm-automation';
readonly command: 'npx';
readonly args: readonly ["-y", "@warmio/mcp@latest", "mcp", "--mode", "automation"];
};
readonly context: {
readonly serverName: 'warm';
readonly command: 'npx';
readonly args: readonly ["-y", "@warmio/mcp@latest", "mcp", "--mode", "context"];
};
};
};
//# sourceMappingURL=distribution.d.ts.map
{"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../src/mcp/distribution.ts"],"names":[],"mappings":"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"}
export const WARM_MCP_PACKAGE_NAME = '@warmio/mcp';
export const WARM_MCP_PACKAGE_SPEC = `${WARM_MCP_PACKAGE_NAME}@latest`;
export const WARM_MCP_INSTALL_COMMAND = `npx -y ${WARM_MCP_PACKAGE_SPEC}`;
export const WARM_MCP_MINIMUM_NODE_VERSION = '>=18';
export const WARM_MCP_MODES = ['context', 'automation'];
export const WARM_MCP_CLIENTS = [
{
id: 'claude-code',
name: 'Claude Code',
format: 'json',
alwaysInclude: true,
configPaths: {
darwin: { root: 'home', segments: ['.claude.json'] },
linux: { root: 'home', segments: ['.claude.json'] },
win32: { root: 'home', segments: ['.claude.json'] },
},
},
{
id: 'claude-desktop',
name: 'Claude Desktop',
format: 'json',
configPaths: {
darwin: {
root: 'home',
segments: ['Library', 'Application Support', 'Claude', 'claude_desktop_config.json'],
},
linux: {
root: 'home',
segments: ['.config', 'claude', 'claude_desktop_config.json'],
},
win32: {
root: 'appData',
segments: ['Claude', 'claude_desktop_config.json'],
},
},
},
{
id: 'cursor',
name: 'Cursor',
format: 'json',
configPaths: {
darwin: { root: 'home', segments: ['.cursor', 'mcp.json'] },
linux: { root: 'home', segments: ['.cursor', 'mcp.json'] },
win32: { root: 'home', segments: ['.cursor', 'mcp.json'] },
},
},
{
id: 'windsurf',
name: 'Windsurf',
format: 'json',
configPaths: {
darwin: { root: 'home', segments: ['.codeium', 'windsurf', 'mcp_config.json'] },
linux: { root: 'home', segments: ['.codeium', 'windsurf', 'mcp_config.json'] },
win32: { root: 'home', segments: ['.codeium', 'windsurf', 'mcp_config.json'] },
},
},
{
id: 'opencode',
name: 'OpenCode',
format: 'json',
configPaths: {
darwin: { root: 'home', segments: ['.config', 'opencode', 'opencode.json'] },
linux: { root: 'home', segments: ['.config', 'opencode', 'opencode.json'] },
win32: { root: 'home', segments: ['.config', 'opencode', 'opencode.json'] },
},
},
{
id: 'codex-cli',
name: 'Codex CLI',
format: 'toml',
configPaths: {
darwin: { root: 'home', segments: ['.codex', 'config.toml'] },
linux: { root: 'home', segments: ['.codex', 'config.toml'] },
win32: { root: 'home', segments: ['.codex', 'config.toml'] },
},
},
{
id: 'antigravity',
name: 'Antigravity',
format: 'json',
configPaths: {
darwin: { root: 'home', segments: ['.gemini', 'antigravity', 'mcp_config.json'] },
linux: { root: 'home', segments: ['.gemini', 'antigravity', 'mcp_config.json'] },
win32: { root: 'home', segments: ['.gemini', 'antigravity', 'mcp_config.json'] },
},
},
{
id: 'gemini-cli',
name: 'Gemini CLI',
format: 'json',
configPaths: {
darwin: { root: 'home', segments: ['.gemini', 'settings.json'] },
linux: { root: 'home', segments: ['.gemini', 'settings.json'] },
win32: { root: 'home', segments: ['.gemini', 'settings.json'] },
},
},
];
export const WARM_MCP_PROJECT_CONFIGS = [
'.mcp.json',
'.cursor/mcp.json',
'.vscode/mcp.json',
];
export const WARM_MCP_CREDENTIALS = {
automation: {
apiKeyEnv: 'WARM_AUTOMATION_API_KEY',
apiKeyFileEnv: 'WARM_AUTOMATION_API_KEY_FILE',
defaultFileName: 'automation_api_key',
},
context: {
apiKeyEnv: 'WARM_CONTEXT_API_KEY',
apiKeyFileEnv: 'WARM_CONTEXT_API_KEY_FILE',
defaultFileName: 'context_api_key',
},
};
export const WARM_MCP_SERVER_CONFIGS = {
automation: {
serverName: 'warm-automation',
command: 'npx',
args: ['-y', WARM_MCP_PACKAGE_SPEC, 'mcp', '--mode', 'automation'],
},
context: {
serverName: 'warm',
command: 'npx',
args: ['-y', WARM_MCP_PACKAGE_SPEC, 'mcp', '--mode', 'context'],
},
};
export const WARM_MCP_INSTALLER_COMMANDS = {
automation: `${WARM_MCP_INSTALL_COMMAND} install --mode automation`,
context: `${WARM_MCP_INSTALL_COMMAND} install --mode context`,
};
export const WARM_MCP_SERVER_COMMANDS = {
automation: `${WARM_MCP_INSTALL_COMMAND} mcp --mode automation`,
context: `${WARM_MCP_INSTALL_COMMAND} mcp --mode context`,
};
export const WARM_MCP_MANIFEST = {
clients: WARM_MCP_CLIENTS,
credentials: WARM_MCP_CREDENTIALS,
installCommand: WARM_MCP_INSTALL_COMMAND,
installerCommands: WARM_MCP_INSTALLER_COMMANDS,
minimumNodeVersion: WARM_MCP_MINIMUM_NODE_VERSION,
modes: WARM_MCP_MODES,
packageName: WARM_MCP_PACKAGE_NAME,
packageSpec: WARM_MCP_PACKAGE_SPEC,
projectConfigs: WARM_MCP_PROJECT_CONFIGS,
serverCommands: WARM_MCP_SERVER_COMMANDS,
serverConfigs: WARM_MCP_SERVER_CONFIGS,
};
//# sourceMappingURL=distribution.js.map
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/mcp/distribution.ts"],"names":[],"mappings":"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"}
+1
-1

@@ -1,2 +0,2 @@

export declare const baseOpenApiYaml = "openapi: 3.1.0\ninfo:\n title: Warm API\n description: |\n Read your financial context or invoke supported Warm actions through a compact operation catalog.\n\n ## Authentication\n All requests use `Authorization: Bearer`. API keys are created for either read-only context\n access or automation access in Settings on paid Warm plans.\n\n Read/export routes accept `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`.\n Automation routes require an automation key (`warm_auto_...`) and do not accept access tokens.\n\n Unauthenticated responses include `WWW-Authenticate` guidance and protected resource metadata.\n\n ## Rate Limits\n - Context keys: 200 requests per hour per key\n - Automation keys: 500 requests per hour per key\n - Rate limit headers included in authenticated responses\n - `/api/export` supports dataset-scoped delta sync with `since` and publishes edge-cache metadata headers\n version: '2.0.0'\n contact:\n name: Warm Support\n url: https://warm.io/support\n license:\n name: Proprietary\n url: https://warm.io/terms\n\nservers:\n - url: https://app.warm.io\n description: Production\n\nsecurity:\n - BearerAuth: []\n\npaths:\n /api/verify:\n get:\n operationId: verifyApiAccess\n summary: Verify API credentials\n description: |\n Validate a Warm API key or signed-in user access token against the public verification route.\n\n This endpoint is the canonical readiness check for public API clients and discovery tools.\n tags:\n - Verification\n responses:\n '200':\n description: Credentials are valid and the caller has API access\n content:\n application/json:\n schema:\n type: object\n required:\n - status\n - valid\n - auth\n properties:\n status:\n type: string\n enum: [ok]\n valid:\n type: boolean\n auth:\n type: string\n description: Auth method used to satisfy verification\n audience:\n type: string\n enum: [context, automation, oauth]\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/export:\n get:\n operationId: getDatasetExport\n summary: Get a typed dataset export\n description: |\n Fetch a canonical financial dataset export from the unified `/api/export` surface.\n\n Use `dataset=transactions` for paginated transaction history. Other datasets return\n a typed JSON object keyed by the dataset name or retained public alias.\n\n Preferred dataset names are `accounts`, `transactions`, `snapshots`, `recurring`,\n `budgets`, `goals`, `health`, `liabilities`, and `holdings`.\n tags:\n - Export\n parameters:\n - name: dataset\n in: query\n description: Dataset identifier or retained public alias\n required: true\n schema:\n type: string\n enum:\n - accounts\n - transactions\n - snapshots\n - recurring\n - budgets\n - goals\n - health\n - liabilities\n - holdings\n - name: since\n in: query\n description: ISO timestamp for incremental exports\n required: false\n schema:\n type: string\n format: date-time\n - name: last_knowledge\n in: query\n description: Legacy alias for `since`\n required: false\n schema:\n type: string\n format: date-time\n - name: limit\n in: query\n description: Maximum transactions per page when `dataset=transactions`\n required: false\n schema:\n type: integer\n minimum: 1\n maximum: 1000\n - name: cursor\n in: query\n description: Pagination token from `pagination.next_cursor` when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: accountId\n in: query\n description: Optional account filter when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: search\n in: query\n description: Optional merchant or description search filter when `dataset=transactions`\n required: false\n schema:\n type: string\n minLength: 1\n maxLength: 120\n responses:\n '200':\n description: Successful dataset export\n content:\n application/json:\n schema:\n type: object\n description: Dataset-shaped JSON response keyed by the requested dataset\n properties:\n generated_at:\n type: string\n format: date-time\n next_knowledge:\n type: string\n format: date-time\n nullable: true\n pagination:\n $ref: '#/components/schemas/Pagination'\n additionalProperties: true\n '400':\n description: Invalid query parameters\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context:\n get:\n operationId: getFinancialContext\n summary: Get compact financial context\n description: |\n Fetch the current compact FinancialContext artifact for the authenticated user.\n\n This response does not include transaction items. Use\n `/api/financial-context/transactions` for month-addressed transaction pages or the\n fixed 10-day latest transaction window.\n tags:\n - Export\n responses:\n '200':\n description: Compact FinancialContext artifact\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContext'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/transactions:\n get:\n operationId: getFinancialContextTransactions\n summary: Get financial-context transactions\n description: |\n Fetch one transaction month or the fixed 10-day latest transaction window from the\n current financial-context artifact.\n\n The raw API requires exactly one selector: `month=YYYY-MM` or `latest=1`.\n Bare calls are invalid on the raw API. The `@warmio/mcp` v7 `get_transactions` tool\n maps bare calls to the fixed latest window and accepts only `month` (`YYYY-MM`) or\n `latest: true`; it does not accept cursor, search, or `last_knowledge`.\n Transaction amounts use the Warm/Plaid sign convention:\n positive = expense/debit, negative = income/credit.\n\n A well-formed month inside the covered range with no matching items returns `200` with\n `count: 0` and `items: []`. Months before the earliest indexed month or after the latest\n covered month return `404`.\n tags:\n - Export\n parameters:\n - name: month\n in: query\n description: Transaction month selector in YYYY-MM format. Mutually exclusive with `latest`.\n required: false\n schema:\n type: string\n pattern: '^\\d{4}-(0[1-9]|1[0-2])$'\n example: '2026-07'\n - name: latest\n in: query\n description: Set to `1` for the fixed 10-day latest transaction window.\n required: false\n schema:\n type: string\n enum: ['1']\n responses:\n '200':\n description: Transaction month page or latest transaction window\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n oneOf:\n - $ref: '#/components/schemas/TransactionMonth'\n - $ref: '#/components/schemas/LatestTransactions'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '400':\n description: Missing selectors, mutually exclusive selectors, malformed `month`, or `latest` other than `1`\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/meta:\n get:\n operationId: getFinancialContextMeta\n summary: Get financial-context metadata\n description: |\n Fetch operational metadata for the current financial-context artifact, including the\n content hash used as the ETag, byte length, row counts, and freshness timestamps.\n `content_hash` is the public artifact version token; this metadata does not expose a\n public `data_version`.\n tags:\n - Export\n responses:\n '200':\n description: Financial-context metadata\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContextMeta'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/automation/operations/search:\n post:\n operationId: searchOperations\n summary: Search supported automation operations\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: false\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n properties:\n query:\n type: string\n maxLength: 200\n responses:\n '200':\n description: Matching operations\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operations]\n properties:\n operations:\n type: array\n items:\n $ref: '#/components/schemas/AutomationOperation'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '400':\n $ref: '#/components/responses/BadRequest'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/describe:\n post:\n operationId: describeOperation\n summary: Describe one operation and request owner approval when required\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationRequest'\n responses:\n '200':\n description: Operation schema and optional pending owner approval\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operation]\n properties:\n operation:\n allOf:\n - $ref: '#/components/schemas/AutomationOperation'\n - type: object\n properties:\n input_schema:\n type: object\n approval:\n type: object\n additionalProperties: false\n required: [id, status, approval_url, expires_at]\n properties:\n id: { type: string, format: uuid }\n status: { type: string, enum: [pending] }\n approval_url: { type: string, format: uri }\n expires_at: { type: string, format: date-time }\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/invoke:\n post:\n operationId: invokeOperation\n summary: Invoke one supported operation\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationInvokeRequest'\n responses:\n '200':\n description: Wrapped response from the invoked operation\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/AutomationInvocationResponse'\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '409':\n description: Owner approval is required, invalid, expired, or already used\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\ncomponents:\n securitySchemes:\n BearerAuth:\n type: http\n scheme: bearer\n description: 'Read/export format: `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`'\n AutomationKeyAuth:\n type: http\n scheme: bearer\n description: 'Automation format: `Authorization: Bearer warm_auto_...`'\n\n headers:\n ETag:\n description: Quoted content hash for If-None-Match revalidation\n schema:\n type: string\n example: '\"7b6f9d4c...\"'\n PrivateNoStore:\n description: Private financial responses are not stored by browsers or shared caches\n schema:\n type: string\n example: private, no-store\n\n responses:\n BadRequest:\n description: The request body or operation input is invalid\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Unauthorized:\n description: Missing or invalid credentials\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Forbidden:\n description: The caller is authenticated but does not have API access\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n NotFound:\n description: The requested operation does not exist\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n InternalError:\n description: The request could not be completed safely\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n PayloadTooLarge:\n description: The response would exceed the public API response-size limit\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n RateLimited:\n description: Hourly per-credential rate limit exceeded\n headers:\n Retry-After:\n description: Seconds until the rate-limit window resets\n schema:\n type: integer\n example: 3600\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n\n schemas:\n AutomationOperation:\n type: object\n additionalProperties: false\n required: [operation_id, summary, description, method, path, risk, confirmation_required]\n properties:\n operation_id: { type: string }\n summary: { type: string }\n description: { type: string }\n method: { type: string, enum: [GET, POST, PATCH, PUT, DELETE] }\n path: { type: string }\n risk:\n type: array\n items: { type: string, enum: [read, write, destructive, external_effect] }\n confirmation_required: { type: boolean }\n OperationRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n OperationInvokeRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n approval_id:\n type: string\n format: uuid\n description: Matching owner approval required for every write operation\n OperationInput:\n type: object\n additionalProperties: false\n properties:\n params: { type: object, additionalProperties: { type: string } }\n body: { type: object, additionalProperties: true }\n AutomationInvocationResponse:\n type: object\n additionalProperties: false\n required: [body, headers, operation_id, status]\n properties:\n body: {}\n headers:\n type: object\n additionalProperties: { type: string }\n operation_id: { type: string }\n status: { type: integer, minimum: 100, maximum: 599 }\n ExportResponse:\n type: object\n required:\n - schema_version\n - generated_at\n - user_id\n - data_version\n - next_knowledge\n - accounts\n - transactions\n - snapshots\n - pagination\n properties:\n schema_version:\n type: string\n description: API schema version\n example: v1\n generated_at:\n type: string\n format: date-time\n description: Response generation timestamp\n example: '2026-01-10T15:30:00Z'\n user_id:\n type: string\n format: uuid\n description: Your user ID\n example: a1b2c3d4-e5f6-7890-abcd-ef1234567890\n data_version:\n type: integer\n description: Monotonic version number (increments on data changes)\n example: 42\n next_knowledge:\n type: string\n format: date-time\n description: Use as `last_knowledge` in next request for delta sync\n example: '2026-01-10T15:30:00Z'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/Account'\n transactions:\n type: array\n items:\n $ref: '#/components/schemas/Transaction'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/Snapshot'\n pagination:\n $ref: '#/components/schemas/Pagination'\n\n Account:\n type: object\n required:\n - id\n - name\n - type\n - current_balance\n - iso_currency_code\n - is_active\n properties:\n id:\n type: string\n format: uuid\n description: Unique account identifier\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n account_id:\n type: string\n description: External account ID (from Plaid)\n example: plaid_acc_ABC123xyz\n name:\n type: string\n description: Display name with masked account number\n example: 'Checking ****1234'\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n description: Account type\n example: depository\n subtype:\n type: string\n description: Specific subtype\n example: checking\n enum:\n - checking\n - savings\n - money market\n - cd\n - credit card\n - mortgage\n - student\n - auto\n - 401k\n - ira\n - brokerage\n - other\n current_balance:\n type: number\n description: Current balance (positive for assets)\n example: 5420.50\n available_balance:\n type: number\n nullable: true\n description: Available balance (may differ from current)\n example: 5320.50\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n mask:\n type: string\n description: Last 4 digits of account number\n example: '1234'\n is_active:\n type: boolean\n description: Whether account is actively syncing\n example: true\n created_at:\n type: string\n format: date-time\n example: '2025-06-15T10:00:00Z'\n updated_at:\n type: string\n format: date-time\n example: '2026-01-10T12:00:00Z'\n\n Transaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - name\n - primary_category\n - detailed_category\n - pending\n - iso_currency_code\n properties:\n id:\n type: string\n format: uuid\n description: Unique transaction identifier\n example: txn_9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d\n transaction_id:\n type: string\n description: External transaction ID (from Plaid)\n example: plaid_txn_XYZ789abc\n account_id:\n type: string\n format: uuid\n description: Parent account ID\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n date:\n type: string\n format: date\n description: Posted date\n example: '2026-01-09'\n authorized_date:\n type: string\n format: date\n nullable: true\n description: Authorization date (if different)\n example: '2026-01-08'\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n example: 42.50\n name:\n type: string\n description: Raw transaction description from bank\n example: 'TRADER JOES #123 SAN FRANCISCO'\n merchant_name:\n type: string\n nullable: true\n description: Cleaned merchant name\n example: \"Trader Joe's\"\n merchant_entity_id:\n type: string\n nullable: true\n description: Unique merchant identifier\n example: eyg8o776k0QmNgVpAmaQj4WgzW9Qzo6O51gdd\n logo:\n type: string\n format: uri\n nullable: true\n description: URL to merchant logo\n example: https://plaid-merchant-logos.plaid.com/trader_joes.png\n primary_category:\n type: string\n description: High-level category\n example: FOOD_AND_DRINK\n enum:\n - INCOME\n - TRANSFER_IN\n - TRANSFER_OUT\n - LOAN_PAYMENTS\n - BANK_FEES\n - ENTERTAINMENT\n - FOOD_AND_DRINK\n - GENERAL_MERCHANDISE\n - HOME_IMPROVEMENT\n - MEDICAL\n - PERSONAL_CARE\n - GENERAL_SERVICES\n - GOVERNMENT_AND_NON_PROFIT\n - TRANSPORTATION\n - TRAVEL\n - RENT_AND_UTILITIES\n detailed_category:\n type: string\n description: Specific category\n example: FOOD_AND_DRINK_GROCERIES\n category_confidence:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n description: Category confidence level\n example: VERY_HIGH\n payment_channel:\n type: string\n enum: [in_store, online, other]\n description: How payment was made\n example: in_store\n pending:\n type: boolean\n description: Whether transaction is still pending\n example: false\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n location:\n $ref: '#/components/schemas/Location'\n created_at:\n type: string\n format: date-time\n example: '2026-01-09T18:30:00Z'\n\n Location:\n type: object\n nullable: true\n properties:\n city:\n type: string\n nullable: true\n example: San Francisco\n region:\n type: string\n nullable: true\n example: CA\n postal_code:\n type: string\n nullable: true\n example: '94110'\n country:\n type: string\n nullable: true\n example: US\n\n Snapshot:\n type: object\n required:\n - id\n - period_type\n - period_start\n - period_end\n - snapshot_date\n properties:\n id:\n type: string\n format: uuid\n description: Unique snapshot identifier\n example: snap_1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\n period_type:\n type: string\n enum: [daily, weekly, monthly]\n description: Period granularity\n example: daily\n period_start:\n type: string\n format: date\n description: Period start date\n example: '2026-01-01'\n period_end:\n type: string\n format: date\n description: Period end date\n example: '2026-01-31'\n snapshot_date:\n type: string\n format: date\n description: When snapshot was taken\n example: '2026-01-10'\n income:\n type: number\n description: Total income for period\n example: 6500.00\n expenses:\n type: number\n description: Total expenses for period\n example: 4200.00\n net_cash_flow:\n type: number\n description: Income minus expenses\n example: 2300.00\n savings_rate:\n type: number\n description: Percentage saved (0.0 to 1.0)\n example: 0.35\n net_worth:\n type: number\n description: Total assets minus liabilities\n example: 45000.00\n total_cash:\n type: number\n description: Sum of depository balances\n example: 12500.00\n total_debt:\n type: number\n description: Sum of credit/loan balances\n example: 8500.00\n investment_value:\n type: number\n description: Investment account value\n example: 28000.00\n asset_value:\n type: number\n description: Other asset values\n example: 15000.00\n burn_rate:\n type: number\n description: Average daily spending\n example: 140.00\n runway_days:\n type: integer\n description: Days of expenses covered by cash\n example: 89\n safe_to_spend:\n type: number\n description: Estimated discretionary spending available\n example: 1800.00\n recurring_total:\n type: number\n description: Sum of recurring expenses\n example: 1250.00\n spending_by_category:\n type: array\n items:\n $ref: '#/components/schemas/CategorySpending'\n top_merchants:\n type: array\n items:\n $ref: '#/components/schemas/MerchantSpending'\n income_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: 0.05\n spending_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: -0.08\n created_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n\n CategorySpending:\n type: object\n properties:\n category:\n type: string\n example: FOOD_AND_DRINK\n amount:\n type: number\n example: 850.00\n percentage:\n type: number\n example: 20.2\n\n MerchantSpending:\n type: object\n properties:\n merchant:\n type: string\n example: Whole Foods\n amount:\n type: number\n example: 420.00\n count:\n type: integer\n example: 8\n\n Pagination:\n type: object\n properties:\n limit:\n type: integer\n description: Transactions per page\n example: 1000\n next_cursor:\n type: string\n nullable: true\n description: Token for next page (null if no more pages)\n example: eyJkYXRlIjoiMjAyNi0wMS0wMSIsImlkIjoiYWJjMTIzIn0\n\n RecurringStream:\n type: object\n properties:\n id:\n type: string\n format: uuid\n description: Unique stream identifier\n example: cb3daddd-1f82-43ed-ba9f-60ecf8c937e3\n stream_id:\n type: string\n description: External stream ID (from Plaid)\n example: LN053MyLw9H9MQ5ybwrJim1Kj495gbsJ98aeM\n account_id:\n type: string\n description: Account ID this stream belongs to\n example: Dpnjw06KAJHYVmr5jqejimy4nE0OQJczvD8KD\n stream_type:\n type: string\n enum: [inflow, outflow]\n description: Direction of recurring payment\n example: outflow\n merchant_name:\n type: string\n description: Merchant or payee name\n example: Ting\n description:\n type: string\n description: Transaction description pattern\n example: 'TING* INV#MI-4636263'\n category:\n type: object\n properties:\n primary:\n type: string\n example: RENT_AND_UTILITIES\n detailed:\n type: string\n example: RENT_AND_UTILITIES_TELEPHONE\n confidence_level:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, SEMI_MONTHLY, MONTHLY, ANNUALLY, UNKNOWN]\n description: Payment frequency\n example: MONTHLY\n average_amount:\n type: number\n description: Average transaction amount\n example: 118.98\n last_amount:\n type: number\n description: Most recent transaction amount\n example: 146.58\n is_active:\n type: boolean\n description: Whether stream is currently active\n example: true\n status:\n type: string\n enum: [MATURE, EARLY_DETECTION, TOMBSTONED]\n description: Detection status\n example: MATURE\n first_date:\n type: string\n format: date\n description: First detected transaction date\n example: '2025-07-15'\n last_date:\n type: string\n format: date\n description: Most recent transaction date\n example: '2025-09-15'\n next_date:\n type: string\n format: date\n description: Predicted next transaction date\n example: '2025-10-15'\n source:\n type: string\n enum: [plaid, user]\n description: How stream was detected\n example: plaid\n\n Error:\n type: object\n required:\n - error\n properties:\n error:\n type: string\n description: Human-readable error message\n example: Invalid API key.\n\n FinancialContext:\n type: object\n required:\n - version\n - updated_at\n - currency\n - status\n - transactions\n - recurring\n - budgets\n - goals\n - snapshots\n - liabilities\n - holdings\n - health\n properties:\n version:\n type: string\n enum: [v1]\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n currency:\n type: string\n enum: [USD]\n status:\n $ref: '#/components/schemas/FinancialContextStatus'\n transactions:\n $ref: '#/components/schemas/TransactionIndex'\n recurring:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextRecurring'\n budgets:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextBudget'\n goals:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextGoal'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextSnapshot'\n liabilities:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextLiability'\n holdings:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextHolding'\n health:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextHealth'\n - type: 'null'\n\n FinancialContextStatus:\n type: object\n required:\n - position\n - accounts\n properties:\n position:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextPosition'\n - type: 'null'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextAccount'\n\n FinancialContextPosition:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - investments\n - other_assets\n - total_assets\n properties:\n date:\n type: string\n format: date\n nullable: true\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n other_assets:\n type: number\n nullable: true\n total_assets:\n type: number\n nullable: true\n\n FinancialContextAccount:\n type: object\n required:\n - id\n - name\n - type\n - subtype\n - group\n - institution\n - mask\n - balance\n - available\n - currency\n - updated_at\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n subtype:\n type: string\n nullable: true\n group:\n type: string\n enum: [cash, debt, investments]\n nullable: true\n institution:\n type: string\n nullable: true\n mask:\n type: string\n nullable: true\n balance:\n type: number\n nullable: true\n available:\n type: number\n nullable: true\n currency:\n type: string\n nullable: true\n updated_at:\n type: string\n format: date-time\n nullable: true\n\n TransactionIndex:\n type: object\n required:\n - total\n - months\n properties:\n total:\n type: integer\n minimum: 0\n months:\n type: array\n items:\n type: object\n required:\n - month\n - count\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n count:\n type: integer\n minimum: 0\n\n TransactionMonth:\n type: object\n required:\n - month\n - start_date\n - end_date\n - count\n - items\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n start_date:\n type: string\n format: date\n end_date:\n type: string\n format: date\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n LatestTransactions:\n type: object\n required:\n - since\n - window_days\n - count\n - items\n properties:\n since:\n type: string\n format: date\n description: Inclusive lower bound for the latest transaction window\n window_days:\n type: integer\n enum: [10]\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n FinancialContextTransaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - merchant\n - name\n - category\n - subcategory\n - pending\n - currency\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n date:\n type: string\n format: date\n nullable: true\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n merchant:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n category:\n type: string\n nullable: true\n subcategory:\n type: string\n nullable: true\n pending:\n type: boolean\n nullable: true\n currency:\n type: string\n nullable: true\n\n FinancialContextRecurring:\n type: object\n required:\n - id\n - account_id\n - direction\n - frequency\n - status\n - merchant\n - amount\n - next_date\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n direction:\n type: string\n enum: [inflow, outflow]\n nullable: true\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUALLY, ANNUALLY]\n nullable: true\n status:\n type: string\n enum: [active, inactive, dismissed]\n nullable: true\n merchant:\n type: string\n nullable: true\n amount:\n type: number\n nullable: true\n next_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextBudget:\n type: object\n required:\n - id\n - name\n - type\n - period\n - status\n - amount\n - spent\n - remaining\n - used_percent\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [category, merchant]\n period:\n type: string\n enum: [weekly, biweekly, monthly]\n status:\n type: string\n enum: [under, warning, over]\n amount:\n type: number\n spent:\n type: number\n remaining:\n type: number\n used_percent:\n type: number\n\n FinancialContextGoal:\n type: object\n required:\n - id\n - name\n - category\n - status\n - target\n - current\n - progress_percent\n - target_date\n properties:\n id:\n type: string\n name:\n type: string\n category:\n type: string\n status:\n type: string\n enum: [not_started, in_progress, on_track, behind, completed]\n target:\n type: number\n current:\n type: number\n progress_percent:\n type: number\n target_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextSnapshot:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - income\n - expenses\n - cash_flow\n - savings_rate\n - investments\n - assets\n - health_score\n properties:\n date:\n type: string\n format: date\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n income:\n type: number\n nullable: true\n expenses:\n type: number\n nullable: true\n cash_flow:\n type: number\n nullable: true\n savings_rate:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n assets:\n type: number\n nullable: true\n health_score:\n type: number\n nullable: true\n\n FinancialContextLiability:\n type: object\n required:\n - account_id\n - type\n - balance\n - minimum_payment\n - due_date\n - interest_rate\n - rate_type\n - overdue\n properties:\n account_id:\n type: string\n nullable: true\n type:\n type: string\n enum: [credit, student, mortgage, other]\n nullable: true\n balance:\n type: number\n nullable: true\n minimum_payment:\n type: number\n nullable: true\n due_date:\n type: string\n format: date\n nullable: true\n interest_rate:\n type: number\n nullable: true\n rate_type:\n type: string\n enum: [fixed, variable]\n nullable: true\n overdue:\n type: boolean\n nullable: true\n\n FinancialContextHolding:\n type: object\n required:\n - account_id\n - symbol\n - name\n - type\n - quantity\n - value\n - cost_basis\n properties:\n account_id:\n type: string\n nullable: true\n symbol:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n type:\n type: string\n enum: [cash, derivative, equity, etf, fixed_income, mutual_fund, other]\n nullable: true\n quantity:\n type: number\n nullable: true\n value:\n type: number\n nullable: true\n cost_basis:\n type: number\n nullable: true\n\n FinancialContextHealth:\n type: object\n required:\n - score\n - label\n - level\n - summary\n - data_completeness\n - pillars\n properties:\n score:\n type: number\n label:\n type: string\n enum: [Needs Attention, Good, Strong]\n level:\n type: string\n enum: [critical, poor, fair, good, strong]\n summary:\n type: string\n data_completeness:\n type: number\n pillars:\n oneOf:\n - type: object\n required:\n - spend\n - save\n - borrow\n - build\n properties:\n spend:\n type: number\n nullable: true\n save:\n type: number\n nullable: true\n borrow:\n type: number\n nullable: true\n build:\n type: number\n nullable: true\n - type: 'null'\n\n FinancialContextMeta:\n type: object\n required:\n - version\n - user_id\n - context_id\n - generated_at\n - updated_at\n - content_hash\n - byte_length\n - counts\n properties:\n version:\n type: string\n enum: [v1]\n user_id:\n type: string\n context_id:\n type: string\n generated_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n content_hash:\n type: string\n description: Opaque artifact version token and ETag value. This is the only public artifact version token.\n byte_length:\n type: integer\n minimum: 0\n counts:\n type: object\n required:\n - accounts\n - transaction_months\n - transactions\n - snapshots\n properties:\n accounts:\n type: integer\n minimum: 0\n transaction_months:\n type: integer\n minimum: 0\n transactions:\n type: integer\n minimum: 0\n snapshots:\n type: integer\n minimum: 0\n\ntags:\n - name: Export\n description: Export financial data as structured JSON\n";
export declare const baseOpenApiYaml = "openapi: 3.1.0\ninfo:\n title: Warm API\n description: |\n Read your financial context or invoke supported Warm actions through a compact operation catalog.\n\n ## Authentication\n All requests use `Authorization: Bearer`. API keys are created for either read-only context\n access or automation access in Settings on paid Warm plans.\n\n Read/export routes accept `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`.\n Automation routes require an automation key (`warm_auto_...`) and do not accept access tokens.\n\n Unauthenticated responses include `WWW-Authenticate` guidance and protected resource metadata.\n\n ## Rate Limits\n - Context keys: 200 requests per hour per key\n - Automation keys: 500 requests per hour per key\n - Rate limit headers included in authenticated responses\n - `/api/export` supports dataset-scoped delta sync with `since` and publishes edge-cache metadata headers\n version: '2.0.0'\n contact:\n name: Warm Support\n url: https://warm.io/support\n license:\n name: Proprietary\n url: https://warm.io/terms\n\nservers:\n - url: https://app.warm.io\n description: Production\n\nsecurity:\n - BearerAuth: []\n\npaths:\n /api/verify:\n get:\n operationId: verifyApiAccess\n summary: Verify API credentials\n description: |\n Validate a Warm API key or signed-in user access token against the public verification route.\n\n This endpoint is the canonical readiness check for public API clients and discovery tools.\n tags:\n - Verification\n responses:\n '200':\n description: Credentials are valid and the caller has API access\n content:\n application/json:\n schema:\n type: object\n required:\n - status\n - valid\n - auth\n properties:\n status:\n type: string\n enum: [ok]\n valid:\n type: boolean\n auth:\n type: string\n description: Auth method used to satisfy verification\n audience:\n type: string\n enum: [context, automation, oauth]\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/export:\n get:\n operationId: getDatasetExport\n summary: Get a typed dataset export\n description: |\n Fetch a canonical financial dataset export from the unified `/api/export` surface.\n\n Use `dataset=transactions` for paginated transaction history. Other datasets return\n a typed JSON object keyed by the dataset name or retained public alias.\n\n Preferred dataset names are `accounts`, `transactions`, `snapshots`, `recurring`,\n `budgets`, `goals`, `health`, `liabilities`, and `holdings`.\n tags:\n - Export\n parameters:\n - name: dataset\n in: query\n description: Dataset identifier or retained public alias\n required: true\n schema:\n type: string\n enum:\n - accounts\n - transactions\n - snapshots\n - recurring\n - budgets\n - goals\n - health\n - liabilities\n - holdings\n - name: since\n in: query\n description: ISO timestamp for incremental exports\n required: false\n schema:\n type: string\n format: date-time\n - name: last_knowledge\n in: query\n description: Legacy alias for `since`\n required: false\n schema:\n type: string\n format: date-time\n - name: limit\n in: query\n description: Maximum transactions per page when `dataset=transactions`\n required: false\n schema:\n type: integer\n minimum: 1\n maximum: 1000\n - name: cursor\n in: query\n description: Pagination token from `pagination.next_cursor` when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: accountId\n in: query\n description: Optional account filter when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: search\n in: query\n description: Optional merchant or description search filter when `dataset=transactions`\n required: false\n schema:\n type: string\n minLength: 1\n maxLength: 120\n responses:\n '200':\n description: Successful dataset export\n content:\n application/json:\n schema:\n type: object\n description: Dataset-shaped JSON response keyed by the requested dataset\n properties:\n generated_at:\n type: string\n format: date-time\n next_knowledge:\n type: string\n format: date-time\n nullable: true\n pagination:\n $ref: '#/components/schemas/Pagination'\n additionalProperties: true\n '400':\n description: Invalid query parameters\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context:\n get:\n operationId: getFinancialContext\n summary: Get compact financial context\n description: |\n Fetch the current compact FinancialContext artifact for the authenticated user.\n\n This response does not include transaction items. Use\n `/api/financial-context/transactions` for month-addressed transaction pages or the\n fixed 10-day latest transaction window.\n tags:\n - Export\n responses:\n '200':\n description: Compact FinancialContext artifact\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContext'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/transactions:\n get:\n operationId: getFinancialContextTransactions\n summary: Get financial-context transactions\n description: |\n Fetch one transaction month or the fixed 10-day latest transaction window from the\n current financial-context artifact.\n\n The raw API requires exactly one selector: `month=YYYY-MM` or `latest=1`.\n Bare calls are invalid on the raw API. The current `@warmio/mcp` `get_transactions` tool\n maps bare calls to the fixed latest window and accepts only `month` (`YYYY-MM`) or\n `latest: true`; it does not accept cursor, search, or `last_knowledge`.\n Transaction amounts use the Warm/Plaid sign convention:\n positive = expense/debit, negative = income/credit.\n\n A well-formed month inside the covered range with no matching items returns `200` with\n `count: 0` and `items: []`. Months before the earliest indexed month or after the latest\n covered month return `404`.\n tags:\n - Export\n parameters:\n - name: month\n in: query\n description: Transaction month selector in YYYY-MM format. Mutually exclusive with `latest`.\n required: false\n schema:\n type: string\n pattern: '^\\d{4}-(0[1-9]|1[0-2])$'\n example: '2026-07'\n - name: latest\n in: query\n description: Set to `1` for the fixed 10-day latest transaction window.\n required: false\n schema:\n type: string\n enum: ['1']\n responses:\n '200':\n description: Transaction month page or latest transaction window\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n oneOf:\n - $ref: '#/components/schemas/TransactionMonth'\n - $ref: '#/components/schemas/LatestTransactions'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '400':\n description: Missing selectors, mutually exclusive selectors, malformed `month`, or `latest` other than `1`\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/meta:\n get:\n operationId: getFinancialContextMeta\n summary: Get financial-context metadata\n description: |\n Fetch operational metadata for the current financial-context artifact, including the\n content hash used as the ETag, byte length, row counts, and freshness timestamps.\n `content_hash` is the public artifact version token; this metadata does not expose a\n public `data_version`.\n tags:\n - Export\n responses:\n '200':\n description: Financial-context metadata\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContextMeta'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/automation/operations/search:\n post:\n operationId: searchOperations\n summary: Search supported automation operations\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: false\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n properties:\n query:\n type: string\n maxLength: 200\n responses:\n '200':\n description: Matching operations\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operations]\n properties:\n operations:\n type: array\n items:\n $ref: '#/components/schemas/AutomationOperation'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '400':\n $ref: '#/components/responses/BadRequest'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/describe:\n post:\n operationId: describeOperation\n summary: Describe one operation and request owner approval when required\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationRequest'\n responses:\n '200':\n description: Operation schema and optional pending owner approval\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operation]\n properties:\n operation:\n allOf:\n - $ref: '#/components/schemas/AutomationOperation'\n - type: object\n properties:\n input_schema:\n type: object\n approval:\n type: object\n additionalProperties: false\n required: [id, status, approval_url, expires_at]\n properties:\n id: { type: string, format: uuid }\n status: { type: string, enum: [pending] }\n approval_url: { type: string, format: uri }\n expires_at: { type: string, format: date-time }\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/invoke:\n post:\n operationId: invokeOperation\n summary: Invoke one supported operation\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationInvokeRequest'\n responses:\n '200':\n description: Wrapped response from the invoked operation\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/AutomationInvocationResponse'\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '409':\n description: Owner approval is required, invalid, expired, or already used\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\ncomponents:\n securitySchemes:\n BearerAuth:\n type: http\n scheme: bearer\n description: 'Read/export format: `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`'\n AutomationKeyAuth:\n type: http\n scheme: bearer\n description: 'Automation format: `Authorization: Bearer warm_auto_...`'\n\n headers:\n ETag:\n description: Quoted content hash for If-None-Match revalidation\n schema:\n type: string\n example: '\"7b6f9d4c...\"'\n PrivateNoStore:\n description: Private financial responses are not stored by browsers or shared caches\n schema:\n type: string\n example: private, no-store\n\n responses:\n BadRequest:\n description: The request body or operation input is invalid\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Unauthorized:\n description: Missing or invalid credentials\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Forbidden:\n description: The caller is authenticated but does not have API access\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n NotFound:\n description: The requested operation does not exist\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n InternalError:\n description: The request could not be completed safely\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n PayloadTooLarge:\n description: The response would exceed the public API response-size limit\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n RateLimited:\n description: Hourly per-credential rate limit exceeded\n headers:\n Retry-After:\n description: Seconds until the rate-limit window resets\n schema:\n type: integer\n example: 3600\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n\n schemas:\n AutomationOperation:\n type: object\n additionalProperties: false\n required: [operation_id, summary, description, method, path, risk, confirmation_required]\n properties:\n operation_id: { type: string }\n summary: { type: string }\n description: { type: string }\n method: { type: string, enum: [GET, POST, PATCH, PUT, DELETE] }\n path: { type: string }\n risk:\n type: array\n items: { type: string, enum: [read, write, destructive, external_effect] }\n confirmation_required: { type: boolean }\n OperationRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n OperationInvokeRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n approval_id:\n type: string\n format: uuid\n description: Matching owner approval required for every write operation\n OperationInput:\n type: object\n additionalProperties: false\n properties:\n params: { type: object, additionalProperties: { type: string } }\n body: { type: object, additionalProperties: true }\n AutomationInvocationResponse:\n type: object\n additionalProperties: false\n required: [body, headers, operation_id, status]\n properties:\n body: {}\n headers:\n type: object\n additionalProperties: { type: string }\n operation_id: { type: string }\n status: { type: integer, minimum: 100, maximum: 599 }\n ExportResponse:\n type: object\n required:\n - schema_version\n - generated_at\n - user_id\n - data_version\n - next_knowledge\n - accounts\n - transactions\n - snapshots\n - pagination\n properties:\n schema_version:\n type: string\n description: API schema version\n example: v1\n generated_at:\n type: string\n format: date-time\n description: Response generation timestamp\n example: '2026-01-10T15:30:00Z'\n user_id:\n type: string\n format: uuid\n description: Your user ID\n example: a1b2c3d4-e5f6-7890-abcd-ef1234567890\n data_version:\n type: integer\n description: Monotonic version number (increments on data changes)\n example: 42\n next_knowledge:\n type: string\n format: date-time\n description: Use as `last_knowledge` in next request for delta sync\n example: '2026-01-10T15:30:00Z'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/Account'\n transactions:\n type: array\n items:\n $ref: '#/components/schemas/Transaction'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/Snapshot'\n pagination:\n $ref: '#/components/schemas/Pagination'\n\n Account:\n type: object\n required:\n - id\n - name\n - type\n - current_balance\n - iso_currency_code\n - is_active\n properties:\n id:\n type: string\n format: uuid\n description: Unique account identifier\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n account_id:\n type: string\n description: External account ID (from Plaid)\n example: plaid_acc_ABC123xyz\n name:\n type: string\n description: Display name with masked account number\n example: 'Checking ****1234'\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n description: Account type\n example: depository\n subtype:\n type: string\n description: Specific subtype\n example: checking\n enum:\n - checking\n - savings\n - money market\n - cd\n - credit card\n - mortgage\n - student\n - auto\n - 401k\n - ira\n - brokerage\n - other\n current_balance:\n type: number\n description: Current balance (positive for assets)\n example: 5420.50\n available_balance:\n type: number\n nullable: true\n description: Available balance (may differ from current)\n example: 5320.50\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n mask:\n type: string\n description: Last 4 digits of account number\n example: '1234'\n is_active:\n type: boolean\n description: Whether account is actively syncing\n example: true\n created_at:\n type: string\n format: date-time\n example: '2025-06-15T10:00:00Z'\n updated_at:\n type: string\n format: date-time\n example: '2026-01-10T12:00:00Z'\n\n Transaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - name\n - primary_category\n - detailed_category\n - pending\n - iso_currency_code\n properties:\n id:\n type: string\n format: uuid\n description: Unique transaction identifier\n example: txn_9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d\n transaction_id:\n type: string\n description: External transaction ID (from Plaid)\n example: plaid_txn_XYZ789abc\n account_id:\n type: string\n format: uuid\n description: Parent account ID\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n date:\n type: string\n format: date\n description: Posted date\n example: '2026-01-09'\n authorized_date:\n type: string\n format: date\n nullable: true\n description: Authorization date (if different)\n example: '2026-01-08'\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n example: 42.50\n name:\n type: string\n description: Raw transaction description from bank\n example: 'TRADER JOES #123 SAN FRANCISCO'\n merchant_name:\n type: string\n nullable: true\n description: Cleaned merchant name\n example: \"Trader Joe's\"\n merchant_entity_id:\n type: string\n nullable: true\n description: Unique merchant identifier\n example: eyg8o776k0QmNgVpAmaQj4WgzW9Qzo6O51gdd\n logo:\n type: string\n format: uri\n nullable: true\n description: URL to merchant logo\n example: https://plaid-merchant-logos.plaid.com/trader_joes.png\n primary_category:\n type: string\n description: High-level category\n example: FOOD_AND_DRINK\n enum:\n - INCOME\n - TRANSFER_IN\n - TRANSFER_OUT\n - LOAN_PAYMENTS\n - BANK_FEES\n - ENTERTAINMENT\n - FOOD_AND_DRINK\n - GENERAL_MERCHANDISE\n - HOME_IMPROVEMENT\n - MEDICAL\n - PERSONAL_CARE\n - GENERAL_SERVICES\n - GOVERNMENT_AND_NON_PROFIT\n - TRANSPORTATION\n - TRAVEL\n - RENT_AND_UTILITIES\n detailed_category:\n type: string\n description: Specific category\n example: FOOD_AND_DRINK_GROCERIES\n category_confidence:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n description: Category confidence level\n example: VERY_HIGH\n payment_channel:\n type: string\n enum: [in_store, online, other]\n description: How payment was made\n example: in_store\n pending:\n type: boolean\n description: Whether transaction is still pending\n example: false\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n location:\n $ref: '#/components/schemas/Location'\n created_at:\n type: string\n format: date-time\n example: '2026-01-09T18:30:00Z'\n\n Location:\n type: object\n nullable: true\n properties:\n city:\n type: string\n nullable: true\n example: San Francisco\n region:\n type: string\n nullable: true\n example: CA\n postal_code:\n type: string\n nullable: true\n example: '94110'\n country:\n type: string\n nullable: true\n example: US\n\n Snapshot:\n type: object\n required:\n - id\n - period_type\n - period_start\n - period_end\n - snapshot_date\n properties:\n id:\n type: string\n format: uuid\n description: Unique snapshot identifier\n example: snap_1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\n period_type:\n type: string\n enum: [daily, weekly, monthly]\n description: Period granularity\n example: daily\n period_start:\n type: string\n format: date\n description: Period start date\n example: '2026-01-01'\n period_end:\n type: string\n format: date\n description: Period end date\n example: '2026-01-31'\n snapshot_date:\n type: string\n format: date\n description: When snapshot was taken\n example: '2026-01-10'\n income:\n type: number\n description: Total income for period\n example: 6500.00\n expenses:\n type: number\n description: Total expenses for period\n example: 4200.00\n net_cash_flow:\n type: number\n description: Income minus expenses\n example: 2300.00\n savings_rate:\n type: number\n description: Percentage saved (0.0 to 1.0)\n example: 0.35\n net_worth:\n type: number\n description: Total assets minus liabilities\n example: 45000.00\n total_cash:\n type: number\n description: Sum of depository balances\n example: 12500.00\n total_debt:\n type: number\n description: Sum of credit/loan balances\n example: 8500.00\n investment_value:\n type: number\n description: Investment account value\n example: 28000.00\n asset_value:\n type: number\n description: Other asset values\n example: 15000.00\n burn_rate:\n type: number\n description: Average daily spending\n example: 140.00\n runway_days:\n type: integer\n description: Days of expenses covered by cash\n example: 89\n safe_to_spend:\n type: number\n description: Estimated discretionary spending available\n example: 1800.00\n recurring_total:\n type: number\n description: Sum of recurring expenses\n example: 1250.00\n spending_by_category:\n type: array\n items:\n $ref: '#/components/schemas/CategorySpending'\n top_merchants:\n type: array\n items:\n $ref: '#/components/schemas/MerchantSpending'\n income_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: 0.05\n spending_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: -0.08\n created_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n\n CategorySpending:\n type: object\n properties:\n category:\n type: string\n example: FOOD_AND_DRINK\n amount:\n type: number\n example: 850.00\n percentage:\n type: number\n example: 20.2\n\n MerchantSpending:\n type: object\n properties:\n merchant:\n type: string\n example: Whole Foods\n amount:\n type: number\n example: 420.00\n count:\n type: integer\n example: 8\n\n Pagination:\n type: object\n properties:\n limit:\n type: integer\n description: Transactions per page\n example: 1000\n next_cursor:\n type: string\n nullable: true\n description: Token for next page (null if no more pages)\n example: eyJkYXRlIjoiMjAyNi0wMS0wMSIsImlkIjoiYWJjMTIzIn0\n\n RecurringStream:\n type: object\n properties:\n id:\n type: string\n format: uuid\n description: Unique stream identifier\n example: cb3daddd-1f82-43ed-ba9f-60ecf8c937e3\n stream_id:\n type: string\n description: External stream ID (from Plaid)\n example: LN053MyLw9H9MQ5ybwrJim1Kj495gbsJ98aeM\n account_id:\n type: string\n description: Account ID this stream belongs to\n example: Dpnjw06KAJHYVmr5jqejimy4nE0OQJczvD8KD\n stream_type:\n type: string\n enum: [inflow, outflow]\n description: Direction of recurring payment\n example: outflow\n merchant_name:\n type: string\n description: Merchant or payee name\n example: Ting\n description:\n type: string\n description: Transaction description pattern\n example: 'TING* INV#MI-4636263'\n category:\n type: object\n properties:\n primary:\n type: string\n example: RENT_AND_UTILITIES\n detailed:\n type: string\n example: RENT_AND_UTILITIES_TELEPHONE\n confidence_level:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, SEMI_MONTHLY, MONTHLY, ANNUALLY, UNKNOWN]\n description: Payment frequency\n example: MONTHLY\n average_amount:\n type: number\n description: Average transaction amount\n example: 118.98\n last_amount:\n type: number\n description: Most recent transaction amount\n example: 146.58\n is_active:\n type: boolean\n description: Whether stream is currently active\n example: true\n status:\n type: string\n enum: [MATURE, EARLY_DETECTION, TOMBSTONED]\n description: Detection status\n example: MATURE\n first_date:\n type: string\n format: date\n description: First detected transaction date\n example: '2025-07-15'\n last_date:\n type: string\n format: date\n description: Most recent transaction date\n example: '2025-09-15'\n next_date:\n type: string\n format: date\n description: Predicted next transaction date\n example: '2025-10-15'\n source:\n type: string\n enum: [plaid, user]\n description: How stream was detected\n example: plaid\n\n Error:\n type: object\n required:\n - error\n properties:\n error:\n type: string\n description: Human-readable error message\n example: Invalid API key.\n\n FinancialContext:\n type: object\n required:\n - version\n - updated_at\n - currency\n - status\n - transactions\n - recurring\n - budgets\n - goals\n - snapshots\n - liabilities\n - holdings\n - health\n properties:\n version:\n type: string\n enum: [v1]\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n currency:\n type: string\n enum: [USD]\n status:\n $ref: '#/components/schemas/FinancialContextStatus'\n transactions:\n $ref: '#/components/schemas/TransactionIndex'\n recurring:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextRecurring'\n budgets:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextBudget'\n goals:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextGoal'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextSnapshot'\n liabilities:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextLiability'\n holdings:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextHolding'\n health:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextHealth'\n - type: 'null'\n\n FinancialContextStatus:\n type: object\n required:\n - position\n - accounts\n properties:\n position:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextPosition'\n - type: 'null'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextAccount'\n\n FinancialContextPosition:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - investments\n - other_assets\n - total_assets\n properties:\n date:\n type: string\n format: date\n nullable: true\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n other_assets:\n type: number\n nullable: true\n total_assets:\n type: number\n nullable: true\n\n FinancialContextAccount:\n type: object\n required:\n - id\n - name\n - type\n - subtype\n - group\n - institution\n - mask\n - balance\n - available\n - currency\n - updated_at\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n subtype:\n type: string\n nullable: true\n group:\n type: string\n enum: [cash, debt, investments]\n nullable: true\n institution:\n type: string\n nullable: true\n mask:\n type: string\n nullable: true\n balance:\n type: number\n nullable: true\n available:\n type: number\n nullable: true\n currency:\n type: string\n nullable: true\n updated_at:\n type: string\n format: date-time\n nullable: true\n\n TransactionIndex:\n type: object\n required:\n - total\n - months\n properties:\n total:\n type: integer\n minimum: 0\n months:\n type: array\n items:\n type: object\n required:\n - month\n - count\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n count:\n type: integer\n minimum: 0\n\n TransactionMonth:\n type: object\n required:\n - month\n - start_date\n - end_date\n - count\n - items\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n start_date:\n type: string\n format: date\n end_date:\n type: string\n format: date\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n LatestTransactions:\n type: object\n required:\n - since\n - window_days\n - count\n - items\n properties:\n since:\n type: string\n format: date\n description: Inclusive lower bound for the latest transaction window\n window_days:\n type: integer\n enum: [10]\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n FinancialContextTransaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - merchant\n - name\n - category\n - subcategory\n - pending\n - currency\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n date:\n type: string\n format: date\n nullable: true\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n merchant:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n category:\n type: string\n nullable: true\n subcategory:\n type: string\n nullable: true\n pending:\n type: boolean\n nullable: true\n currency:\n type: string\n nullable: true\n\n FinancialContextRecurring:\n type: object\n required:\n - id\n - account_id\n - direction\n - frequency\n - status\n - merchant\n - amount\n - next_date\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n direction:\n type: string\n enum: [inflow, outflow]\n nullable: true\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUALLY, ANNUALLY]\n nullable: true\n status:\n type: string\n enum: [active, inactive, dismissed]\n nullable: true\n merchant:\n type: string\n nullable: true\n amount:\n type: number\n nullable: true\n next_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextBudget:\n type: object\n required:\n - id\n - name\n - type\n - period\n - status\n - amount\n - spent\n - remaining\n - used_percent\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [category, merchant]\n period:\n type: string\n enum: [weekly, biweekly, monthly]\n status:\n type: string\n enum: [under, warning, over]\n amount:\n type: number\n spent:\n type: number\n remaining:\n type: number\n used_percent:\n type: number\n\n FinancialContextGoal:\n type: object\n required:\n - id\n - name\n - category\n - status\n - target\n - current\n - progress_percent\n - target_date\n properties:\n id:\n type: string\n name:\n type: string\n category:\n type: string\n status:\n type: string\n enum: [not_started, in_progress, on_track, behind, completed]\n target:\n type: number\n current:\n type: number\n progress_percent:\n type: number\n target_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextSnapshot:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - income\n - expenses\n - cash_flow\n - savings_rate\n - investments\n - assets\n - health_score\n properties:\n date:\n type: string\n format: date\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n income:\n type: number\n nullable: true\n expenses:\n type: number\n nullable: true\n cash_flow:\n type: number\n nullable: true\n savings_rate:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n assets:\n type: number\n nullable: true\n health_score:\n type: number\n nullable: true\n\n FinancialContextLiability:\n type: object\n required:\n - account_id\n - type\n - balance\n - minimum_payment\n - due_date\n - interest_rate\n - rate_type\n - overdue\n properties:\n account_id:\n type: string\n nullable: true\n type:\n type: string\n enum: [credit, student, mortgage, other]\n nullable: true\n balance:\n type: number\n nullable: true\n minimum_payment:\n type: number\n nullable: true\n due_date:\n type: string\n format: date\n nullable: true\n interest_rate:\n type: number\n nullable: true\n rate_type:\n type: string\n enum: [fixed, variable]\n nullable: true\n overdue:\n type: boolean\n nullable: true\n\n FinancialContextHolding:\n type: object\n required:\n - account_id\n - symbol\n - name\n - type\n - quantity\n - value\n - cost_basis\n properties:\n account_id:\n type: string\n nullable: true\n symbol:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n type:\n type: string\n enum: [cash, derivative, equity, etf, fixed_income, mutual_fund, other]\n nullable: true\n quantity:\n type: number\n nullable: true\n value:\n type: number\n nullable: true\n cost_basis:\n type: number\n nullable: true\n\n FinancialContextHealth:\n type: object\n required:\n - score\n - label\n - level\n - summary\n - data_completeness\n - pillars\n properties:\n score:\n type: number\n label:\n type: string\n enum: [Needs Attention, Good, Strong]\n level:\n type: string\n enum: [critical, poor, fair, good, strong]\n summary:\n type: string\n data_completeness:\n type: number\n pillars:\n oneOf:\n - type: object\n required:\n - spend\n - save\n - borrow\n - build\n properties:\n spend:\n type: number\n nullable: true\n save:\n type: number\n nullable: true\n borrow:\n type: number\n nullable: true\n build:\n type: number\n nullable: true\n - type: 'null'\n\n FinancialContextMeta:\n type: object\n required:\n - version\n - user_id\n - context_id\n - generated_at\n - updated_at\n - content_hash\n - byte_length\n - counts\n properties:\n version:\n type: string\n enum: [v1]\n user_id:\n type: string\n context_id:\n type: string\n generated_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n content_hash:\n type: string\n description: Opaque artifact version token and ETag value. This is the only public artifact version token.\n byte_length:\n type: integer\n minimum: 0\n counts:\n type: object\n required:\n - accounts\n - transaction_months\n - transactions\n - snapshots\n properties:\n accounts:\n type: integer\n minimum: 0\n transaction_months:\n type: integer\n minimum: 0\n transactions:\n type: integer\n minimum: 0\n snapshots:\n type: integer\n minimum: 0\n\ntags:\n - name: Export\n description: Export financial data as structured JSON\n";
//# sourceMappingURL=base-openapi.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"base-openapi.d.ts","sourceRoot":"","sources":["../../src/generated/base-openapi.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,oy/CAAoy/C,CAAC"}
{"version":3,"file":"base-openapi.d.ts","sourceRoot":"","sources":["../../src/generated/base-openapi.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,yy/CAAyy/C,CAAC"}
// Generated by tools/tasks/generate-openapi-base.mts. Do not edit.
export const baseOpenApiYaml = "openapi: 3.1.0\ninfo:\n title: Warm API\n description: |\n Read your financial context or invoke supported Warm actions through a compact operation catalog.\n\n ## Authentication\n All requests use `Authorization: Bearer`. API keys are created for either read-only context\n access or automation access in Settings on paid Warm plans.\n\n Read/export routes accept `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`.\n Automation routes require an automation key (`warm_auto_...`) and do not accept access tokens.\n\n Unauthenticated responses include `WWW-Authenticate` guidance and protected resource metadata.\n\n ## Rate Limits\n - Context keys: 200 requests per hour per key\n - Automation keys: 500 requests per hour per key\n - Rate limit headers included in authenticated responses\n - `/api/export` supports dataset-scoped delta sync with `since` and publishes edge-cache metadata headers\n version: '2.0.0'\n contact:\n name: Warm Support\n url: https://warm.io/support\n license:\n name: Proprietary\n url: https://warm.io/terms\n\nservers:\n - url: https://app.warm.io\n description: Production\n\nsecurity:\n - BearerAuth: []\n\npaths:\n /api/verify:\n get:\n operationId: verifyApiAccess\n summary: Verify API credentials\n description: |\n Validate a Warm API key or signed-in user access token against the public verification route.\n\n This endpoint is the canonical readiness check for public API clients and discovery tools.\n tags:\n - Verification\n responses:\n '200':\n description: Credentials are valid and the caller has API access\n content:\n application/json:\n schema:\n type: object\n required:\n - status\n - valid\n - auth\n properties:\n status:\n type: string\n enum: [ok]\n valid:\n type: boolean\n auth:\n type: string\n description: Auth method used to satisfy verification\n audience:\n type: string\n enum: [context, automation, oauth]\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/export:\n get:\n operationId: getDatasetExport\n summary: Get a typed dataset export\n description: |\n Fetch a canonical financial dataset export from the unified `/api/export` surface.\n\n Use `dataset=transactions` for paginated transaction history. Other datasets return\n a typed JSON object keyed by the dataset name or retained public alias.\n\n Preferred dataset names are `accounts`, `transactions`, `snapshots`, `recurring`,\n `budgets`, `goals`, `health`, `liabilities`, and `holdings`.\n tags:\n - Export\n parameters:\n - name: dataset\n in: query\n description: Dataset identifier or retained public alias\n required: true\n schema:\n type: string\n enum:\n - accounts\n - transactions\n - snapshots\n - recurring\n - budgets\n - goals\n - health\n - liabilities\n - holdings\n - name: since\n in: query\n description: ISO timestamp for incremental exports\n required: false\n schema:\n type: string\n format: date-time\n - name: last_knowledge\n in: query\n description: Legacy alias for `since`\n required: false\n schema:\n type: string\n format: date-time\n - name: limit\n in: query\n description: Maximum transactions per page when `dataset=transactions`\n required: false\n schema:\n type: integer\n minimum: 1\n maximum: 1000\n - name: cursor\n in: query\n description: Pagination token from `pagination.next_cursor` when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: accountId\n in: query\n description: Optional account filter when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: search\n in: query\n description: Optional merchant or description search filter when `dataset=transactions`\n required: false\n schema:\n type: string\n minLength: 1\n maxLength: 120\n responses:\n '200':\n description: Successful dataset export\n content:\n application/json:\n schema:\n type: object\n description: Dataset-shaped JSON response keyed by the requested dataset\n properties:\n generated_at:\n type: string\n format: date-time\n next_knowledge:\n type: string\n format: date-time\n nullable: true\n pagination:\n $ref: '#/components/schemas/Pagination'\n additionalProperties: true\n '400':\n description: Invalid query parameters\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context:\n get:\n operationId: getFinancialContext\n summary: Get compact financial context\n description: |\n Fetch the current compact FinancialContext artifact for the authenticated user.\n\n This response does not include transaction items. Use\n `/api/financial-context/transactions` for month-addressed transaction pages or the\n fixed 10-day latest transaction window.\n tags:\n - Export\n responses:\n '200':\n description: Compact FinancialContext artifact\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContext'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/transactions:\n get:\n operationId: getFinancialContextTransactions\n summary: Get financial-context transactions\n description: |\n Fetch one transaction month or the fixed 10-day latest transaction window from the\n current financial-context artifact.\n\n The raw API requires exactly one selector: `month=YYYY-MM` or `latest=1`.\n Bare calls are invalid on the raw API. The `@warmio/mcp` v7 `get_transactions` tool\n maps bare calls to the fixed latest window and accepts only `month` (`YYYY-MM`) or\n `latest: true`; it does not accept cursor, search, or `last_knowledge`.\n Transaction amounts use the Warm/Plaid sign convention:\n positive = expense/debit, negative = income/credit.\n\n A well-formed month inside the covered range with no matching items returns `200` with\n `count: 0` and `items: []`. Months before the earliest indexed month or after the latest\n covered month return `404`.\n tags:\n - Export\n parameters:\n - name: month\n in: query\n description: Transaction month selector in YYYY-MM format. Mutually exclusive with `latest`.\n required: false\n schema:\n type: string\n pattern: '^\\d{4}-(0[1-9]|1[0-2])$'\n example: '2026-07'\n - name: latest\n in: query\n description: Set to `1` for the fixed 10-day latest transaction window.\n required: false\n schema:\n type: string\n enum: ['1']\n responses:\n '200':\n description: Transaction month page or latest transaction window\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n oneOf:\n - $ref: '#/components/schemas/TransactionMonth'\n - $ref: '#/components/schemas/LatestTransactions'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '400':\n description: Missing selectors, mutually exclusive selectors, malformed `month`, or `latest` other than `1`\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/meta:\n get:\n operationId: getFinancialContextMeta\n summary: Get financial-context metadata\n description: |\n Fetch operational metadata for the current financial-context artifact, including the\n content hash used as the ETag, byte length, row counts, and freshness timestamps.\n `content_hash` is the public artifact version token; this metadata does not expose a\n public `data_version`.\n tags:\n - Export\n responses:\n '200':\n description: Financial-context metadata\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContextMeta'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/automation/operations/search:\n post:\n operationId: searchOperations\n summary: Search supported automation operations\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: false\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n properties:\n query:\n type: string\n maxLength: 200\n responses:\n '200':\n description: Matching operations\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operations]\n properties:\n operations:\n type: array\n items:\n $ref: '#/components/schemas/AutomationOperation'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '400':\n $ref: '#/components/responses/BadRequest'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/describe:\n post:\n operationId: describeOperation\n summary: Describe one operation and request owner approval when required\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationRequest'\n responses:\n '200':\n description: Operation schema and optional pending owner approval\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operation]\n properties:\n operation:\n allOf:\n - $ref: '#/components/schemas/AutomationOperation'\n - type: object\n properties:\n input_schema:\n type: object\n approval:\n type: object\n additionalProperties: false\n required: [id, status, approval_url, expires_at]\n properties:\n id: { type: string, format: uuid }\n status: { type: string, enum: [pending] }\n approval_url: { type: string, format: uri }\n expires_at: { type: string, format: date-time }\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/invoke:\n post:\n operationId: invokeOperation\n summary: Invoke one supported operation\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationInvokeRequest'\n responses:\n '200':\n description: Wrapped response from the invoked operation\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/AutomationInvocationResponse'\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '409':\n description: Owner approval is required, invalid, expired, or already used\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\ncomponents:\n securitySchemes:\n BearerAuth:\n type: http\n scheme: bearer\n description: 'Read/export format: `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`'\n AutomationKeyAuth:\n type: http\n scheme: bearer\n description: 'Automation format: `Authorization: Bearer warm_auto_...`'\n\n headers:\n ETag:\n description: Quoted content hash for If-None-Match revalidation\n schema:\n type: string\n example: '\"7b6f9d4c...\"'\n PrivateNoStore:\n description: Private financial responses are not stored by browsers or shared caches\n schema:\n type: string\n example: private, no-store\n\n responses:\n BadRequest:\n description: The request body or operation input is invalid\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Unauthorized:\n description: Missing or invalid credentials\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Forbidden:\n description: The caller is authenticated but does not have API access\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n NotFound:\n description: The requested operation does not exist\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n InternalError:\n description: The request could not be completed safely\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n PayloadTooLarge:\n description: The response would exceed the public API response-size limit\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n RateLimited:\n description: Hourly per-credential rate limit exceeded\n headers:\n Retry-After:\n description: Seconds until the rate-limit window resets\n schema:\n type: integer\n example: 3600\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n\n schemas:\n AutomationOperation:\n type: object\n additionalProperties: false\n required: [operation_id, summary, description, method, path, risk, confirmation_required]\n properties:\n operation_id: { type: string }\n summary: { type: string }\n description: { type: string }\n method: { type: string, enum: [GET, POST, PATCH, PUT, DELETE] }\n path: { type: string }\n risk:\n type: array\n items: { type: string, enum: [read, write, destructive, external_effect] }\n confirmation_required: { type: boolean }\n OperationRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n OperationInvokeRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n approval_id:\n type: string\n format: uuid\n description: Matching owner approval required for every write operation\n OperationInput:\n type: object\n additionalProperties: false\n properties:\n params: { type: object, additionalProperties: { type: string } }\n body: { type: object, additionalProperties: true }\n AutomationInvocationResponse:\n type: object\n additionalProperties: false\n required: [body, headers, operation_id, status]\n properties:\n body: {}\n headers:\n type: object\n additionalProperties: { type: string }\n operation_id: { type: string }\n status: { type: integer, minimum: 100, maximum: 599 }\n ExportResponse:\n type: object\n required:\n - schema_version\n - generated_at\n - user_id\n - data_version\n - next_knowledge\n - accounts\n - transactions\n - snapshots\n - pagination\n properties:\n schema_version:\n type: string\n description: API schema version\n example: v1\n generated_at:\n type: string\n format: date-time\n description: Response generation timestamp\n example: '2026-01-10T15:30:00Z'\n user_id:\n type: string\n format: uuid\n description: Your user ID\n example: a1b2c3d4-e5f6-7890-abcd-ef1234567890\n data_version:\n type: integer\n description: Monotonic version number (increments on data changes)\n example: 42\n next_knowledge:\n type: string\n format: date-time\n description: Use as `last_knowledge` in next request for delta sync\n example: '2026-01-10T15:30:00Z'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/Account'\n transactions:\n type: array\n items:\n $ref: '#/components/schemas/Transaction'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/Snapshot'\n pagination:\n $ref: '#/components/schemas/Pagination'\n\n Account:\n type: object\n required:\n - id\n - name\n - type\n - current_balance\n - iso_currency_code\n - is_active\n properties:\n id:\n type: string\n format: uuid\n description: Unique account identifier\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n account_id:\n type: string\n description: External account ID (from Plaid)\n example: plaid_acc_ABC123xyz\n name:\n type: string\n description: Display name with masked account number\n example: 'Checking ****1234'\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n description: Account type\n example: depository\n subtype:\n type: string\n description: Specific subtype\n example: checking\n enum:\n - checking\n - savings\n - money market\n - cd\n - credit card\n - mortgage\n - student\n - auto\n - 401k\n - ira\n - brokerage\n - other\n current_balance:\n type: number\n description: Current balance (positive for assets)\n example: 5420.50\n available_balance:\n type: number\n nullable: true\n description: Available balance (may differ from current)\n example: 5320.50\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n mask:\n type: string\n description: Last 4 digits of account number\n example: '1234'\n is_active:\n type: boolean\n description: Whether account is actively syncing\n example: true\n created_at:\n type: string\n format: date-time\n example: '2025-06-15T10:00:00Z'\n updated_at:\n type: string\n format: date-time\n example: '2026-01-10T12:00:00Z'\n\n Transaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - name\n - primary_category\n - detailed_category\n - pending\n - iso_currency_code\n properties:\n id:\n type: string\n format: uuid\n description: Unique transaction identifier\n example: txn_9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d\n transaction_id:\n type: string\n description: External transaction ID (from Plaid)\n example: plaid_txn_XYZ789abc\n account_id:\n type: string\n format: uuid\n description: Parent account ID\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n date:\n type: string\n format: date\n description: Posted date\n example: '2026-01-09'\n authorized_date:\n type: string\n format: date\n nullable: true\n description: Authorization date (if different)\n example: '2026-01-08'\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n example: 42.50\n name:\n type: string\n description: Raw transaction description from bank\n example: 'TRADER JOES #123 SAN FRANCISCO'\n merchant_name:\n type: string\n nullable: true\n description: Cleaned merchant name\n example: \"Trader Joe's\"\n merchant_entity_id:\n type: string\n nullable: true\n description: Unique merchant identifier\n example: eyg8o776k0QmNgVpAmaQj4WgzW9Qzo6O51gdd\n logo:\n type: string\n format: uri\n nullable: true\n description: URL to merchant logo\n example: https://plaid-merchant-logos.plaid.com/trader_joes.png\n primary_category:\n type: string\n description: High-level category\n example: FOOD_AND_DRINK\n enum:\n - INCOME\n - TRANSFER_IN\n - TRANSFER_OUT\n - LOAN_PAYMENTS\n - BANK_FEES\n - ENTERTAINMENT\n - FOOD_AND_DRINK\n - GENERAL_MERCHANDISE\n - HOME_IMPROVEMENT\n - MEDICAL\n - PERSONAL_CARE\n - GENERAL_SERVICES\n - GOVERNMENT_AND_NON_PROFIT\n - TRANSPORTATION\n - TRAVEL\n - RENT_AND_UTILITIES\n detailed_category:\n type: string\n description: Specific category\n example: FOOD_AND_DRINK_GROCERIES\n category_confidence:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n description: Category confidence level\n example: VERY_HIGH\n payment_channel:\n type: string\n enum: [in_store, online, other]\n description: How payment was made\n example: in_store\n pending:\n type: boolean\n description: Whether transaction is still pending\n example: false\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n location:\n $ref: '#/components/schemas/Location'\n created_at:\n type: string\n format: date-time\n example: '2026-01-09T18:30:00Z'\n\n Location:\n type: object\n nullable: true\n properties:\n city:\n type: string\n nullable: true\n example: San Francisco\n region:\n type: string\n nullable: true\n example: CA\n postal_code:\n type: string\n nullable: true\n example: '94110'\n country:\n type: string\n nullable: true\n example: US\n\n Snapshot:\n type: object\n required:\n - id\n - period_type\n - period_start\n - period_end\n - snapshot_date\n properties:\n id:\n type: string\n format: uuid\n description: Unique snapshot identifier\n example: snap_1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\n period_type:\n type: string\n enum: [daily, weekly, monthly]\n description: Period granularity\n example: daily\n period_start:\n type: string\n format: date\n description: Period start date\n example: '2026-01-01'\n period_end:\n type: string\n format: date\n description: Period end date\n example: '2026-01-31'\n snapshot_date:\n type: string\n format: date\n description: When snapshot was taken\n example: '2026-01-10'\n income:\n type: number\n description: Total income for period\n example: 6500.00\n expenses:\n type: number\n description: Total expenses for period\n example: 4200.00\n net_cash_flow:\n type: number\n description: Income minus expenses\n example: 2300.00\n savings_rate:\n type: number\n description: Percentage saved (0.0 to 1.0)\n example: 0.35\n net_worth:\n type: number\n description: Total assets minus liabilities\n example: 45000.00\n total_cash:\n type: number\n description: Sum of depository balances\n example: 12500.00\n total_debt:\n type: number\n description: Sum of credit/loan balances\n example: 8500.00\n investment_value:\n type: number\n description: Investment account value\n example: 28000.00\n asset_value:\n type: number\n description: Other asset values\n example: 15000.00\n burn_rate:\n type: number\n description: Average daily spending\n example: 140.00\n runway_days:\n type: integer\n description: Days of expenses covered by cash\n example: 89\n safe_to_spend:\n type: number\n description: Estimated discretionary spending available\n example: 1800.00\n recurring_total:\n type: number\n description: Sum of recurring expenses\n example: 1250.00\n spending_by_category:\n type: array\n items:\n $ref: '#/components/schemas/CategorySpending'\n top_merchants:\n type: array\n items:\n $ref: '#/components/schemas/MerchantSpending'\n income_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: 0.05\n spending_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: -0.08\n created_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n\n CategorySpending:\n type: object\n properties:\n category:\n type: string\n example: FOOD_AND_DRINK\n amount:\n type: number\n example: 850.00\n percentage:\n type: number\n example: 20.2\n\n MerchantSpending:\n type: object\n properties:\n merchant:\n type: string\n example: Whole Foods\n amount:\n type: number\n example: 420.00\n count:\n type: integer\n example: 8\n\n Pagination:\n type: object\n properties:\n limit:\n type: integer\n description: Transactions per page\n example: 1000\n next_cursor:\n type: string\n nullable: true\n description: Token for next page (null if no more pages)\n example: eyJkYXRlIjoiMjAyNi0wMS0wMSIsImlkIjoiYWJjMTIzIn0\n\n RecurringStream:\n type: object\n properties:\n id:\n type: string\n format: uuid\n description: Unique stream identifier\n example: cb3daddd-1f82-43ed-ba9f-60ecf8c937e3\n stream_id:\n type: string\n description: External stream ID (from Plaid)\n example: LN053MyLw9H9MQ5ybwrJim1Kj495gbsJ98aeM\n account_id:\n type: string\n description: Account ID this stream belongs to\n example: Dpnjw06KAJHYVmr5jqejimy4nE0OQJczvD8KD\n stream_type:\n type: string\n enum: [inflow, outflow]\n description: Direction of recurring payment\n example: outflow\n merchant_name:\n type: string\n description: Merchant or payee name\n example: Ting\n description:\n type: string\n description: Transaction description pattern\n example: 'TING* INV#MI-4636263'\n category:\n type: object\n properties:\n primary:\n type: string\n example: RENT_AND_UTILITIES\n detailed:\n type: string\n example: RENT_AND_UTILITIES_TELEPHONE\n confidence_level:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, SEMI_MONTHLY, MONTHLY, ANNUALLY, UNKNOWN]\n description: Payment frequency\n example: MONTHLY\n average_amount:\n type: number\n description: Average transaction amount\n example: 118.98\n last_amount:\n type: number\n description: Most recent transaction amount\n example: 146.58\n is_active:\n type: boolean\n description: Whether stream is currently active\n example: true\n status:\n type: string\n enum: [MATURE, EARLY_DETECTION, TOMBSTONED]\n description: Detection status\n example: MATURE\n first_date:\n type: string\n format: date\n description: First detected transaction date\n example: '2025-07-15'\n last_date:\n type: string\n format: date\n description: Most recent transaction date\n example: '2025-09-15'\n next_date:\n type: string\n format: date\n description: Predicted next transaction date\n example: '2025-10-15'\n source:\n type: string\n enum: [plaid, user]\n description: How stream was detected\n example: plaid\n\n Error:\n type: object\n required:\n - error\n properties:\n error:\n type: string\n description: Human-readable error message\n example: Invalid API key.\n\n FinancialContext:\n type: object\n required:\n - version\n - updated_at\n - currency\n - status\n - transactions\n - recurring\n - budgets\n - goals\n - snapshots\n - liabilities\n - holdings\n - health\n properties:\n version:\n type: string\n enum: [v1]\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n currency:\n type: string\n enum: [USD]\n status:\n $ref: '#/components/schemas/FinancialContextStatus'\n transactions:\n $ref: '#/components/schemas/TransactionIndex'\n recurring:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextRecurring'\n budgets:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextBudget'\n goals:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextGoal'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextSnapshot'\n liabilities:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextLiability'\n holdings:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextHolding'\n health:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextHealth'\n - type: 'null'\n\n FinancialContextStatus:\n type: object\n required:\n - position\n - accounts\n properties:\n position:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextPosition'\n - type: 'null'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextAccount'\n\n FinancialContextPosition:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - investments\n - other_assets\n - total_assets\n properties:\n date:\n type: string\n format: date\n nullable: true\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n other_assets:\n type: number\n nullable: true\n total_assets:\n type: number\n nullable: true\n\n FinancialContextAccount:\n type: object\n required:\n - id\n - name\n - type\n - subtype\n - group\n - institution\n - mask\n - balance\n - available\n - currency\n - updated_at\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n subtype:\n type: string\n nullable: true\n group:\n type: string\n enum: [cash, debt, investments]\n nullable: true\n institution:\n type: string\n nullable: true\n mask:\n type: string\n nullable: true\n balance:\n type: number\n nullable: true\n available:\n type: number\n nullable: true\n currency:\n type: string\n nullable: true\n updated_at:\n type: string\n format: date-time\n nullable: true\n\n TransactionIndex:\n type: object\n required:\n - total\n - months\n properties:\n total:\n type: integer\n minimum: 0\n months:\n type: array\n items:\n type: object\n required:\n - month\n - count\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n count:\n type: integer\n minimum: 0\n\n TransactionMonth:\n type: object\n required:\n - month\n - start_date\n - end_date\n - count\n - items\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n start_date:\n type: string\n format: date\n end_date:\n type: string\n format: date\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n LatestTransactions:\n type: object\n required:\n - since\n - window_days\n - count\n - items\n properties:\n since:\n type: string\n format: date\n description: Inclusive lower bound for the latest transaction window\n window_days:\n type: integer\n enum: [10]\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n FinancialContextTransaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - merchant\n - name\n - category\n - subcategory\n - pending\n - currency\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n date:\n type: string\n format: date\n nullable: true\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n merchant:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n category:\n type: string\n nullable: true\n subcategory:\n type: string\n nullable: true\n pending:\n type: boolean\n nullable: true\n currency:\n type: string\n nullable: true\n\n FinancialContextRecurring:\n type: object\n required:\n - id\n - account_id\n - direction\n - frequency\n - status\n - merchant\n - amount\n - next_date\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n direction:\n type: string\n enum: [inflow, outflow]\n nullable: true\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUALLY, ANNUALLY]\n nullable: true\n status:\n type: string\n enum: [active, inactive, dismissed]\n nullable: true\n merchant:\n type: string\n nullable: true\n amount:\n type: number\n nullable: true\n next_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextBudget:\n type: object\n required:\n - id\n - name\n - type\n - period\n - status\n - amount\n - spent\n - remaining\n - used_percent\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [category, merchant]\n period:\n type: string\n enum: [weekly, biweekly, monthly]\n status:\n type: string\n enum: [under, warning, over]\n amount:\n type: number\n spent:\n type: number\n remaining:\n type: number\n used_percent:\n type: number\n\n FinancialContextGoal:\n type: object\n required:\n - id\n - name\n - category\n - status\n - target\n - current\n - progress_percent\n - target_date\n properties:\n id:\n type: string\n name:\n type: string\n category:\n type: string\n status:\n type: string\n enum: [not_started, in_progress, on_track, behind, completed]\n target:\n type: number\n current:\n type: number\n progress_percent:\n type: number\n target_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextSnapshot:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - income\n - expenses\n - cash_flow\n - savings_rate\n - investments\n - assets\n - health_score\n properties:\n date:\n type: string\n format: date\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n income:\n type: number\n nullable: true\n expenses:\n type: number\n nullable: true\n cash_flow:\n type: number\n nullable: true\n savings_rate:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n assets:\n type: number\n nullable: true\n health_score:\n type: number\n nullable: true\n\n FinancialContextLiability:\n type: object\n required:\n - account_id\n - type\n - balance\n - minimum_payment\n - due_date\n - interest_rate\n - rate_type\n - overdue\n properties:\n account_id:\n type: string\n nullable: true\n type:\n type: string\n enum: [credit, student, mortgage, other]\n nullable: true\n balance:\n type: number\n nullable: true\n minimum_payment:\n type: number\n nullable: true\n due_date:\n type: string\n format: date\n nullable: true\n interest_rate:\n type: number\n nullable: true\n rate_type:\n type: string\n enum: [fixed, variable]\n nullable: true\n overdue:\n type: boolean\n nullable: true\n\n FinancialContextHolding:\n type: object\n required:\n - account_id\n - symbol\n - name\n - type\n - quantity\n - value\n - cost_basis\n properties:\n account_id:\n type: string\n nullable: true\n symbol:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n type:\n type: string\n enum: [cash, derivative, equity, etf, fixed_income, mutual_fund, other]\n nullable: true\n quantity:\n type: number\n nullable: true\n value:\n type: number\n nullable: true\n cost_basis:\n type: number\n nullable: true\n\n FinancialContextHealth:\n type: object\n required:\n - score\n - label\n - level\n - summary\n - data_completeness\n - pillars\n properties:\n score:\n type: number\n label:\n type: string\n enum: [Needs Attention, Good, Strong]\n level:\n type: string\n enum: [critical, poor, fair, good, strong]\n summary:\n type: string\n data_completeness:\n type: number\n pillars:\n oneOf:\n - type: object\n required:\n - spend\n - save\n - borrow\n - build\n properties:\n spend:\n type: number\n nullable: true\n save:\n type: number\n nullable: true\n borrow:\n type: number\n nullable: true\n build:\n type: number\n nullable: true\n - type: 'null'\n\n FinancialContextMeta:\n type: object\n required:\n - version\n - user_id\n - context_id\n - generated_at\n - updated_at\n - content_hash\n - byte_length\n - counts\n properties:\n version:\n type: string\n enum: [v1]\n user_id:\n type: string\n context_id:\n type: string\n generated_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n content_hash:\n type: string\n description: Opaque artifact version token and ETag value. This is the only public artifact version token.\n byte_length:\n type: integer\n minimum: 0\n counts:\n type: object\n required:\n - accounts\n - transaction_months\n - transactions\n - snapshots\n properties:\n accounts:\n type: integer\n minimum: 0\n transaction_months:\n type: integer\n minimum: 0\n transactions:\n type: integer\n minimum: 0\n snapshots:\n type: integer\n minimum: 0\n\ntags:\n - name: Export\n description: Export financial data as structured JSON\n";
export const baseOpenApiYaml = "openapi: 3.1.0\ninfo:\n title: Warm API\n description: |\n Read your financial context or invoke supported Warm actions through a compact operation catalog.\n\n ## Authentication\n All requests use `Authorization: Bearer`. API keys are created for either read-only context\n access or automation access in Settings on paid Warm plans.\n\n Read/export routes accept `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`.\n Automation routes require an automation key (`warm_auto_...`) and do not accept access tokens.\n\n Unauthenticated responses include `WWW-Authenticate` guidance and protected resource metadata.\n\n ## Rate Limits\n - Context keys: 200 requests per hour per key\n - Automation keys: 500 requests per hour per key\n - Rate limit headers included in authenticated responses\n - `/api/export` supports dataset-scoped delta sync with `since` and publishes edge-cache metadata headers\n version: '2.0.0'\n contact:\n name: Warm Support\n url: https://warm.io/support\n license:\n name: Proprietary\n url: https://warm.io/terms\n\nservers:\n - url: https://app.warm.io\n description: Production\n\nsecurity:\n - BearerAuth: []\n\npaths:\n /api/verify:\n get:\n operationId: verifyApiAccess\n summary: Verify API credentials\n description: |\n Validate a Warm API key or signed-in user access token against the public verification route.\n\n This endpoint is the canonical readiness check for public API clients and discovery tools.\n tags:\n - Verification\n responses:\n '200':\n description: Credentials are valid and the caller has API access\n content:\n application/json:\n schema:\n type: object\n required:\n - status\n - valid\n - auth\n properties:\n status:\n type: string\n enum: [ok]\n valid:\n type: boolean\n auth:\n type: string\n description: Auth method used to satisfy verification\n audience:\n type: string\n enum: [context, automation, oauth]\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/export:\n get:\n operationId: getDatasetExport\n summary: Get a typed dataset export\n description: |\n Fetch a canonical financial dataset export from the unified `/api/export` surface.\n\n Use `dataset=transactions` for paginated transaction history. Other datasets return\n a typed JSON object keyed by the dataset name or retained public alias.\n\n Preferred dataset names are `accounts`, `transactions`, `snapshots`, `recurring`,\n `budgets`, `goals`, `health`, `liabilities`, and `holdings`.\n tags:\n - Export\n parameters:\n - name: dataset\n in: query\n description: Dataset identifier or retained public alias\n required: true\n schema:\n type: string\n enum:\n - accounts\n - transactions\n - snapshots\n - recurring\n - budgets\n - goals\n - health\n - liabilities\n - holdings\n - name: since\n in: query\n description: ISO timestamp for incremental exports\n required: false\n schema:\n type: string\n format: date-time\n - name: last_knowledge\n in: query\n description: Legacy alias for `since`\n required: false\n schema:\n type: string\n format: date-time\n - name: limit\n in: query\n description: Maximum transactions per page when `dataset=transactions`\n required: false\n schema:\n type: integer\n minimum: 1\n maximum: 1000\n - name: cursor\n in: query\n description: Pagination token from `pagination.next_cursor` when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: accountId\n in: query\n description: Optional account filter when `dataset=transactions`\n required: false\n schema:\n type: string\n - name: search\n in: query\n description: Optional merchant or description search filter when `dataset=transactions`\n required: false\n schema:\n type: string\n minLength: 1\n maxLength: 120\n responses:\n '200':\n description: Successful dataset export\n content:\n application/json:\n schema:\n type: object\n description: Dataset-shaped JSON response keyed by the requested dataset\n properties:\n generated_at:\n type: string\n format: date-time\n next_knowledge:\n type: string\n format: date-time\n nullable: true\n pagination:\n $ref: '#/components/schemas/Pagination'\n additionalProperties: true\n '400':\n description: Invalid query parameters\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context:\n get:\n operationId: getFinancialContext\n summary: Get compact financial context\n description: |\n Fetch the current compact FinancialContext artifact for the authenticated user.\n\n This response does not include transaction items. Use\n `/api/financial-context/transactions` for month-addressed transaction pages or the\n fixed 10-day latest transaction window.\n tags:\n - Export\n responses:\n '200':\n description: Compact FinancialContext artifact\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContext'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/transactions:\n get:\n operationId: getFinancialContextTransactions\n summary: Get financial-context transactions\n description: |\n Fetch one transaction month or the fixed 10-day latest transaction window from the\n current financial-context artifact.\n\n The raw API requires exactly one selector: `month=YYYY-MM` or `latest=1`.\n Bare calls are invalid on the raw API. The current `@warmio/mcp` `get_transactions` tool\n maps bare calls to the fixed latest window and accepts only `month` (`YYYY-MM`) or\n `latest: true`; it does not accept cursor, search, or `last_knowledge`.\n Transaction amounts use the Warm/Plaid sign convention:\n positive = expense/debit, negative = income/credit.\n\n A well-formed month inside the covered range with no matching items returns `200` with\n `count: 0` and `items: []`. Months before the earliest indexed month or after the latest\n covered month return `404`.\n tags:\n - Export\n parameters:\n - name: month\n in: query\n description: Transaction month selector in YYYY-MM format. Mutually exclusive with `latest`.\n required: false\n schema:\n type: string\n pattern: '^\\d{4}-(0[1-9]|1[0-2])$'\n example: '2026-07'\n - name: latest\n in: query\n description: Set to `1` for the fixed 10-day latest transaction window.\n required: false\n schema:\n type: string\n enum: ['1']\n responses:\n '200':\n description: Transaction month page or latest transaction window\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n oneOf:\n - $ref: '#/components/schemas/TransactionMonth'\n - $ref: '#/components/schemas/LatestTransactions'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '400':\n description: Missing selectors, mutually exclusive selectors, malformed `month`, or `latest` other than `1`\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/financial-context/meta:\n get:\n operationId: getFinancialContextMeta\n summary: Get financial-context metadata\n description: |\n Fetch operational metadata for the current financial-context artifact, including the\n content hash used as the ETag, byte length, row counts, and freshness timestamps.\n `content_hash` is the public artifact version token; this metadata does not expose a\n public `data_version`.\n tags:\n - Export\n responses:\n '200':\n description: Financial-context metadata\n headers:\n ETag:\n $ref: '#/components/headers/ETag'\n Cache-Control:\n $ref: '#/components/headers/PrivateNoStore'\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/FinancialContextMeta'\n '304':\n description: The caller's If-None-Match value matches the current content hash\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '413':\n $ref: '#/components/responses/PayloadTooLarge'\n '429':\n $ref: '#/components/responses/RateLimited'\n\n /api/automation/operations/search:\n post:\n operationId: searchOperations\n summary: Search supported automation operations\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: false\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n properties:\n query:\n type: string\n maxLength: 200\n responses:\n '200':\n description: Matching operations\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operations]\n properties:\n operations:\n type: array\n items:\n $ref: '#/components/schemas/AutomationOperation'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '400':\n $ref: '#/components/responses/BadRequest'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/describe:\n post:\n operationId: describeOperation\n summary: Describe one operation and request owner approval when required\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationRequest'\n responses:\n '200':\n description: Operation schema and optional pending owner approval\n content:\n application/json:\n schema:\n type: object\n additionalProperties: false\n required: [operation]\n properties:\n operation:\n allOf:\n - $ref: '#/components/schemas/AutomationOperation'\n - type: object\n properties:\n input_schema:\n type: object\n approval:\n type: object\n additionalProperties: false\n required: [id, status, approval_url, expires_at]\n properties:\n id: { type: string, format: uuid }\n status: { type: string, enum: [pending] }\n approval_url: { type: string, format: uri }\n expires_at: { type: string, format: date-time }\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\n /api/automation/operations/invoke:\n post:\n operationId: invokeOperation\n summary: Invoke one supported operation\n tags: [Automation]\n security:\n - AutomationKeyAuth: []\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/OperationInvokeRequest'\n responses:\n '200':\n description: Wrapped response from the invoked operation\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/AutomationInvocationResponse'\n '400':\n $ref: '#/components/responses/BadRequest'\n '401':\n $ref: '#/components/responses/Unauthorized'\n '403':\n $ref: '#/components/responses/Forbidden'\n '404':\n $ref: '#/components/responses/NotFound'\n '409':\n description: Owner approval is required, invalid, expired, or already used\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n '429':\n $ref: '#/components/responses/RateLimited'\n '500':\n $ref: '#/components/responses/InternalError'\n\ncomponents:\n securitySchemes:\n BearerAuth:\n type: http\n scheme: bearer\n description: 'Read/export format: `Authorization: Bearer YOUR_API_KEY_OR_ACCESS_TOKEN`'\n AutomationKeyAuth:\n type: http\n scheme: bearer\n description: 'Automation format: `Authorization: Bearer warm_auto_...`'\n\n headers:\n ETag:\n description: Quoted content hash for If-None-Match revalidation\n schema:\n type: string\n example: '\"7b6f9d4c...\"'\n PrivateNoStore:\n description: Private financial responses are not stored by browsers or shared caches\n schema:\n type: string\n example: private, no-store\n\n responses:\n BadRequest:\n description: The request body or operation input is invalid\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Unauthorized:\n description: Missing or invalid credentials\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n Forbidden:\n description: The caller is authenticated but does not have API access\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n NotFound:\n description: The requested operation does not exist\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n InternalError:\n description: The request could not be completed safely\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n PayloadTooLarge:\n description: The response would exceed the public API response-size limit\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n RateLimited:\n description: Hourly per-credential rate limit exceeded\n headers:\n Retry-After:\n description: Seconds until the rate-limit window resets\n schema:\n type: integer\n example: 3600\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n\n schemas:\n AutomationOperation:\n type: object\n additionalProperties: false\n required: [operation_id, summary, description, method, path, risk, confirmation_required]\n properties:\n operation_id: { type: string }\n summary: { type: string }\n description: { type: string }\n method: { type: string, enum: [GET, POST, PATCH, PUT, DELETE] }\n path: { type: string }\n risk:\n type: array\n items: { type: string, enum: [read, write, destructive, external_effect] }\n confirmation_required: { type: boolean }\n OperationRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n OperationInvokeRequest:\n type: object\n additionalProperties: false\n required: [operation_id]\n properties:\n operation_id: { type: string }\n input:\n $ref: '#/components/schemas/OperationInput'\n approval_id:\n type: string\n format: uuid\n description: Matching owner approval required for every write operation\n OperationInput:\n type: object\n additionalProperties: false\n properties:\n params: { type: object, additionalProperties: { type: string } }\n body: { type: object, additionalProperties: true }\n AutomationInvocationResponse:\n type: object\n additionalProperties: false\n required: [body, headers, operation_id, status]\n properties:\n body: {}\n headers:\n type: object\n additionalProperties: { type: string }\n operation_id: { type: string }\n status: { type: integer, minimum: 100, maximum: 599 }\n ExportResponse:\n type: object\n required:\n - schema_version\n - generated_at\n - user_id\n - data_version\n - next_knowledge\n - accounts\n - transactions\n - snapshots\n - pagination\n properties:\n schema_version:\n type: string\n description: API schema version\n example: v1\n generated_at:\n type: string\n format: date-time\n description: Response generation timestamp\n example: '2026-01-10T15:30:00Z'\n user_id:\n type: string\n format: uuid\n description: Your user ID\n example: a1b2c3d4-e5f6-7890-abcd-ef1234567890\n data_version:\n type: integer\n description: Monotonic version number (increments on data changes)\n example: 42\n next_knowledge:\n type: string\n format: date-time\n description: Use as `last_knowledge` in next request for delta sync\n example: '2026-01-10T15:30:00Z'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/Account'\n transactions:\n type: array\n items:\n $ref: '#/components/schemas/Transaction'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/Snapshot'\n pagination:\n $ref: '#/components/schemas/Pagination'\n\n Account:\n type: object\n required:\n - id\n - name\n - type\n - current_balance\n - iso_currency_code\n - is_active\n properties:\n id:\n type: string\n format: uuid\n description: Unique account identifier\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n account_id:\n type: string\n description: External account ID (from Plaid)\n example: plaid_acc_ABC123xyz\n name:\n type: string\n description: Display name with masked account number\n example: 'Checking ****1234'\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n description: Account type\n example: depository\n subtype:\n type: string\n description: Specific subtype\n example: checking\n enum:\n - checking\n - savings\n - money market\n - cd\n - credit card\n - mortgage\n - student\n - auto\n - 401k\n - ira\n - brokerage\n - other\n current_balance:\n type: number\n description: Current balance (positive for assets)\n example: 5420.50\n available_balance:\n type: number\n nullable: true\n description: Available balance (may differ from current)\n example: 5320.50\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n mask:\n type: string\n description: Last 4 digits of account number\n example: '1234'\n is_active:\n type: boolean\n description: Whether account is actively syncing\n example: true\n created_at:\n type: string\n format: date-time\n example: '2025-06-15T10:00:00Z'\n updated_at:\n type: string\n format: date-time\n example: '2026-01-10T12:00:00Z'\n\n Transaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - name\n - primary_category\n - detailed_category\n - pending\n - iso_currency_code\n properties:\n id:\n type: string\n format: uuid\n description: Unique transaction identifier\n example: txn_9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d\n transaction_id:\n type: string\n description: External transaction ID (from Plaid)\n example: plaid_txn_XYZ789abc\n account_id:\n type: string\n format: uuid\n description: Parent account ID\n example: acc_8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c\n date:\n type: string\n format: date\n description: Posted date\n example: '2026-01-09'\n authorized_date:\n type: string\n format: date\n nullable: true\n description: Authorization date (if different)\n example: '2026-01-08'\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n example: 42.50\n name:\n type: string\n description: Raw transaction description from bank\n example: 'TRADER JOES #123 SAN FRANCISCO'\n merchant_name:\n type: string\n nullable: true\n description: Cleaned merchant name\n example: \"Trader Joe's\"\n merchant_entity_id:\n type: string\n nullable: true\n description: Unique merchant identifier\n example: eyg8o776k0QmNgVpAmaQj4WgzW9Qzo6O51gdd\n logo:\n type: string\n format: uri\n nullable: true\n description: URL to merchant logo\n example: https://plaid-merchant-logos.plaid.com/trader_joes.png\n primary_category:\n type: string\n description: High-level category\n example: FOOD_AND_DRINK\n enum:\n - INCOME\n - TRANSFER_IN\n - TRANSFER_OUT\n - LOAN_PAYMENTS\n - BANK_FEES\n - ENTERTAINMENT\n - FOOD_AND_DRINK\n - GENERAL_MERCHANDISE\n - HOME_IMPROVEMENT\n - MEDICAL\n - PERSONAL_CARE\n - GENERAL_SERVICES\n - GOVERNMENT_AND_NON_PROFIT\n - TRANSPORTATION\n - TRAVEL\n - RENT_AND_UTILITIES\n detailed_category:\n type: string\n description: Specific category\n example: FOOD_AND_DRINK_GROCERIES\n category_confidence:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n description: Category confidence level\n example: VERY_HIGH\n payment_channel:\n type: string\n enum: [in_store, online, other]\n description: How payment was made\n example: in_store\n pending:\n type: boolean\n description: Whether transaction is still pending\n example: false\n iso_currency_code:\n type: string\n description: ISO 4217 currency code\n example: USD\n location:\n $ref: '#/components/schemas/Location'\n created_at:\n type: string\n format: date-time\n example: '2026-01-09T18:30:00Z'\n\n Location:\n type: object\n nullable: true\n properties:\n city:\n type: string\n nullable: true\n example: San Francisco\n region:\n type: string\n nullable: true\n example: CA\n postal_code:\n type: string\n nullable: true\n example: '94110'\n country:\n type: string\n nullable: true\n example: US\n\n Snapshot:\n type: object\n required:\n - id\n - period_type\n - period_start\n - period_end\n - snapshot_date\n properties:\n id:\n type: string\n format: uuid\n description: Unique snapshot identifier\n example: snap_1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\n period_type:\n type: string\n enum: [daily, weekly, monthly]\n description: Period granularity\n example: daily\n period_start:\n type: string\n format: date\n description: Period start date\n example: '2026-01-01'\n period_end:\n type: string\n format: date\n description: Period end date\n example: '2026-01-31'\n snapshot_date:\n type: string\n format: date\n description: When snapshot was taken\n example: '2026-01-10'\n income:\n type: number\n description: Total income for period\n example: 6500.00\n expenses:\n type: number\n description: Total expenses for period\n example: 4200.00\n net_cash_flow:\n type: number\n description: Income minus expenses\n example: 2300.00\n savings_rate:\n type: number\n description: Percentage saved (0.0 to 1.0)\n example: 0.35\n net_worth:\n type: number\n description: Total assets minus liabilities\n example: 45000.00\n total_cash:\n type: number\n description: Sum of depository balances\n example: 12500.00\n total_debt:\n type: number\n description: Sum of credit/loan balances\n example: 8500.00\n investment_value:\n type: number\n description: Investment account value\n example: 28000.00\n asset_value:\n type: number\n description: Other asset values\n example: 15000.00\n burn_rate:\n type: number\n description: Average daily spending\n example: 140.00\n runway_days:\n type: integer\n description: Days of expenses covered by cash\n example: 89\n safe_to_spend:\n type: number\n description: Estimated discretionary spending available\n example: 1800.00\n recurring_total:\n type: number\n description: Sum of recurring expenses\n example: 1250.00\n spending_by_category:\n type: array\n items:\n $ref: '#/components/schemas/CategorySpending'\n top_merchants:\n type: array\n items:\n $ref: '#/components/schemas/MerchantSpending'\n income_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: 0.05\n spending_vs_last_period:\n type: number\n description: Percentage change from previous period\n example: -0.08\n created_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n\n CategorySpending:\n type: object\n properties:\n category:\n type: string\n example: FOOD_AND_DRINK\n amount:\n type: number\n example: 850.00\n percentage:\n type: number\n example: 20.2\n\n MerchantSpending:\n type: object\n properties:\n merchant:\n type: string\n example: Whole Foods\n amount:\n type: number\n example: 420.00\n count:\n type: integer\n example: 8\n\n Pagination:\n type: object\n properties:\n limit:\n type: integer\n description: Transactions per page\n example: 1000\n next_cursor:\n type: string\n nullable: true\n description: Token for next page (null if no more pages)\n example: eyJkYXRlIjoiMjAyNi0wMS0wMSIsImlkIjoiYWJjMTIzIn0\n\n RecurringStream:\n type: object\n properties:\n id:\n type: string\n format: uuid\n description: Unique stream identifier\n example: cb3daddd-1f82-43ed-ba9f-60ecf8c937e3\n stream_id:\n type: string\n description: External stream ID (from Plaid)\n example: LN053MyLw9H9MQ5ybwrJim1Kj495gbsJ98aeM\n account_id:\n type: string\n description: Account ID this stream belongs to\n example: Dpnjw06KAJHYVmr5jqejimy4nE0OQJczvD8KD\n stream_type:\n type: string\n enum: [inflow, outflow]\n description: Direction of recurring payment\n example: outflow\n merchant_name:\n type: string\n description: Merchant or payee name\n example: Ting\n description:\n type: string\n description: Transaction description pattern\n example: 'TING* INV#MI-4636263'\n category:\n type: object\n properties:\n primary:\n type: string\n example: RENT_AND_UTILITIES\n detailed:\n type: string\n example: RENT_AND_UTILITIES_TELEPHONE\n confidence_level:\n type: string\n enum: [VERY_HIGH, HIGH, MEDIUM, LOW, UNKNOWN]\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, SEMI_MONTHLY, MONTHLY, ANNUALLY, UNKNOWN]\n description: Payment frequency\n example: MONTHLY\n average_amount:\n type: number\n description: Average transaction amount\n example: 118.98\n last_amount:\n type: number\n description: Most recent transaction amount\n example: 146.58\n is_active:\n type: boolean\n description: Whether stream is currently active\n example: true\n status:\n type: string\n enum: [MATURE, EARLY_DETECTION, TOMBSTONED]\n description: Detection status\n example: MATURE\n first_date:\n type: string\n format: date\n description: First detected transaction date\n example: '2025-07-15'\n last_date:\n type: string\n format: date\n description: Most recent transaction date\n example: '2025-09-15'\n next_date:\n type: string\n format: date\n description: Predicted next transaction date\n example: '2025-10-15'\n source:\n type: string\n enum: [plaid, user]\n description: How stream was detected\n example: plaid\n\n Error:\n type: object\n required:\n - error\n properties:\n error:\n type: string\n description: Human-readable error message\n example: Invalid API key.\n\n FinancialContext:\n type: object\n required:\n - version\n - updated_at\n - currency\n - status\n - transactions\n - recurring\n - budgets\n - goals\n - snapshots\n - liabilities\n - holdings\n - health\n properties:\n version:\n type: string\n enum: [v1]\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n currency:\n type: string\n enum: [USD]\n status:\n $ref: '#/components/schemas/FinancialContextStatus'\n transactions:\n $ref: '#/components/schemas/TransactionIndex'\n recurring:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextRecurring'\n budgets:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextBudget'\n goals:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextGoal'\n snapshots:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextSnapshot'\n liabilities:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextLiability'\n holdings:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextHolding'\n health:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextHealth'\n - type: 'null'\n\n FinancialContextStatus:\n type: object\n required:\n - position\n - accounts\n properties:\n position:\n oneOf:\n - $ref: '#/components/schemas/FinancialContextPosition'\n - type: 'null'\n accounts:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextAccount'\n\n FinancialContextPosition:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - investments\n - other_assets\n - total_assets\n properties:\n date:\n type: string\n format: date\n nullable: true\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n other_assets:\n type: number\n nullable: true\n total_assets:\n type: number\n nullable: true\n\n FinancialContextAccount:\n type: object\n required:\n - id\n - name\n - type\n - subtype\n - group\n - institution\n - mask\n - balance\n - available\n - currency\n - updated_at\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [depository, credit, loan, investment, brokerage, other]\n subtype:\n type: string\n nullable: true\n group:\n type: string\n enum: [cash, debt, investments]\n nullable: true\n institution:\n type: string\n nullable: true\n mask:\n type: string\n nullable: true\n balance:\n type: number\n nullable: true\n available:\n type: number\n nullable: true\n currency:\n type: string\n nullable: true\n updated_at:\n type: string\n format: date-time\n nullable: true\n\n TransactionIndex:\n type: object\n required:\n - total\n - months\n properties:\n total:\n type: integer\n minimum: 0\n months:\n type: array\n items:\n type: object\n required:\n - month\n - count\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n count:\n type: integer\n minimum: 0\n\n TransactionMonth:\n type: object\n required:\n - month\n - start_date\n - end_date\n - count\n - items\n properties:\n month:\n type: string\n pattern: '^\\d{4}-\\d{2}$'\n start_date:\n type: string\n format: date\n end_date:\n type: string\n format: date\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n LatestTransactions:\n type: object\n required:\n - since\n - window_days\n - count\n - items\n properties:\n since:\n type: string\n format: date\n description: Inclusive lower bound for the latest transaction window\n window_days:\n type: integer\n enum: [10]\n count:\n type: integer\n minimum: 0\n items:\n type: array\n items:\n $ref: '#/components/schemas/FinancialContextTransaction'\n\n FinancialContextTransaction:\n type: object\n required:\n - id\n - account_id\n - date\n - amount\n - merchant\n - name\n - category\n - subcategory\n - pending\n - currency\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n date:\n type: string\n format: date\n nullable: true\n amount:\n type: number\n description: Amount (positive = expense/debit, negative = income/credit)\n merchant:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n category:\n type: string\n nullable: true\n subcategory:\n type: string\n nullable: true\n pending:\n type: boolean\n nullable: true\n currency:\n type: string\n nullable: true\n\n FinancialContextRecurring:\n type: object\n required:\n - id\n - account_id\n - direction\n - frequency\n - status\n - merchant\n - amount\n - next_date\n properties:\n id:\n type: string\n account_id:\n type: string\n nullable: true\n direction:\n type: string\n enum: [inflow, outflow]\n nullable: true\n frequency:\n type: string\n enum: [WEEKLY, BIWEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUALLY, ANNUALLY]\n nullable: true\n status:\n type: string\n enum: [active, inactive, dismissed]\n nullable: true\n merchant:\n type: string\n nullable: true\n amount:\n type: number\n nullable: true\n next_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextBudget:\n type: object\n required:\n - id\n - name\n - type\n - period\n - status\n - amount\n - spent\n - remaining\n - used_percent\n properties:\n id:\n type: string\n name:\n type: string\n type:\n type: string\n enum: [category, merchant]\n period:\n type: string\n enum: [weekly, biweekly, monthly]\n status:\n type: string\n enum: [under, warning, over]\n amount:\n type: number\n spent:\n type: number\n remaining:\n type: number\n used_percent:\n type: number\n\n FinancialContextGoal:\n type: object\n required:\n - id\n - name\n - category\n - status\n - target\n - current\n - progress_percent\n - target_date\n properties:\n id:\n type: string\n name:\n type: string\n category:\n type: string\n status:\n type: string\n enum: [not_started, in_progress, on_track, behind, completed]\n target:\n type: number\n current:\n type: number\n progress_percent:\n type: number\n target_date:\n type: string\n format: date\n nullable: true\n\n FinancialContextSnapshot:\n type: object\n required:\n - date\n - net_worth\n - cash\n - debt\n - income\n - expenses\n - cash_flow\n - savings_rate\n - investments\n - assets\n - health_score\n properties:\n date:\n type: string\n format: date\n net_worth:\n type: number\n nullable: true\n cash:\n type: number\n nullable: true\n debt:\n type: number\n nullable: true\n income:\n type: number\n nullable: true\n expenses:\n type: number\n nullable: true\n cash_flow:\n type: number\n nullable: true\n savings_rate:\n type: number\n nullable: true\n investments:\n type: number\n nullable: true\n assets:\n type: number\n nullable: true\n health_score:\n type: number\n nullable: true\n\n FinancialContextLiability:\n type: object\n required:\n - account_id\n - type\n - balance\n - minimum_payment\n - due_date\n - interest_rate\n - rate_type\n - overdue\n properties:\n account_id:\n type: string\n nullable: true\n type:\n type: string\n enum: [credit, student, mortgage, other]\n nullable: true\n balance:\n type: number\n nullable: true\n minimum_payment:\n type: number\n nullable: true\n due_date:\n type: string\n format: date\n nullable: true\n interest_rate:\n type: number\n nullable: true\n rate_type:\n type: string\n enum: [fixed, variable]\n nullable: true\n overdue:\n type: boolean\n nullable: true\n\n FinancialContextHolding:\n type: object\n required:\n - account_id\n - symbol\n - name\n - type\n - quantity\n - value\n - cost_basis\n properties:\n account_id:\n type: string\n nullable: true\n symbol:\n type: string\n nullable: true\n name:\n type: string\n nullable: true\n type:\n type: string\n enum: [cash, derivative, equity, etf, fixed_income, mutual_fund, other]\n nullable: true\n quantity:\n type: number\n nullable: true\n value:\n type: number\n nullable: true\n cost_basis:\n type: number\n nullable: true\n\n FinancialContextHealth:\n type: object\n required:\n - score\n - label\n - level\n - summary\n - data_completeness\n - pillars\n properties:\n score:\n type: number\n label:\n type: string\n enum: [Needs Attention, Good, Strong]\n level:\n type: string\n enum: [critical, poor, fair, good, strong]\n summary:\n type: string\n data_completeness:\n type: number\n pillars:\n oneOf:\n - type: object\n required:\n - spend\n - save\n - borrow\n - build\n properties:\n spend:\n type: number\n nullable: true\n save:\n type: number\n nullable: true\n borrow:\n type: number\n nullable: true\n build:\n type: number\n nullable: true\n - type: 'null'\n\n FinancialContextMeta:\n type: object\n required:\n - version\n - user_id\n - context_id\n - generated_at\n - updated_at\n - content_hash\n - byte_length\n - counts\n properties:\n version:\n type: string\n enum: [v1]\n user_id:\n type: string\n context_id:\n type: string\n generated_at:\n type: string\n format: date-time\n updated_at:\n type: string\n format: date-time\n description: Latest represented source-data freshness timestamp\n content_hash:\n type: string\n description: Opaque artifact version token and ETag value. This is the only public artifact version token.\n byte_length:\n type: integer\n minimum: 0\n counts:\n type: object\n required:\n - accounts\n - transaction_months\n - transactions\n - snapshots\n properties:\n accounts:\n type: integer\n minimum: 0\n transaction_months:\n type: integer\n minimum: 0\n transactions:\n type: integer\n minimum: 0\n snapshots:\n type: integer\n minimum: 0\n\ntags:\n - name: Export\n description: Export financial data as structured JSON\n";
//# sourceMappingURL=base-openapi.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"base-openapi.js","sourceRoot":"","sources":["../../src/generated/base-openapi.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,iy/CAAiy/C,CAAC"}
{"version":3,"file":"base-openapi.js","sourceRoot":"","sources":["../../src/generated/base-openapi.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,sy/CAAsy/C,CAAC"}
export { apiAuthSchemes, apiEndpointManifest, apiKeyPrefixesByAudience, apiRateLimits, API_ORIGIN, DEVELOPERS_PATH, DISCOVERY_ORIGIN, OPENAPI_PATH, PUBLIC_DISCOVERY_MCP_PATH, PUBLIC_DOCS_ORIGIN, VERIFY_PATH, automationOperationDescriptors, } from './api/index.js';
export { privateMcpToolDescriptors, type PrivateMcpToolDescriptor, } from './generated/private-mcp-tool-descriptors.js';
export { WARM_MCP_CLIENTS, WARM_MCP_CREDENTIALS, WARM_MCP_INSTALL_COMMAND, WARM_MCP_INSTALLER_COMMANDS, WARM_MCP_MANIFEST, WARM_MCP_MINIMUM_NODE_VERSION, WARM_MCP_MODES, WARM_MCP_PACKAGE_NAME, WARM_MCP_PACKAGE_SPEC, WARM_MCP_PROJECT_CONFIGS, WARM_MCP_SERVER_COMMANDS, WARM_MCP_SERVER_CONFIGS, type PrivateMcpMode, type WarmMcpClientId, type WarmMcpConfigPath, } from './mcp/distribution.js';
//# sourceMappingURL=manifest.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACX,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,6CAA6C,CAAC"}
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACX,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EACjB,6BAA6B,EAC7B,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC"}
export { apiAuthSchemes, apiEndpointManifest, apiKeyPrefixesByAudience, apiRateLimits, API_ORIGIN, DEVELOPERS_PATH, DISCOVERY_ORIGIN, OPENAPI_PATH, PUBLIC_DISCOVERY_MCP_PATH, PUBLIC_DOCS_ORIGIN, VERIFY_PATH, automationOperationDescriptors, } from './api/index.js';
export { privateMcpToolDescriptors, } from './generated/private-mcp-tool-descriptors.js';
export { WARM_MCP_CLIENTS, WARM_MCP_CREDENTIALS, WARM_MCP_INSTALL_COMMAND, WARM_MCP_INSTALLER_COMMANDS, WARM_MCP_MANIFEST, WARM_MCP_MINIMUM_NODE_VERSION, WARM_MCP_MODES, WARM_MCP_PACKAGE_NAME, WARM_MCP_PACKAGE_SPEC, WARM_MCP_PROJECT_CONFIGS, WARM_MCP_SERVER_COMMANDS, WARM_MCP_SERVER_CONFIGS, } from './mcp/distribution.js';
//# sourceMappingURL=manifest.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACX,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,GAE1B,MAAM,6CAA6C,CAAC"}
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACX,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,GAE1B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EACjB,6BAA6B,EAC7B,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,GAIxB,MAAM,uBAAuB,CAAC"}

@@ -0,2 +1,3 @@

export * from './distribution.js';
export * from './tools.js';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}

@@ -0,2 +1,3 @@

export * from './distribution.js';
export * from './tools.js';
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
import { z, type ZodRawShape } from 'zod';
import type { PrivateMcpMode } from './distribution.js';
export declare const emptyMcpInputShape: {};

@@ -60,3 +61,2 @@ export declare const getTransactionsMcpInputShape: {

};
export type PrivateMcpMode = 'automation' | 'context';
type McpToolDefinition = {

@@ -63,0 +63,0 @@ annotations: {

@@ -1,1 +0,1 @@

{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAW1C,eAAO,MAAM,kBAAkB,IAA2B,CAAC;AAC3D,eAAO,MAAM,4BAA4B;;;CAclB,CAAC;AACxB,eAAO,MAAM,6BAA6B;;CAEnB,CAAC;AACxB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;CAKpB,CAAC;AACxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;CAOlB,CAAC;AAExB,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;EAUtC,CAAC;AAEL,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC;;;;;;EAOrD;AAkBD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;AAEtD,KAAK,iBAAiB,GAAG;IACvB,WAAW,EAAE;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;IACxB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC;CAC5B,CAAC;AAIF,eAAO,MAAM,yBAAyB,6HAsDW,CAAC;AAElD,eAAO,MAAM,yBAAyB;iBAlEvB;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE;iBAC3E,MAAM;UAEb,cAAc;UACd,MAAM;kBAmEJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBAC6C,MAAM,CAC9E,MAAM,EACN,OAAO,CACR;GAEJ,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC"}
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAU1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,kBAAkB,IAA2B,CAAC;AAC3D,eAAO,MAAM,4BAA4B;;;CAclB,CAAC;AACxB,eAAO,MAAM,6BAA6B;;CAEnB,CAAC;AACxB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;CAKpB,CAAC;AACxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;CAOlB,CAAC;AAExB,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;EAUtC,CAAC;AAEL,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC;;;;;;EAOrD;AAkBD,KAAK,iBAAiB,GAAG;IACvB,WAAW,EAAE;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;IACxB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC;CAC5B,CAAC;AAIF,eAAO,MAAM,yBAAyB,6HAsDW,CAAC;AAElD,eAAO,MAAM,yBAAyB;iBAlEvB;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE;iBAC3E,MAAM;UAEb,cAAc;UACd,MAAM;kBAmEJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBAC6C,MAAM,CAC9E,MAAM,EACN,OAAO,CACR;GAEJ,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC"}

@@ -1,1 +0,1 @@

{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}

@@ -222,3 +222,3 @@ openapi: 3.1.0

The raw API requires exactly one selector: `month=YYYY-MM` or `latest=1`.
Bare calls are invalid on the raw API. The `@warmio/mcp` v7 `get_transactions` tool
Bare calls are invalid on the raw API. The current `@warmio/mcp` `get_transactions` tool
maps bare calls to the fixed latest window and accepts only `month` (`YYYY-MM`) or

@@ -225,0 +225,0 @@ `latest: true`; it does not accept cursor, search, or `last_knowledge`.

{
"name": "@warmio/contracts",
"version": "1.0.0",
"version": "1.1.0",
"description": "Side-effect-free public API and MCP contracts for Warm.",

@@ -5,0 +5,0 @@ "license": "UNLICENSED",

@@ -11,6 +11,13 @@ # @warmio/contracts

`@warmio/contracts/manifest` is intentionally safe for docs and edge consumers that only need URL, auth, rate-limit, and endpoint facts. The authenticated/local MCP definitions are exported from the root or `@warmio/contracts/mcp`; public discovery MCP tools remain owned by the edge worker.
`@warmio/contracts/manifest` is intentionally safe for docs, MCP, app, and edge consumers that need
API, product, package-distribution, auth, rate-limit, endpoint, or MCP facts. Authenticated/local MCP
definitions are exported from the root or `@warmio/contracts/mcp`; public discovery MCP tools remain
owned by the edge worker.
Warm publishes this package from `jasonstockman/warm-app`. It follows semver for documented public exports and wire-contract changes, but it is not a general-purpose SDK or a promise of hosted support beyond those contracts.
Warm publishes this package from `jasonstockman/warm-app`. Warm is pre-public-user, so package
versions coordinate exact internal dependency updates rather than promise backwards compatibility.
Contract changes are clean cutovers: remove old exports and shapes, update all Warm consumers, and
regenerate documentation in the same release. Do not add compatibility re-exports, deprecated
aliases, or dual contracts.
The package is publicly readable for Warm's runtime and documentation consumers, but it is not open-source licensed. Public npm visibility does not grant permission to copy or redistribute its source beyond applicable package-use terms.