@warmio/contracts 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/api/endpoints.d.ts +39 -19
  2. package/dist/api/endpoints.d.ts.map +1 -1
  3. package/dist/api/endpoints.js +47 -15
  4. package/dist/api/endpoints.js.map +1 -1
  5. package/dist/generated/base-openapi.d.ts +1 -1
  6. package/dist/generated/base-openapi.d.ts.map +1 -1
  7. package/dist/generated/base-openapi.js +1 -1
  8. package/dist/generated/base-openapi.js.map +1 -1
  9. package/dist/generated/private-mcp-tool-descriptors.d.ts +17 -21
  10. package/dist/generated/private-mcp-tool-descriptors.d.ts.map +1 -1
  11. package/dist/generated/private-mcp-tool-descriptors.js +19 -21
  12. package/dist/generated/private-mcp-tool-descriptors.js.map +1 -1
  13. package/dist/generated/protected-crawler-paths.d.ts +2 -0
  14. package/dist/generated/protected-crawler-paths.d.ts.map +1 -0
  15. package/dist/generated/protected-crawler-paths.js +34 -0
  16. package/dist/generated/protected-crawler-paths.js.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/manifest.d.ts +1430 -1
  22. package/dist/manifest.d.ts.map +1 -1
  23. package/dist/manifest.js +59 -1
  24. package/dist/manifest.js.map +1 -1
  25. package/dist/mcp/distribution.d.ts +7 -2
  26. package/dist/mcp/distribution.d.ts.map +1 -1
  27. package/dist/mcp/distribution.js +6 -1
  28. package/dist/mcp/distribution.js.map +1 -1
  29. package/dist/mcp/tools.d.ts +15 -21
  30. package/dist/mcp/tools.d.ts.map +1 -1
  31. package/dist/mcp/tools.js +17 -28
  32. package/dist/mcp/tools.js.map +1 -1
  33. package/dist/openapi/base.yaml +2 -2
  34. package/dist/openapi/build-openapi.d.ts.map +1 -1
  35. package/dist/openapi/build-openapi.js +7 -1
  36. package/dist/openapi/build-openapi.js.map +1 -1
  37. package/dist/product.d.ts +47 -0
  38. package/dist/product.d.ts.map +1 -0
  39. package/dist/product.js +17 -0
  40. package/dist/product.js.map +1 -0
  41. package/dist/public-discovery.d.ts +116 -0
  42. package/dist/public-discovery.d.ts.map +1 -0
  43. package/dist/public-discovery.js +91 -0
  44. package/dist/public-discovery.js.map +1 -0
  45. package/package.json +16 -1
@@ -1,34 +1,54 @@
1
1
  export declare const API_ORIGIN = "https://app.warm.io";
2
2
  export declare const DISCOVERY_ORIGIN = "https://warm.io";
3
3
  export declare const PUBLIC_DOCS_ORIGIN = "https://warm.io";
4
+ export declare const PUBLIC_LLMS_TXT_PATH = "/llms.txt";
4
5
  export declare const OPENAPI_PATH = "/openapi.yaml";
5
6
  export declare const DEVELOPERS_PATH = "/developers";
6
7
  export declare const PUBLIC_DISCOVERY_MCP_PATH = "/mcp";
7
8
  export declare const VERIFY_PATH = "/api/verify";
