@warmio/contracts
Advanced tools
| 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,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"} |
+1
-0
| 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`. |
+1
-1
| { | ||
| "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", |
+9
-2
@@ -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. |
Explicitly Unlicensed Item
LicenseSomething was found which is explicitly marked as unlicensed.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Explicitly Unlicensed Item
LicenseSomething was found which is explicitly marked as unlicensed.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
492858
6.63%79
5.33%6679
8.6%23
43.75%