8
- export declare const apiKeyPrefixesByAudience: {
9
- readonly automation: 'warm_auto_';
10
- readonly context: 'warm_ctx_';
11
- };
12
- export declare const apiAuthSchemes: {
13
- readonly automation: {
14
- readonly bearer_prefix: "warm_auto_";
15
- readonly description: 'Automation routes require an automation API key.';
16
- readonly scheme: 'bearer';
17
- };
18
- readonly context: {
19
- readonly bearer_prefix: "warm_ctx_";
20
- readonly description: 'Read/export routes accept a Warm API key or signed-in access token.';
21
- readonly scheme: 'bearer';
22
- };
23
- };
24
- export declare const apiRateLimits: {
9
+ /** The complete public API-key audience contract. Every key, MCP, and discovery consumer derives from this registry. */
10
+ export declare const apiAudienceRegistry: {
25
11
  readonly automation: {
26
- readonly requests_per_hour: 500;
12
+ readonly auth: {
13
+ readonly bearer_prefix: 'warm_auto_';
14
+ readonly challenge: 'Bearer';
15
+ readonly description: 'Automation routes require an automation API key.';
16
+ readonly methods: readonly ['Bearer'];
17
+ };
18
+ readonly expires_in_days: 90;
19
+ readonly mcp_mode: 'automation';
20
+ readonly rate_limit_per_hour: 500;
21
+ readonly scopes: readonly ['financial:read', 'automation:invoke'];
27
22
  };
28
23
  readonly context: {
29
- readonly requests_per_hour: 200;
24
+ readonly auth: {
25
+ readonly bearer_prefix: 'warm_ctx_';
26
+ readonly challenge: 'Bearer';
27
+ readonly description: 'Read/export routes accept a Warm API key or signed-in access token.';
28
+ readonly methods: readonly ['Bearer'];
29
+ };
30
+ readonly expires_in_days: null;
31
+ readonly mcp_mode: 'context';
32
+ readonly rate_limit_per_hour: 200;
33
+ readonly scopes: readonly ['financial:read'];
30
34
  };
31
35
  };
36
+ export type ApiClientAudience = keyof typeof apiAudienceRegistry;
37
+ export type ApiClientScope = (typeof apiAudienceRegistry)[ApiClientAudience]['scopes'][number];
38
+ export declare const API_CLIENT_AUDIENCES: [ApiClientAudience, ...ApiClientAudience[]];
39
+ export declare const API_CLIENT_SCOPES: ApiClientScope[];
40
+ export declare const API_CLIENT_PRESETS: { readonly [Audience in ApiClientAudience]: {
41
+ readonly expires_in_days: (typeof apiAudienceRegistry)[Audience]['expires_in_days'];
42
+ readonly rate_limit_per_hour: (typeof apiAudienceRegistry)[Audience]['rate_limit_per_hour'];
43
+ readonly scopes: (typeof apiAudienceRegistry)[Audience]['scopes'];
44
+ }; };
45
+ export declare const apiKeyPrefixesByAudience: { readonly [Audience in ApiClientAudience]: (typeof apiAudienceRegistry)[Audience]['auth']['bearer_prefix']; };
46
+ export declare const apiAuthSchemes: { readonly [Audience in ApiClientAudience]: (typeof apiAudienceRegistry)[Audience]['auth'] & {
47
+ readonly scheme: 'bearer';
48
+ }; };
49
+ export declare const apiRateLimits: { readonly [Audience in ApiClientAudience]: {
50
+ readonly requests_per_hour: number;
51
+ }; };
32
52
  export declare const automationOperationDescriptors: readonly [{
33
53
  readonly operation_id: "budgets.list";
34
54
  readonly method: "GET";
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/api/endpoints.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAClD,eAAO,MAAM,kBAAkB,oBAAmB,CAAC;AACnD,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAC5C,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAChD,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,eAAO,MAAM,wBAAwB;aACnC,UAAU,EAAE,YAAY;aACxB,OAAO,EAAE,WAAW;CACZ,CAAC;AAEX,eAAO,MAAM,cAAc;aACzB,UAAU;iBACR,aAAa;iBACb,WAAW,EAAE,kDAAkD;iBAC/D,MAAM,EAAE,QAAQ;;aAElB,OAAO;iBACL,aAAa;iBACb,WAAW,EAAE,qEAAqE;iBAClF,MAAM,EAAE,QAAQ;;CAEV,CAAC;AAEX,eAAO,MAAM,aAAa;aACxB,UAAU;iBAAI,iBAAiB,EAAE,GAAG;;aACpC,OAAO;iBAAI,iBAAiB,EAAE,GAAG;;CACzB,CAAC;AAYX,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiTkB,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;AAEpG,eAAO,MAAM,mBAAmB;aAE5B,QAAQ,EAAE,SAAS;aACnB,MAAM,EAAE,KAAK;aACb,YAAY,EAAE,iBAAiB;aAC/B,IAAI;aACJ,OAAO,EAAE,wBAAwB;;aAGjC,QAAQ,EAAE,SAAS;aACnB,MAAM,EAAE,KAAK;aACb,YAAY,EAAE,kBAAkB;aAChC,IAAI,EAAE,aAAa;aACnB,OAAO,EAAE,4BAA4B;;aAGrC,QAAQ,EAAE,SAAS;aACnB,MAAM,EAAE,KAAK;aACb,YAAY,EAAE,qBAAqB;aACnC,IAAI,EAAE,wBAAwB;aAC9B,OAAO,EAAE,+BAA+B;;aAGxC,QAAQ,EAAE,SAAS;aACnB,MAAM,EAAE,KAAK;aACb,YAAY,EAAE,iCAAiC;aAC/C,IAAI,EAAE,qCAAqC;aAC3C,OAAO,EAAE,oCAAoC;;aAG7C,QAAQ,EAAE,SAAS;aACnB,MAAM,EAAE,KAAK;aACb,YAAY,EAAE,yBAAyB;aACvC,IAAI,EAAE,6BAA6B;aACnC,OAAO,EAAE,gCAAgC;;aAGzC,QAAQ,EAAE,YAAY;aACtB,MAAM,EAAE,MAAM;aACd,YAAY,EAAE,kBAAkB;aAChC,IAAI,EAAE,mCAAmC;aACzC,OAAO,EAAE,wCAAwC;;aAGjD,QAAQ,EAAE,YAAY;aACtB,MAAM,EAAE,MAAM;aACd,YAAY,EAAE,mBAAmB;aACjC,IAAI,EAAE,qCAAqC;aAC3C,OAAO,EAAE,kCAAkC;;aAG3C,QAAQ,EAAE,YAAY;aACtB,MAAM,EAAE,MAAM;aACd,YAAY,EAAE,iBAAiB;aAC/B,IAAI,EAAE,mCAAmC;aACzC,OAAO,EAAE,gCAAgC;EAEnC,CAAC"}
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/api/endpoints.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,62 @@
1
1
  export const API_ORIGIN = 'https://app.warm.io';
2
2
  export const DISCOVERY_ORIGIN = 'https://warm.io';
3
3
  export const PUBLIC_DOCS_ORIGIN = DISCOVERY_ORIGIN;
4
+ export const PUBLIC_LLMS_TXT_PATH = '/llms.txt';
4
5
  export const OPENAPI_PATH = '/openapi.yaml';
5
6
  export const DEVELOPERS_PATH = '/developers';
6
7
  export const PUBLIC_DISCOVERY_MCP_PATH = '/mcp';
7
8
  export const VERIFY_PATH = '/api/verify';
8
- export const apiKeyPrefixesByAudience = {
9
- automation: 'warm_auto_',
10
- context: 'warm_ctx_',
11
- };
12
- export const apiAuthSchemes = {
9
+ /** The complete public API-key audience contract. Every key, MCP, and discovery consumer derives from this registry. */
10
+ export const apiAudienceRegistry = {
13
11
  automation: {
14
- bearer_prefix: apiKeyPrefixesByAudience.automation,
15
- description: 'Automation routes require an automation API key.',
16
- scheme: 'bearer',
12
+ auth: {
13
+ bearer_prefix: 'warm_auto_',
14
+ challenge: 'Bearer',
15
+ description: 'Automation routes require an automation API key.',
16
+ methods: ['Bearer'],
17
+ },
18
+ expires_in_days: 90,
19
+ mcp_mode: 'automation',
20
+ rate_limit_per_hour: 500,
21
+ scopes: ['financial:read', 'automation:invoke'],
17
22
  },
18
23
  context: {
19
- bearer_prefix: apiKeyPrefixesByAudience.context,
20
- description: 'Read/export routes accept a Warm API key or signed-in access token.',
21
- scheme: 'bearer',
24
+ auth: {
25
+ bearer_prefix: 'warm_ctx_',
26
+ challenge: 'Bearer',
27
+ description: 'Read/export routes accept a Warm API key or signed-in access token.',
28
+ methods: ['Bearer'],
29
+ },
30
+ expires_in_days: null,
31
+ mcp_mode: 'context',
32
+ rate_limit_per_hour: 200,
33
+ scopes: ['financial:read'],
22
34
  },
23
35
  };
24
- export const apiRateLimits = {
25
- automation: { requests_per_hour: 500 },
26
- context: { requests_per_hour: 200 },
27
- };
36
+ export const API_CLIENT_AUDIENCES = Object.keys(apiAudienceRegistry);
37
+ export const API_CLIENT_SCOPES = [
38
+ ...new Set(Object.values(apiAudienceRegistry).flatMap(({ scopes }) => scopes)),
39
+ ];
40
+ export const API_CLIENT_PRESETS = Object.fromEntries(Object.entries(apiAudienceRegistry).map(([audience, definition]) => [
41
+ audience,
42
+ {
43
+ expires_in_days: definition.expires_in_days,
44
+ rate_limit_per_hour: definition.rate_limit_per_hour,
45
+ scopes: definition.scopes,
46
+ },
47
+ ]));
48
+ export const apiKeyPrefixesByAudience = Object.fromEntries(Object.entries(apiAudienceRegistry).map(([audience, definition]) => [
49
+ audience,
50
+ definition.auth.bearer_prefix,
51
+ ]));
52
+ export const apiAuthSchemes = Object.fromEntries(Object.entries(apiAudienceRegistry).map(([audience, definition]) => [
53
+ audience,
54
+ { ...definition.auth, scheme: 'bearer' },
55
+ ]));
56
+ export const apiRateLimits = Object.fromEntries(Object.entries(apiAudienceRegistry).map(([audience, definition]) => [
57
+ audience,
58
+ { requests_per_hour: definition.rate_limit_per_hour },
59
+ ]));
28
60
  const operation = (descriptor) => ({
29
61
  ...descriptor,
30
62
  confirmation_required: descriptor.method !== 'GET',
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/api/endpoints.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAClD,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,WAAW;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE;QACV,aAAa,EAAE,wBAAwB,CAAC,UAAU;QAClD,WAAW,EAAE,kDAAkD;QAC/D,MAAM,EAAE,QAAQ;KACjB;IACD,OAAO,EAAE;QACP,aAAa,EAAE,wBAAwB,CAAC,OAAO;QAC/C,WAAW,EAAE,qEAAqE;QAClF,MAAM,EAAE,QAAQ;KACjB;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE;IACtC,OAAO,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE;CAC3B,CAAC;AAEX,MAAM,SAAS,GAAG,CAGhB,UAAoE,EACpE,EAAE,CAAC,CAAC;IACJ,GAAG,UAAU;IACb,qBAAqB,EAAE,UAAU,CAAC,MAAM,KAAK,KAAK;IAClD,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,SAAS,CAAC;QACR,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAkB;QACxB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,+CAA+C;KAC7D,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,gBAAgB;QAC9B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,kBAAkB;QACxB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,uCAAuC;KACrD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,uBAAuB;QAC7B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,uBAAuB;KACrC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,gBAAgB;QAC9B,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,uBAAuB;QAC7B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,0BAA0B;KACxC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,gBAAgB;QAC9B,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,uBAAuB;QAC7B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,gBAAgB;QACtB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,wBAAwB;KACtC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,WAAW;QACzB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,qBAAqB;QAC3B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,6BAA6B;KAC3C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,qBAAqB;QAC3B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,0BAA0B;KACxC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,qBAAqB;QAC3B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,gBAAgB;QAC9B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,8BAA8B;QACpC,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,+BAA+B;KAC7C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,4BAA4B;QAClC,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,kCAAkC;KAChD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,qBAAqB;QACnC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,uBAAuB;QAC7B,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,oBAAoB;QAC7B,WAAW,EAAE,8BAA8B;KAC5C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,kBAAkB;QAChC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,4BAA4B;QAClC,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,4BAA4B;KAC1C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,qBAAqB;QACnC,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,4BAA4B;QAClC,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,oBAAoB;QAC7B,WAAW,EAAE,yBAAyB;KACvC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,qBAAqB;QACnC,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,4BAA4B;QAClC,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,oBAAoB;QAC7B,WAAW,EAAE,qCAAqC;QAClD,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,sBAAsB;QACpC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,oCAAoC;QAC1C,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,+CAA+C;KAC7D,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,mBAAmB;QACjC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,iCAAiC;QACvC,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EAAE,oCAAoC;KAClD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,iBAAiB;QACvB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,+BAA+B;KAC7C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,iBAAiB;QACvB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,kCAAkC;KAChD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,YAAY;QAC1B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB;QAC5B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,sBAAsB;KACpC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,sBAAsB;QAC5B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,oCAAoC;KAClD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,sBAAsB;QAC5B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,wBAAwB;QAC9B,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,wBAAwB;KACtC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,wBAAwB;QAC9B,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,iCAAiC;KAC/C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,wBAAwB;QAC9B,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,iBAAiB;QACvB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,uBAAuB;KACrC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,oBAAoB;QAClC,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,sBAAsB;QAC5B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,iCAAiC;KAC/C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,sBAAsB;QAC5B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,gBAAgB;QAC9B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,oBAAoB;QAC1B,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,uCAAuC;KACrD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,kBAAkB;QAChC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,oBAAoB;QAC1B,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,2CAA2C;KACzD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,yBAAyB;QAC/B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,yBAAyB;KACvC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,kBAAkB;QAChC,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,yBAAyB;QAC/B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,gCAAgC;KAC9C,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,kBAAkB;QAChC,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,yBAAyB;QAC/B,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,kBAAkB;QAChC,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,yBAAyB;QAC/B,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,uBAAuB;QAChC,WAAW,EAAE,wCAAwC;KACtD,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,kBAAkB;QAChC,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,yBAAyB;QAC/B,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,uBAAuB;QAChC,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,mBAAmB;QACzB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,oBAAoB;KAClC,CAAC;IACF,SAAS,CAAC;QACR,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,mBAAmB;QACzB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,uBAAuB;KACrC,CAAC;CACyD,CAAC;AAI9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC;QACE,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,wBAAwB;KAClC;IACD;QACE,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,4BAA4B;KACtC;IACD;QACE,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,qBAAqB;QACnC,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,+BAA+B;KACzC;IACD;QACE,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,iCAAiC;QAC/C,IAAI,EAAE,qCAAqC;QAC3C,OAAO,EAAE,oCAAoC;KAC9C;IACD;QACE,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,yBAAyB;QACvC,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,gCAAgC;KAC1C;IACD;QACE,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,mCAAmC;QACzC,OAAO,EAAE,wCAAwC;KAClD;IACD;QACE,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,mBAAmB;QACjC,IAAI,EAAE,qCAAqC;QAC3C,OAAO,EAAE,kCAAkC;KAC5C;IACD;QACE,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE,mCAAmC;QACzC,OAAO,EAAE,gCAAgC;KAC1C;CACO,CAAC"}
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/api/endpoints.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- 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";
1
+ 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 accepts one required `period` string: `latest` for the fixed latest window or `YYYY-MM`\n for a month. 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";
2
2
  //# sourceMappingURL=base-openapi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-openapi.d.ts","sourceRoot":"","sources":["../../src/generated/base-openapi.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,yy/CAAyy/C,CAAC"}
1
+ {"version":3,"file":"base-openapi.d.ts","sourceRoot":"","sources":["../../src/generated/base-openapi.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,2y/CAA2y/C,CAAC"}