{"openapi":"3.1.0","info":{"title":"BetterOff API","version":"0.5.0+f1be4c2b"},"servers":[{"url":"https://api.betteroff.finance"}],"components":{"schemas":{"ProblemDetails":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","description":"Always \"about:blank\"; branch on `code`."},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"code":{"type":"string","description":"Stable UPPER_SNAKE code."},"error":{"type":"string","description":"Older clients' copy of `detail`."},"message":{"type":"string","description":"Older clients' copy of `detail`."},"requestId":{"description":"Diagnostic only; quote it to support.","type":"string"},"instance":{"type":"string"},"details":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["type","title","status","detail","code","error","message"],"additionalProperties":{},"description":"RFC 9457 problem details. Some refusals add fields; ignore ones you don't know."},"ToolFailure":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":false},"code":{"type":"string","description":"Stable UPPER_SNAKE code."},"error":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"fields":{"description":"The rejected arguments after INVALID_INPUT.","type":"array","items":{"type":"string"}},"requestId":{"description":"Diagnostic only; quote it to support.","type":"string"}},"required":["ok","code","error","retryable","nextStep"],"additionalProperties":{}}},"securitySchemes":{"session":{"type":"http","scheme":"bearer","description":"The BetterOff app acting for its signed-in user. Not available to integrations: Better Auth session tokens and browser session cookies are rejected. Use an API token or agent OAuth."},"apiToken":{"type":"http","scheme":"bearer","description":"Personal API token (bo_pat_), created in BetterOff settings with the scopes it may use."},"agentOAuth":{"type":"openIdConnect","openIdConnectUrl":"https://app.betteroff.finance/api/auth/.well-known/openid-configuration","description":"Agent OAuth grant; the same token and scopes as /mcp."}}},"paths":{"/chat":{"post":{"operationId":"postChat","tags":["chat"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"messages":{"minItems":1,"maxItems":1,"type":"array","items":{}},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"regenerateRunId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"conversationId":{"type":"string"},"model":{"type":"string"},"pageContext":{"type":"object","properties":{"page":{"type":"string","minLength":1,"maxLength":120},"route":{"type":"string","maxLength":800,"format":"starts_with","pattern":"^\\/.*"},"filters":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":80},"additionalProperties":{"type":"string","minLength":1,"maxLength":240}},"selection":{"type":"object","properties":{"kind":{"type":"string","enum":["transaction","recurring","debt","transfer","todo"]},"id":{"type":"string","minLength":1,"maxLength":200}},"required":["kind","id"]}},"required":["page","route"]}},"required":["messages"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/chat/usage":{"get":{"operationId":"getChatUsage","tags":["chat"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/chat/conversations":{"get":{"operationId":"getChatConversations","tags":["chat"],"security":[{"session":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"conversations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"latestMessageAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"source":{"type":"string","enum":["web","page","imessage"]},"page":{"type":["string","null"]}},"required":["id","title","latestMessageAt","source","page"],"additionalProperties":false}}},"required":["conversations"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/chat/conversations/{id}":{"get":{"operationId":"getChatConversationsId","tags":["chat"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"patch":{"operationId":"patchChatConversationsId","tags":["chat"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120}},"required":["title"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":["string","null"]}},"required":["id","title"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"operationId":"deleteChatConversationsId","tags":["chat"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/chat/runs/{id}":{"get":{"operationId":"getChatRunsId","tags":["chat"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"run":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["running","completed","failed","aborted"]},"reason":{"type":["string","null"]},"conversationId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"assistantMessageId":{"type":["string","null"]}},"required":["id","status","reason","conversationId","assistantMessageId"],"additionalProperties":false},"message":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"role":{"type":"string"},"parts":{"type":"array","items":{}},"metadata":{}},"required":["id","role","parts","metadata"],"additionalProperties":false},{"type":"null"}]}},"required":["run","message"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/chat/runs/{id}/cancel":{"post":{"operationId":"postChatRunsIdCancel","tags":["chat"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"run":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["running","completed","failed","aborted"]},"reason":{"type":["string","null"]},"conversationId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"assistantMessageId":{"type":["string","null"]}},"required":["id","status","reason","conversationId","assistantMessageId"],"additionalProperties":false},"message":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"role":{"type":"string"},"parts":{"type":"array","items":{}},"metadata":{}},"required":["id","role","parts","metadata"],"additionalProperties":false},{"type":"null"}]}},"required":["run","message"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/chat/feedback":{"post":{"operationId":"postChatFeedback","tags":["chat"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"eventType":{"type":"string","const":"feedback"},"runId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"messageId":{"type":"string","minLength":1,"maxLength":200},"value":{"type":"string","enum":["good_answer","wrong"]}},"required":["eventType","runId","messageId","value"]},{"type":"object","properties":{"eventType":{"type":"string","const":"outcome_action"},"runId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"messageId":{"type":"string","minLength":1,"maxLength":200},"value":{"type":"string","enum":["copy"]}},"required":["eventType","runId","messageId","value"]}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true},"recorded":{"type":"boolean"}},"required":["ok","recorded"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/details":{"get":{"operationId":"getBillingDetails","tags":["billing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/checkout-status":{"get":{"operationId":"getBillingCheckoutStatus","tags":["billing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/checkout":{"post":{"operationId":"postBillingCheckout","tags":["billing"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tier":{"default":"core","type":"string","enum":["core"]},"interval":{"type":"string","const":"monthly"},"source":{"default":"app_upgrade","type":"string","enum":["app_upgrade","post_import","signup"]},"returnTo":{"type":"string","enum":["/connect","/assistant","/money","/settings","/settings#billing","/settings#privacy-data","/settings/imessage","/recurring/bills","/checklist","/todo","/taxes"]},"surface":{"type":"string","enum":["chat_subscription_paywall","ai_usage_banner","connection_gate","money_gate","export_gate","settings_billing","connect_bank_gate","connect_plan_notice","imessage_gate","overview_core_rail","household_invite_gate","recurring_gate","checklist_gate","todo_gate"]},"promoCode":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"reward":{"type":"boolean","const":true}},"required":["interval"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/assistant-boost":{"post":{"operationId":"postBillingAssistantBoost","tags":["billing"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"checkoutAttemptId":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["checkoutAttemptId"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/taxes":{"post":{"operationId":"postBillingTaxes","tags":["billing"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"taxYear":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checkoutAttemptId":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["taxYear","checkoutAttemptId"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/cancel-intent":{"post":{"operationId":"postBillingCancelIntent","tags":["billing"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reason":{"type":"string","enum":["too_expensive","not_using_it","missing_something","switching_tool","sync_problems","temporary","other"]},"interval":{"type":"string","enum":["monthly"]}},"required":["reason"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/pause":{"post":{"operationId":"postBillingPause","tags":["billing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/portal":{"get":{"operationId":"getBillingPortal","tags":["billing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/billing/subscription":{"get":{"operationId":"getBillingSubscription","tags":["billing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/{id}":{"patch":{"operationId":"patchConnectionsId","tags":["connections"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"nickname":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}]}},"required":["nickname"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"success":{"type":"boolean","const":true},"nickname":{"type":["string","null"]}},"required":["success","nickname"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"operationId":"deleteConnectionsId","tags":["connections"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"success":{"type":"boolean","const":true},"lifecycleState":{"type":"string","enum":["active","disconnect_pending","disconnected","delete_pending"]}},"required":["success","lifecycleState"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/exit-reason":{"post":{"operationId":"postConnectionsExitReason","tags":["connections"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"source":{},"reason":{}},"required":["source","reason"]}}}},"responses":{"204":{"description":"No content"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/events":{"post":{"operationId":"postConnectionsEvents","tags":["connections"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"provider":{"type":"string","const":"plaid"},"event":{"type":"string","enum":["plaid.link_opened","plaid.link_exited","plaid.link_succeeded"]},"attemptId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mode":{"type":"string","enum":["create","update"]},"connectionId":{"type":"string","maxLength":64},"institutionId":{"type":"string","maxLength":64},"institutionName":{"type":"string","maxLength":160},"linkSessionId":{"type":"string","maxLength":128},"errorCode":{"type":"string","maxLength":96},"errorClass":{"type":"string","maxLength":96},"metadata":{"type":"object","properties":{"exit_kind":{"type":"string","enum":["customer_exit","provider_error","betteroff_error","unknown"]},"exit_stage":{"type":"string","enum":["institution","credentials","verification","oauth","account_selection","completion","unknown"]},"duration_band":{"type":"string","enum":["under_10s","10_to_30s","30_to_120s","2_to_5m","over_5m","unknown"]},"retryable":{"type":"boolean"},"sdk_status":{"type":"string","enum":["requires_institution","requires_credentials","requires_verification","requires_oauth","requires_account_selection","complete","unknown"]}},"additionalProperties":false}},"required":["provider","event"]}}}},"responses":{"204":{"description":"No content"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/{id}/delete":{"post":{"operationId":"postConnectionsIdDelete","tags":["connections"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"success":{"type":"boolean","const":true},"lifecycleState":{"type":"string","enum":["active","disconnect_pending","disconnected","delete_pending"]}},"required":["success","lifecycleState"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/{id}/refresh":{"post":{"operationId":"postConnectionsIdRefresh","tags":["connections"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/start":{"post":{"operationId":"postConnectionsStart","tags":["connections"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"source":{"type":"string","const":"plaid"},"input":{"type":"object","properties":{"connectionId":{"type":"string","maxLength":64},"institutionId":{"type":"string","maxLength":64},"products":{"default":[],"type":"array","items":{"type":"string","enum":["investments","investment_transactions","liabilities","liabilities_only"]}}}}},"required":["source"]},{"type":"object","properties":{"source":{"type":"string","const":"exchange"},"input":{"type":"object","properties":{"sameAccountConfirmed":{"type":"boolean"},"connectionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"exchange":{"type":"string","minLength":1,"maxLength":64},"apiKey":{"type":"string","minLength":1,"maxLength":512},"secret":{"type":"string","minLength":1,"maxLength":1024},"password":{"type":"string","maxLength":256},"uid":{"type":"string","maxLength":256}},"required":["exchange","apiKey","secret"]}},"required":["source","input"]},{"type":"object","properties":{"source":{"type":"string","const":"wallet"},"input":{"type":"object","properties":{"connectionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"address":{"type":"string","minLength":1,"maxLength":128},"chain":{"type":"string","minLength":1,"maxLength":32}},"required":["address","chain"]}},"required":["source","input"]}]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/finish":{"post":{"operationId":"postConnectionsFinish","tags":["connections"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"provider":{"type":"string","const":"plaid"},"input":{"type":"object","properties":{"attemptId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"publicToken":{"type":"string","maxLength":512},"connectionId":{"type":"string","maxLength":64},"mode":{"default":"create","type":"string","enum":["create","update"]},"products":{"default":[],"type":"array","items":{"type":"string","enum":["investments","investment_transactions","liabilities","liabilities_only"]}},"metadata":{"type":"object","properties":{"institution":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","maxLength":160}}},{"type":"null"}]},"link_session_id":{"type":"string","maxLength":128}}}}}},"required":["provider","input"]}]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/household/invitations/{id}":{"get":{"operationId":"getHouseholdInvitationsId","tags":["household"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/household/invitations/{id}/accept":{"post":{"operationId":"postHouseholdInvitationsIdAccept","tags":["household"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/household/succession":{"get":{"operationId":"getHouseholdSuccession","tags":["household"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postHouseholdSuccession","tags":["household"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accept":{"type":"boolean"}},"required":["token","accept"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/settings/privacy-consent":{"patch":{"operationId":"patchSettingsPrivacyConsent","tags":["settings"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"productAnalytics":{"type":"boolean"},"aiProcessing":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/settings/security/delete-account":{"delete":{"operationId":"deleteSettingsSecurityDeleteAccount","tags":["settings"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"confirmation":{"type":"string","const":"DELETE"},"reason":{}},"required":["email","confirmation"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/settings/security/cancel-deletion":{"post":{"operationId":"postSettingsSecurityCancelDeletion","tags":["settings"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/settings/security/api-tokens":{"get":{"operationId":"getSettingsSecurityApiTokens","tags":["settings"],"security":[{"session":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokens":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":["string","null"]},"prefix":{"type":["string","null"]},"scopes":{"type":"array","items":{"type":"string","enum":["accounts:read","networth:read","cashflow:read","investments:read","transactions:read","debts:read","checklist:read","activity:read","corrections:prepare","feedback:submit","transfers:prepare","transfers:bank","transfers:vault","transfers:read"]}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","name","prefix","scopes","createdAt","expiresAt","lastUsedAt","revokedAt"],"additionalProperties":false}}},"required":["tokens"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postSettingsSecurityApiTokens","tags":["settings"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"scopes":{"minItems":1,"type":"array","items":{"type":"string","enum":["accounts:read","networth:read","cashflow:read","investments:read","transactions:read","debts:read","checklist:read","activity:read","corrections:prepare","feedback:submit","transfers:prepare","transfers:bank","transfers:vault","transfers:read"]}},"expiresInDays":{"default":90,"type":"integer","minimum":1,"maximum":365}},"required":["name","scopes"]}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["accounts:read","networth:read","cashflow:read","investments:read","transactions:read","debts:read","checklist:read","activity:read","corrections:prepare","feedback:submit","transfers:prepare","transfers:bank","transfers:vault","transfers:read"]}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"token":{"type":"string","description":"Shown once; store it now."}},"required":["id","name","prefix","scopes","createdAt","expiresAt","token"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/settings/security/api-tokens/{id}":{"delete":{"operationId":"deleteSettingsSecurityApiTokensId","tags":["settings"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"revoked":{"type":"boolean","const":true}},"required":["revoked"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/account":{"get":{"operationId":"getExportAccount","tags":["export"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/full-backup":{"get":{"operationId":"getExportFullBackup","tags":["export"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/tax-report":{"get":{"operationId":"getExportTaxReport","tags":["export"],"security":[{"session":[]}],"parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/activity":{"get":{"operationId":"getMoneyActivity","tags":["money"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/connect":{"post":{"operationId":"postMoneyConnect","tags":["money"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"includeAcceptance":{"default":false,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/disconnect":{"post":{"operationId":"postMoneyDisconnect","tags":["money"],"security":[{"session":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/transfers":{"post":{"operationId":"postMoneyTransfers","tags":["money"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sourceAccountId":{"type":"string","pattern":"^eac_[0-9a-f]{32}$"},"destinationAccountId":{"type":"string","pattern":"^eac_[0-9a-f]{32}$"},"amountCents":{"type":"integer","minimum":100,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["sourceAccountId","destinationAccountId","amountCents","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"],"additionalProperties":false}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/requests/{id}/approve":{"post":{"operationId":"postMoneyRequestsIdApprove","tags":["money"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"digest":{"type":"string","pattern":"^[0-9a-f]{64}$"}},"required":["digest"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"],"additionalProperties":false}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/rules":{"post":{"operationId":"postMoneyRules","tags":["money"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sourceAccountId":{"type":"string","pattern":"^eac_[0-9a-f]{32}$"},"destinationAccountId":{"type":"string","pattern":"^eac_[0-9a-f]{32}$"},"amountCents":{"type":"integer","minimum":100,"maximum":9007199254740991},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"cadence":{"type":"string","enum":["weekly","biweekly","monthly"]},"day":{"type":"integer","minimum":0,"maximum":28}},"required":["sourceAccountId","destinationAccountId","amountCents","requestId","cadence","day"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"],"additionalProperties":false}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/rules/{id}/stop":{"post":{"operationId":"postMoneyRulesIdStop","tags":["money"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/operations":{"post":{"operationId":"postMoneyOperations","tags":["money"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"pay"},"walletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"counterparty":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"email"},"value":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"phone"},"value":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"handle"},"value":{"type":"string","pattern":"^@[a-z0-9._]{3,30}(-[a-z0-9._]{1,30})?$"}},"required":["type","value"],"additionalProperties":false}]}},"required":["requestId","action","walletId","amountCents","counterparty"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"request"},"walletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"counterparty":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"email"},"value":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"phone"},"value":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"handle"},"value":{"type":"string","pattern":"^@[a-z0-9._]{3,30}(-[a-z0-9._]{1,30})?$"}},"required":["type","value"],"additionalProperties":false}]}},"required":["requestId","action","walletId","amountCents","counterparty"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"deposit"},"walletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"},"amountCents":{"type":"integer","minimum":100,"maximum":50000},"externalAccountId":{"type":"string","pattern":"^eac_[0-9a-f]{32}$"}},"required":["requestId","action","walletId","amountCents","externalAccountId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"withdraw"},"walletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"externalAccountId":{"type":"string","pattern":"^eac_[0-9a-f]{32}$"}},"required":["requestId","action","walletId","amountCents","externalAccountId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"internal"},"walletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"destinationWalletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"}},"required":["requestId","action","walletId","amountCents","destinationWalletId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"checkout"},"amountCents":{"type":"integer","minimum":50,"maximum":50000}},"required":["requestId","action","amountCents"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"fulfill"},"walletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"resourceId":{"type":"string","pattern":"^prq_[0-9a-f]{32}$"}},"required":["requestId","action","walletId","amountCents","resourceId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"pay_bill"},"walletId":{"type":"string","pattern":"^wal_[0-9a-f]{32}$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"payeeAccountId":{"type":"string","pattern":"^epa_[0-9a-f]{32}$"},"reference":{"default":"","type":"string","maxLength":80,"pattern":"^[\\w .,#/-]*$"}},"required":["requestId","action","walletId","amountCents","payeeAccountId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"cancel_bill"},"resourceId":{"type":"string","pattern":"^ach_[0-9a-f]{32}$"}},"required":["requestId","action","resourceId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"cancel_payment"},"resourceId":{"type":"string","pattern":"^pay_[0-9a-f]{32}$"}},"required":["requestId","action","resourceId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"cancel_request"},"resourceId":{"type":"string","pattern":"^prq_[0-9a-f]{32}$"}},"required":["requestId","action","resourceId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"cancel_checkout"},"resourceId":{"type":"string","pattern":"^pmi_[0-9a-f]{32}$"}},"required":["requestId","action","resourceId"],"additionalProperties":false},{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":{"default":"","type":"string","maxLength":80},"action":{"type":"string","const":"refund"},"resourceId":{"type":"string","pattern":"^cpy_[0-9a-f]{32}$"},"amountCents":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"reason":{"type":"string","enum":["duplicate","fraudulent","requestedByPayer"]}},"required":["requestId","action","resourceId","amountCents","reason"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/money/payees":{"post":{"operationId":"postMoneyPayees","tags":["money"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["business","individual"]},"name":{"type":"string","minLength":2,"maxLength":100},"accountType":{"type":"string","enum":["checking","savings"]},"accountNumber":{"type":"string","pattern":"^\\d{4,17}$"},"routingNumber":{"type":"string"}},"required":["requestId","kind","name","accountType","accountNumber","routingNumber"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/action-requests/{id}/approve":{"post":{"operationId":"postActionRequestsIdApprove","tags":["action-requests"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"digest":{"type":"string","pattern":"^[0-9a-f]{64}$"}},"required":["digest"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/action-requests/{id}/cancel":{"post":{"operationId":"postActionRequestsIdCancel","tags":["action-requests"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/observations/dismiss":{"post":{"operationId":"postObservationsDismiss","tags":["observations"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"subjectKeys":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["subjectKeys"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"changed":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["changed"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/observations/snooze":{"post":{"operationId":"postObservationsSnooze","tags":["observations"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"subjectKeys":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["subjectKeys"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"changed":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["changed"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/observations/rate":{"post":{"operationId":"postObservationsRate","tags":["observations"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"subjectKeys":{"minItems":1,"maxItems":25,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"helpful":{"type":"boolean"}},"required":["subjectKeys","helpful"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"changed":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["changed"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/recurring/classify":{"post":{"operationId":"postRecurringClassify","tags":["recurring"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"classification":{"type":"string","enum":["bill","subscription","transfer"]}},"required":["id","classification"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"changed":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["changed"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/recurring/merge":{"post":{"operationId":"postRecurringMerge","tags":["recurring"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"into":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","into"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"changed":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["changed"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/recurring/split":{"post":{"operationId":"postRecurringSplit","tags":["recurring"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ids":{"minItems":2,"maxItems":50,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["ids"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"changed":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["changed"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/imports/destinations":{"get":{"operationId":"getImportsDestinations","tags":["imports"],"security":[{"session":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"mask":{"type":["string","null"]}},"required":["id","name","mask"],"additionalProperties":false}}},"required":["accounts"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/imports":{"post":{"operationId":"postImports","tags":["imports"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirm":{"type":"boolean","const":true},"filename":{"type":"string","maxLength":255},"csv":{"type":"string","maxLength":500000}},"required":["accountId","confirm","filename","csv"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"message":{"type":"string"}},"required":["batchId","message"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/imports/{id}/undo":{"post":{"operationId":"postImportsIdUndo","tags":["imports"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"message":{"type":"string"}},"required":["batchId","message"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/checklist/opportunities":{"post":{"operationId":"postChecklistOpportunities","tags":["checklist"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"strategy":{"type":"string","maxLength":50},"year":{"type":"integer","minimum":2025,"maximum":2100},"profile":{"type":"object","properties":{"personId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"personName":{"type":"string","minLength":1,"maxLength":100},"filingStatus":{"type":"string","enum":["unknown","single","joint","separate","head","surviving"]}},"required":["personId","personName","filingStatus"],"additionalProperties":false},"childcare":{"type":"object","properties":{"employer":{"type":"string","maxLength":100},"source":{"type":"string","maxLength":12000},"termsConfirmed":{"type":"boolean"},"planLimit":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"eligibleCosts":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"otherBenefits":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"earnedIncome":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"spouseEarnedIncome":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"filing":{"type":"string","enum":["unknown","single","joint","separate","head","surviving"]},"careConfirmed":{"type":"boolean"},"election":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"electionConfirmed":{"type":"boolean"},"comparison":{"type":"object","properties":{"agi":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"people":{"type":"string","enum":["unknown","one","multiple"]},"election":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"},"federalRate":{"type":"string","enum":["0","10","12","22","24","32","35","37","unknown"]},"taxAvailable":{"type":"string","pattern":"^(?:\\d{1,8}(?:\\.\\d{1,2})?)?$"}},"required":["agi","people","election","federalRate","taxAvailable"],"additionalProperties":false}},"required":["employer","source","termsConfirmed","planLimit","eligibleCosts","otherBenefits","earnedIncome","spouseEarnedIncome","filing","careConfirmed","election","electionConfirmed"],"additionalProperties":false},"label":{"type":"string","minLength":1,"maxLength":100},"answers":{"type":"object","propertyNames":{"type":"string","maxLength":40},"additionalProperties":{"type":"string","enum":["unknown","yes","no"]}},"amounts":{"type":"object","propertyNames":{"type":"string","maxLength":40},"additionalProperties":{"type":"string","maxLength":16}},"status":{"type":"string","enum":["review","waiting","completed","not_applicable"]},"followUp":{"type":"boolean"},"deadline":{"type":"string"},"followUpOn":{"type":"string"}},"required":["id","strategy","year","label","answers","amounts","status","followUp","deadline"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/checklist/retirement":{"post":{"operationId":"postChecklistRetirement","tags":["checklist"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"year":{"type":"integer","minimum":2026,"maximum":2100},"answers":{"type":"object","properties":{"activePlan":{"type":"string","enum":["unknown","yes","no"]},"matchAvailable":{"type":"string","enum":["unknown","yes","no"]},"fullMatch":{"type":"string","enum":["unknown","yes","no"]},"afterTaxAllowed":{"type":"string","enum":["unknown","yes","no"]},"inPlanConversion":{"type":"string","enum":["unknown","yes","no"]},"inServiceRollover":{"type":"string","enum":["unknown","yes","no"]},"rothSetupComplete":{"type":"string","enum":["unknown","yes","no"]},"compensation":{"type":"string","maxLength":16},"deferrals":{"type":"string","maxLength":16},"employer":{"type":"string","maxLength":16},"afterTax":{"type":"string","maxLength":16}},"required":["activePlan","matchAvailable","fullMatch","afterTaxAllowed","inPlanConversion","inServiceRollover","rothSetupComplete","compensation","deferrals","employer","afterTax"],"additionalProperties":false}},"required":["accountId","year","answers"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/checklist/items":{"post":{"operationId":"postChecklistItems","tags":["checklist"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"itemId":{"type":"string"},"status":{"type":"string","enum":["done","not_applicable","open"]},"answeredNo":{"type":"boolean"}},"required":["itemId","status"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/checklist/assignee":{"post":{"operationId":"postChecklistAssignee","tags":["checklist"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"itemId":{"type":"string"},"assignedUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]}},"required":["itemId","assignedUserId"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/checklist/profile":{"post":{"operationId":"postChecklistProfile","tags":["checklist"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"hasDependents":{"type":["boolean","null"]},"housing":{"anyOf":[{"type":"string","enum":["rent","own","other"]},{"type":"null"}]},"hasVehicle":{"type":["boolean","null"]},"employerBenefits":{"type":["boolean","null"]},"employerMatchPercent":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"contributionPercent":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["hasDependents","housing","hasVehicle","employerBenefits","employerMatchPercent","contributionPercent"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/checklist/steps":{"post":{"operationId":"postChecklistSteps","tags":["checklist"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"stepId":{"type":"string"},"checked":{"type":"boolean"},"stepIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string"}}},"required":["stepId","checked","stepIds"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/checklist/import":{"post":{"operationId":"postChecklistImport","tags":["checklist"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"done":{"maxItems":100,"type":"array","items":{"type":"string"}},"notApplicable":{"maxItems":100,"type":"array","items":{"type":"string"}}},"required":["done","notApplicable"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/category-rules/remove":{"post":{"operationId":"postCategoryRulesRemove","tags":["category-rules"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["payee","merchant"]}},"required":["id","kind"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/corrections/{id}/apply":{"post":{"operationId":"postCorrectionsIdApply","tags":["corrections"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"type":"string","enum":["selected","matching"]}},"required":["mode"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string"},"status":{"type":"string","enum":["applied","undone"]},"refreshPending":{"type":"boolean"}},"required":["id","kind","status","refreshPending"],"additionalProperties":{}}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/corrections/{id}/undo":{"post":{"operationId":"postCorrectionsIdUndo","tags":["corrections"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"type":"string","enum":["selected","matching"]}},"required":["mode"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string"},"status":{"type":"string","enum":["applied","undone"]},"refreshPending":{"type":"boolean"}},"required":["id","kind","status","refreshPending"],"additionalProperties":{}}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/taxes/basis":{"post":{"operationId":"postTaxesBasis","tags":["taxes"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"year":{"type":"integer","minimum":2025,"maximum":9999},"reviewKey":{"type":"string","pattern":"^[a-f0-9]{64}$"},"expectedHeadId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"costBasis":{"type":"string","pattern":"^\\d{1,14}(\\.\\d{1,4})?$"},"acquiredDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"evidence":{"type":"string","minLength":3,"maxLength":1000},"undo":{"type":"boolean"}},"required":["year","reviewKey","expectedHeadId","costBasis","acquiredDate","evidence"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/taxes/broker-statements":{"post":{"operationId":"postTaxesBrokerStatements","tags":["taxes"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"upload"},"year":{"type":"integer","minimum":2025,"maximum":9999},"accountId":{"type":"string","minLength":1,"maxLength":128},"filename":{"type":"string","maxLength":200},"csv":{"type":"string","minLength":1,"maxLength":750000}},"required":["mode","year","accountId","filename","csv"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","enum":["none","remove"]},"year":{"type":"integer","minimum":2025,"maximum":9999},"accountId":{"type":"string","minLength":1,"maxLength":128}},"required":["mode","year","accountId"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/attestation":{"get":{"operationId":"getInvestingAttestation","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postInvestingAttestation","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/account-stream":{"get":{"operationId":"getInvestingDecibelAccountStream","tags":["investing"],"security":[{"session":[]}],"parameters":[{"name":"owner","in":"query","required":false,"schema":{"type":"string"}},{"name":"subaccount","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authenticated account event stream","content":{"text/event-stream":{"schema":{"type":"string"}}}}}}},"/investing/hyperliquid/account-events":{"get":{"operationId":"getInvestingHyperliquidAccountEvents","tags":["investing"],"security":[{"session":[]}],"parameters":[{"name":"owner","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authenticated account event stream","content":{"text/event-stream":{"schema":{"type":"string"}}}}}}},"/investing/vaultsfyi/positions":{"get":{"operationId":"getInvestingVaultsfyiPositions","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/vaultsfyi/context":{"get":{"operationId":"getInvestingVaultsfyiContext","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/vaultsfyi/actions":{"post":{"operationId":"postInvestingVaultsfyiActions","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/vaultsfyi/authorize":{"post":{"operationId":"postInvestingVaultsfyiAuthorize","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/prediction/catalogue":{"get":{"operationId":"getInvestingPredictionCatalogue","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/prediction/rules":{"get":{"operationId":"getInvestingPredictionRules","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/prediction/histories":{"get":{"operationId":"getInvestingPredictionHistories","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/market-search":{"get":{"operationId":"getInvestingMarketSearch","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/transfer-assets":{"get":{"operationId":"getInvestingTransferAssets","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/funding-wallets":{"get":{"operationId":"getInvestingFundingWallets","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/bridges":{"get":{"operationId":"getInvestingBridges","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postInvestingBridges","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/bridges/quote":{"get":{"operationId":"getInvestingBridgesQuote","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/morpho/loans/status":{"get":{"operationId":"getInvestingMorphoLoansStatus","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/morpho/loans":{"post":{"operationId":"postInvestingMorphoLoans","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/loans/status":{"get":{"operationId":"getInvestingLoansStatus","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/parcl/account":{"get":{"operationId":"getInvestingParclAccount","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/parcl-v4/history":{"get":{"operationId":"getInvestingParclV4History","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/parcl-v4/discovery":{"get":{"operationId":"getInvestingParclV4Discovery","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/hyperliquid/access":{"get":{"operationId":"getInvestingHyperliquidAccess","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/access":{"get":{"operationId":"getInvestingDecibelAccess","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/market":{"get":{"operationId":"getInvestingDecibelMarket","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/book":{"get":{"operationId":"getInvestingDecibelBook","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/candles":{"get":{"operationId":"getInvestingDecibelCandles","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/account":{"get":{"operationId":"getInvestingDecibelAccount","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/vault-actions":{"post":{"operationId":"postInvestingVaultActions","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/intent-reports":{"post":{"operationId":"postInvestingIntentReports","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/transfers":{"post":{"operationId":"postInvestingTransfers","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/requested-transfers":{"post":{"operationId":"postInvestingRequestedTransfers","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/requested-vault-deposits":{"post":{"operationId":"postInvestingRequestedVaultDeposits","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/transfer-hashes":{"post":{"operationId":"postInvestingTransferHashes","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/reconcile":{"post":{"operationId":"postInvestingReconcile","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/bridges/authorize":{"post":{"operationId":"postInvestingBridgesAuthorize","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/bridges/hashes":{"post":{"operationId":"postInvestingBridgesHashes","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/bridges/reconcile":{"post":{"operationId":"postInvestingBridgesReconcile","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/hyperliquid/orders":{"post":{"operationId":"postInvestingHyperliquidOrders","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/loans":{"post":{"operationId":"postInvestingLoans","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/loopscale/withdrawals":{"post":{"operationId":"postInvestingLoopscaleWithdrawals","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/loopscale/bundles":{"post":{"operationId":"postInvestingLoopscaleBundles","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/solana-deposits":{"post":{"operationId":"postInvestingSolanaDeposits","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/solana-swaps":{"post":{"operationId":"postInvestingSolanaSwaps","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/parcl":{"post":{"operationId":"postInvestingParcl","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/perps":{"post":{"operationId":"postInvestingPerps","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/wallets":{"post":{"operationId":"postInvestingDecibelWallets","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/plans":{"post":{"operationId":"postInvestingDecibelPlans","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/investing/decibel/confirmations":{"post":{"operationId":"postInvestingDecibelConfirmations","tags":["investing"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/feedback":{"post":{"operationId":"postFeedback","tags":["feedback"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":5000},"category":{"default":"general","type":"string","enum":["bug","feature","general"]}},"required":["message"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/referral":{"get":{"operationId":"getReferral","tags":["referral"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/referral/stats":{"get":{"operationId":"getReferralStats","tags":["referral"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/sources":{"get":{"operationId":"getConnectionsSources","tags":["connections"],"security":[{"session":[]},{"apiToken":["accounts:read"]}],"x-stability":"beta","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string"},"label":{"type":"string"},"connectionKind":{"type":"string"},"flow":{"type":"string"},"startSupported":{"type":"boolean"},"finishRequired":{"type":"boolean"},"recommendedFor":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"startEndpoint":{"type":"string"},"finishEndpoint":{"type":"string"},"enabled":{"type":"boolean"}},"required":["id","source","label","connectionKind","flow","startSupported","finishRequired","recommendedFor","capabilities"],"additionalProperties":false},"description":"The kinds of connection BetterOff offers: a short fixed list that changes only with a BetterOff release. Not paginated."}},"required":["sources"],"additionalProperties":false}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/plaid/institutions":{"get":{"operationId":"getConnectionsPlaidInstitutions","tags":["connections"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/plaid/opt-ins":{"patch":{"operationId":"patchConnectionsPlaidOptIns","tags":["connections"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"connectionId":{"type":"string","minLength":1,"maxLength":64},"productOptIns":{"type":"object","properties":{"investments":{"type":"boolean"},"investmentTransactions":{"type":"boolean"},"liabilities":{"type":"boolean"}}}},"required":["connectionId","productOptIns"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/connections/ccxt":{"get":{"operationId":"getConnectionsCcxt","tags":["connections"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/categories":{"get":{"operationId":"getCategories","tags":["categories"],"security":[{"session":[]},{"apiToken":["transactions:read"]}],"x-stability":"beta","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"userId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"key":{"type":"string"},"identity":{"type":"string"},"label":{"type":"string"},"colorVar":{"type":"string"},"colorHex":{"type":["string","null"]},"icon":{"type":["string","null"]},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","userId","key","identity","label","colorVar","colorHex","icon","sortOrder","createdAt","updatedAt"],"additionalProperties":false},"description":"Every category the org has not archived, in one response. Not paginated: the list grows only when a member creates a category."}},"required":["categories"],"additionalProperties":false}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postCategories","tags":["categories"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"colorVar":{"type":"string"},"colorHex":{"type":"string"},"icon":{"type":"string"}},"required":["label"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/categories/assign":{"post":{"operationId":"postCategoriesAssign","tags":["categories"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"colorVar":{"type":"string"},"colorHex":{"type":"string"},"icon":{"type":"string"},"transactionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["label","transactionId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/categories/{id}":{"patch":{"operationId":"patchCategoriesId","tags":["categories"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"colorVar":{"type":"string"},"colorHex":{"type":["string","null"]},"icon":{"type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","headers":{"ETag":{"description":"The record's new version; send it as If-Match on the next write.","schema":{"type":"string"}}}},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"operationId":"deleteCategoriesId","tags":["categories"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/categories/merge":{"post":{"operationId":"postCategoriesMerge","tags":["categories"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sourceKey":{"type":"string","minLength":1,"maxLength":200},"targetKey":{"type":"string","minLength":1,"maxLength":200}},"required":["sourceKey","targetKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/transactions":{"get":{"operationId":"getTransactions","tags":["transactions"],"security":[{"session":[]},{"apiToken":["transactions:read"]}],"x-stability":"beta","parameters":[{"name":"limit","in":"query","required":false,"description":"Groups per page, 1 to 200. Default 25.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page. Valid only with the same filters and sort; otherwise 400 INVALID_CURSOR.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"date-desc (default), date-asc, amount-desc, or amount-asc.","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"30d (default), 90d, this-month, last-month, or all. Ignored when from or to is set.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD, in the org's time zone.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD, inclusive.","schema":{"type":"string"}},{"name":"account","in":"query","required":false,"description":"Account id.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Category key, or \"uncategorized\".","schema":{"type":"string"}},{"name":"subcategory","in":"query","required":false,"description":"Subcategory.","schema":{"type":"string"}},{"name":"merchant","in":"query","required":false,"description":"Merchant name, matched exactly without case.","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"expense, income, investment, transfer, refund, or pending.","schema":{"type":"string"}},{"name":"source","in":"query","required":false,"description":"banks, brokers, exchanges, wallets, or investments.","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Text in the name or merchant.","schema":{"type":"string"}},{"name":"transfers","in":"query","required":false,"description":"\"true\" keeps transfers in an expense list.","schema":{"type":"string"}},{"name":"sweeps","in":"query","required":false,"description":"\"true\" includes cash sweeps.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"txns":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"merchantId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"merchantName":{"type":["string","null"]},"merchantLogo":{"type":["string","null"]},"merchantWebsite":{"type":["string","null"]},"amount":{"type":"string","description":"Decimal string in `currency`. Positive is money leaving the account; negative is money coming in."},"currency":{"type":"string"},"quantity":{"anyOf":[{"type":"string","description":"Decimal string."},{"type":"null"}]},"symbol":{"type":["string","null"]},"date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"transactionType":{"type":"string"},"transactionClass":{"type":["string","null"]},"status":{"type":"string"},"paymentMethod":{"type":["string","null"]},"feeUsd":{"anyOf":[{"type":"string","description":"Decimal string."},{"type":"null"}]},"nativeAmount":{"anyOf":[{"type":"string","description":"Decimal string."},{"type":"null"}]},"nativeCurrency":{"type":["string","null"]},"fxRateUsed":{"anyOf":[{"type":"string","description":"Decimal string."},{"type":"null"}]},"settledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"isManual":{"type":"boolean"},"notes":{"type":["string","null"]},"decodedType":{"type":["string","null"]},"decodedDescription":{"type":"null"},"txGroupId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"legRole":{"type":"string"},"counterparties":{"anyOf":[{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},{"type":"null"}]},"receipt":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"source":{"type":"string"},"note":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["status","source","note","updatedAt"],"additionalProperties":false},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Send as If-Match (epoch ms or the ETag) on the next write."}},"required":["id","name","merchantId","merchantName","merchantLogo","merchantWebsite","amount","currency","quantity","symbol","date","category","subcategory","accountId","transactionType","transactionClass","status","paymentMethod","feeUsd","nativeAmount","nativeCurrency","fxRateUsed","settledAt","isManual","notes","decodedType","decodedDescription","txGroupId","legRole","counterparties","receipt","updatedAt"],"additionalProperties":false},"account":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"connectionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"name":{"type":"string"},"mask":{"type":["string","null"]},"institutionName":{"type":["string","null"]},"institutionLogo":{"type":["string","null"]}},"required":["id","connectionId","name","mask","institutionName","institutionLogo"],"additionalProperties":false},{"type":"null"}]}},"required":["transaction","account"],"additionalProperties":false}},"hasMore":{"type":"boolean"},"nextCursor":{"description":"Pass as `cursor` with the same filters and sort for the next page.","type":["string","null"]}},"required":["txns","hasMore","nextCursor"],"additionalProperties":false}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/transactions/{id}":{"patch":{"operationId":"patchTransactionsId","tags":["transactions"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"category":{"type":"string","maxLength":100},"subcategory":{"type":"string","maxLength":100},"notes":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"receipt":{"type":"object","properties":{"status":{"type":"string","enum":["missing","matched","review","not_needed"]},"source":{"default":"manual","type":"string","enum":["manual","email"]},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]}},"required":["status"],"additionalProperties":false},"learn":{"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","headers":{"ETag":{"description":"The record's new version; send it as If-Match on the next write.","schema":{"type":"string"}}}},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"operationId":"deleteTransactionsId","tags":["transactions"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/transactions/category-undo":{"post":{"operationId":"postTransactionsCategoryUndo","tags":["transactions"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"category":{"type":"string","minLength":1,"maxLength":100},"rows":{"minItems":1,"maxItems":501,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"category":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"categorySource":{"anyOf":[{"type":"string","enum":["user","provider","rule","ml","system"]},{"type":"null"}]}},"required":["id","category","subcategory","categorySource"]}},"rule":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"payee"},"pattern":{"type":"string","minLength":1,"maxLength":200},"previous":{"anyOf":[{"type":"object","properties":{"category":{"type":"string","minLength":1,"maxLength":100},"subcategory":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"amountMin":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"amountMax":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]}},"required":["category","subcategory","amountMin","amountMax"]},{"type":"null"}]}},"required":["kind","pattern","previous"]},{"type":"object","properties":{"kind":{"type":"string","const":"merchant"},"previous":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"category":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"categorySource":{"anyOf":[{"type":"string","enum":["user","inferred"]},{"type":"null"}]}},"required":["id","category","subcategory","categorySource"]}}},"required":["kind","previous"]}]},{"type":"null"}]}},"required":["category","rows","rule"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/transactions/{id}/splits":{"get":{"operationId":"getTransactionsIdSplits","tags":["transactions"],"security":[{"session":[]},{"apiToken":["transactions:read"]}],"x-stability":"beta","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"splits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"transactionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"amount":{"type":"string","description":"Decimal string in `currency`. Positive is money leaving the account; negative is money coming in."},"currency":{"type":"string","description":"The parent transaction's currency."},"categoryId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"merchantId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"notes":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","transactionId","amount","currency","categoryId","category","subcategory","merchantId","notes","createdAt"],"additionalProperties":false}}},"required":["splits"],"additionalProperties":false}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postTransactionsIdSplits","tags":["transactions"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"splits":{"minItems":2,"type":"array","items":{"type":"object","properties":{"amount":{"type":"string","minLength":1,"pattern":"^-?\\d+(?:\\.\\d{1,4})?$"},"category":{"type":"string"},"subcategory":{"type":"string"},"notes":{"type":"string"}},"required":["amount"]}}},"required":["splits"]}}}},"responses":{"200":{"description":"Success","headers":{"ETag":{"description":"The record's new version; send it as If-Match on the next write.","schema":{"type":"string"}}}},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"operationId":"deleteTransactionsIdSplits","tags":["transactions"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"description":"The record's new version; send it as If-Match on the next write.","schema":{"type":"string"}}}},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/transactions/bulk-delete":{"post":{"operationId":"postTransactionsBulkDelete","tags":["transactions"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ids":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["ids"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/transactions/manual":{"post":{"operationId":"postTransactionsManual","tags":["transactions"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"clientId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"amount":{"type":"string","minLength":1,"pattern":"^-?\\d+(?:\\.\\d{1,4})?$"},"name":{"type":"string","minLength":1,"maxLength":500},"date":{"type":"string"},"merchantName":{"type":"string","maxLength":500},"category":{"type":"string","maxLength":100},"subcategory":{"type":"string","maxLength":100},"notes":{"type":"string","maxLength":200}},"required":["clientId","accountId","amount","name","date"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/transactions/export":{"get":{"operationId":"getTransactionsExport","tags":["transactions"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/search":{"get":{"operationId":"getSearch","tags":["search"],"security":[{"session":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/accounts":{"get":{"operationId":"getAccounts","tags":["accounts"],"security":[{"session":[]},{"apiToken":["accounts:read"]}],"x-stability":"beta","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","updatedAt"],"additionalProperties":false}}},"required":["accounts"],"additionalProperties":false}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postAccounts","tags":["accounts"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"type":{"type":"string","minLength":1},"subtype":{"type":"string"},"currentBalance":{"type":"string","pattern":"^-?\\d+(?:\\.\\d{1,2})?$"},"currency":{"type":"string","minLength":2,"maxLength":12,"pattern":"^[A-Za-z0-9]+$"},"visibility":{"default":"household","type":"string","enum":["household","private"]}},"required":["name","type","currency"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/accounts/reorder":{"patch":{"operationId":"patchAccountsReorder","tags":["accounts"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"reset":{"type":"boolean","const":false}},"required":["orderedIds"]},{"type":"object","properties":{"reset":{"type":"boolean","const":true},"orderedIds":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["reset"]}]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/accounts/{id}":{"patch":{"operationId":"patchAccountsId","tags":["accounts"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"nickname":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}]},"isHidden":{"type":"boolean"},"name":{"type":"string","maxLength":200},"currentBalance":{"type":"string","pattern":"^-?\\d+(?:\\.\\d{1,2})?$"},"excludeFromSync":{"type":"boolean"},"displayOrder":{"type":"integer","minimum":0,"maximum":9007199254740991},"visibility":{"type":"string","enum":["household","private"]}}}}}},"responses":{"200":{"description":"Success","headers":{"ETag":{"description":"The record's new version; send it as If-Match on the next write.","schema":{"type":"string"}}}},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"operationId":"deleteAccountsId","tags":["accounts"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"description":"The record's ETag, or \"<epoch-ms>\" of its updatedAt. The write applies only while the record still has that version; otherwise 412 PRECONDITION_FAILED and nothing changes. Optional for compatibility: without it the write applies unconditionally.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"412":{"description":"The record changed since the If-Match version. Fetch it again and retry.","content":{"application/problem+json":{}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/accounts/{id}/funding-config":{"get":{"operationId":"getAccountsIdFundingConfig","tags":["accounts"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/accounts/{id}/funding-sessions":{"get":{"operationId":"getAccountsIdFundingSessions","tags":["accounts"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postAccountsIdFundingSessions","tags":["accounts"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/holdings/manual/{id}":{"patch":{"operationId":"patchHoldingsManualId","tags":["holdings"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"symbol":{"type":["string","null"]},"value":{"type":"number","minimum":0,"maximum":999999999},"costBasis":{"anyOf":[{"type":"number","minimum":0,"maximum":999999999},{"type":"null"}]},"purchaseDate":{"type":["string","null"]},"notes":{"type":["string","null"]},"quantity":{"type":"number","exclusiveMinimum":0,"maximum":999999999}}}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"operationId":"deleteHoldingsManualId","tags":["holdings"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/holdings/manual":{"post":{"operationId":"postHoldingsManual","tags":["holdings"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string"},"symbol":{"type":"string"},"type":{"type":"string"},"value":{"type":"number","minimum":0,"maximum":999999999},"costBasis":{"type":"number","minimum":0,"maximum":999999999},"purchaseDate":{"type":"string"},"notes":{"type":"string"},"quantity":{"type":"number","exclusiveMinimum":0,"maximum":999999999},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","value","accountId"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/holdings/{id}/opening-basis":{"post":{"operationId":"postHoldingsIdOpeningBasis","tags":["holdings"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"costBasis":{"type":"number","exclusiveMinimum":0,"maximum":999999999},"acquiredDate":{"type":"string"}},"required":["costBasis","acquiredDate"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/household":{"get":{"operationId":"getHousehold","tags":["household"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/household/invitations":{"post":{"operationId":"postHouseholdInvitations","tags":["household"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"role":{"type":"string","enum":["admin","viewer"]}},"required":["email","role"]}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/household/invitations/{id}/cancel":{"post":{"operationId":"postHouseholdInvitationsIdCancel","tags":["household"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/household/members/{id}":{"delete":{"operationId":"deleteHouseholdMembersId","tags":["household"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/settings/preferences":{"patch":{"operationId":"patchSettingsPreferences","tags":["settings"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"currency":{"type":"string","maxLength":10},"dateFormat":{"type":"string","maxLength":20},"startOfWeek":{"type":"string","enum":["sunday","monday"]},"numberFormat":{"type":"string","maxLength":20},"notifyEmail":{"type":"boolean"},"masterNotifications":{"type":"boolean"},"notifyWeeklySummary":{"type":"boolean"},"notifyObservationDigest":{"type":"boolean"},"notifyPositionAlerts":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/settings/profile":{"patch":{"operationId":"patchSettingsProfile","tags":["settings"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"avatarUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]}}}}}},"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/snapshots":{"get":{"operationId":"getExportSnapshots","tags":["export"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/account-statement":{"get":{"operationId":"getExportAccountStatement","tags":["export"],"security":[{"session":[]}],"parameters":[{"name":"accountId","in":"query","required":false,"schema":{"type":"string"}},{"name":"startDate","in":"query","required":false,"schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/spending-report":{"get":{"operationId":"getExportSpendingReport","tags":["export"],"security":[{"session":[]}],"parameters":[{"name":"startDate","in":"query","required":false,"schema":{"type":"string"}},{"name":"endDate","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/bill-calendar":{"get":{"operationId":"getExportBillCalendar","tags":["export"],"security":[{"session":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"string"}},{"name":"subscriptionsOnly","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/export/portfolio-performance":{"get":{"operationId":"getExportPortfolioPerformance","tags":["export"],"security":[{"session":[]}],"responses":{"200":{"description":"Success"},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/outbound-webhooks/endpoints":{"get":{"operationId":"getOutboundWebhooksEndpoints","tags":["outbound-webhooks"],"security":[{"session":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"endpoints":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["transaction.created","balance.changed","action_request.pending","connection.created","connection.removed","connection.needs_reauth"]},"description":"Events to deliver. Each is delivered within five minutes of the change."},"disabledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","url","events","disabledAt","consecutiveFailures","createdAt"],"additionalProperties":false}}},"required":["endpoints"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"operationId":"postOutboundWebhooksEndpoints","tags":["outbound-webhooks"],"security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","maxLength":2048},"events":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"string","enum":["transaction.created","balance.changed","action_request.pending","connection.created","connection.removed","connection.needs_reauth"]}}},"required":["url","events"],"additionalProperties":false}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"endpoint":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["transaction.created","balance.changed","action_request.pending","connection.created","connection.removed","connection.needs_reauth"]},"description":"Events to deliver. Each is delivered within five minutes of the change."},"disabledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","url","events","disabledAt","consecutiveFailures","createdAt"],"additionalProperties":false},"secret":{"type":"string","description":"Signing secret. Shown once; store it now."}},"required":["endpoint","secret"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/outbound-webhooks/endpoints/{id}":{"delete":{"operationId":"deleteOutboundWebhooksEndpointsId","tags":["outbound-webhooks"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/outbound-webhooks/endpoints/{id}/test":{"post":{"operationId":"postOutboundWebhooksEndpointsIdTest","tags":["outbound-webhooks"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"delivered":{"type":"boolean"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"error":{"type":["string","null"]}},"required":["delivered","status","error"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/outbound-webhooks/endpoints/{id}/deliveries":{"get":{"operationId":"getOutboundWebhooksEndpointsIdDeliveries","tags":["outbound-webhooks"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"deliveries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"eventType":{"type":"string"},"status":{"type":"string","enum":["pending","succeeded","failed"]},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastStatusCode":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastError":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"deliveredAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","eventId","eventType","status","attempts","lastStatusCode","lastError","createdAt","deliveredAt"],"additionalProperties":false}}},"required":["deliveries"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/outbound-webhooks/endpoints/{id}/deliveries/{deliveryId}/redeliver":{"post":{"operationId":"postOutboundWebhooksEndpointsIdDeliveriesDeliveryIdRedeliver","tags":["outbound-webhooks"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"delivered":{"type":"boolean"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"error":{"type":["string","null"]}},"required":["delivered","status","error"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/outbound-webhooks/endpoints/{id}/enable":{"post":{"operationId":"postOutboundWebhooksEndpointsIdEnable","tags":["outbound-webhooks"],"security":[{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"endpoint":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["transaction.created","balance.changed","action_request.pending","connection.created","connection.removed","connection.needs_reauth"]},"description":"Events to deliver. Each is delivered within five minutes of the change."},"disabledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","url","events","disabledAt","consecutiveFailures","createdAt"],"additionalProperties":false}},"required":["endpoint"],"additionalProperties":false}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_search_markets":{"post":{"operationId":"betteroff_search_markets","summary":"Search markets","description":"Use this when the user asks to find public FX reference rates, Hyperliquid spot or perpetual markets, or prediction outcomes. Search public FX reference rates (USD base), Hyperliquid spot/perpetual markets, and prediction markets. Filter by kind or source to narrow coverage. Returns at most 50 dated observations per page, busiest first by 24-hour USD volume where reported. For the next page, pass page.nextCursor as cursor with the same query, kind, source, and limit.","tags":["tools"],"security":[{"agentOAuth":["investments:read"]},{"apiToken":["investments:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":120},"kind":{"anyOf":[{"type":"string","enum":["fx","perpetual","spot","prediction"]},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["frankfurter","hyperliquid-perps","hyperliquid-spot","polymarket","polymarket-us","kalshi","pascal"]},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0,"maximum":50000},"cursor":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["query","kind","source","limit","offset"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"markets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["fx","perpetual","spot","prediction"]},"source":{"type":"string","enum":["frankfurter","hyperliquid-perps","hyperliquid-spot","polymarket","polymarket-us","kalshi","pascal"]},"price":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"quoteCurrency":{"type":"string"},"priceType":{"type":"string","enum":["reference","mark","probability","yes-ask","yes-bid"]},"asOf":{"type":["string","null"]},"observedAt":{"type":"string"},"url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"volume24hUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["id","symbol","name","kind","source","price","quoteCurrency","priceType","asOf","observedAt","url"],"additionalProperties":false}},"coverage":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["frankfurter","hyperliquid-perps","hyperliquid-spot","polymarket","polymarket-us","kalshi","pascal"]},"status":{"type":"string","enum":["available","partial","unavailable"]},"observedAt":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["source","status","observedAt","count"],"additionalProperties":false}},"page":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextOffset":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"nextCursor":{"type":["string","null"]},"truncated":{"type":"boolean"}},"required":["total","nextOffset","truncated"],"additionalProperties":false}},"required":["markets","coverage","page"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_overview":{"post":{"operationId":"betteroff_get_overview","summary":"Get overview","description":"Use this when the user asks for a household financial overview or data coverage. Get a compact household picture: latest stored valuation, account coverage, canonical ledger review counts, and the masked login and household name. No provider refresh.","tags":["tools"],"security":[{"agentOAuth":["accounts:read","networth:read"]},{"apiToken":["accounts:read","networth:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"identity":{"type":"object","properties":{"login":{"type":["string","null"]},"name":{"type":["string","null"]},"household":{"deprecated":true,"type":["string","null"]}},"required":["login","name","household"],"additionalProperties":false},"valuation":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"date":{"type":"string"},"netWorth":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalAssets":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalLiabilities":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"baseCurrency":{"type":"string"},"methodologyVersion":{"type":"string"},"reconciliationStatus":{"type":"string","enum":["reconciled","incomplete","discrepancy"]},"accountCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","date","netWorth","totalAssets","totalLiabilities","baseCurrency","methodologyVersion","reconciliationStatus","accountCount"],"additionalProperties":false},{"type":"null"}]},"coverage":{"type":"object","properties":{"accountCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"unknownBalanceCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"unknownFreshnessCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["accountCount","unknownBalanceCount","unknownFreshnessCount"],"additionalProperties":false},"ledger":{"anyOf":[{"type":"object","properties":{"engineVersion":{"type":"string"},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"reviewItemCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"reviewCauses":{"type":"array","items":{"type":"string"}},"transactionsWithoutEvidence":{"type":"integer","minimum":0,"maximum":9007199254740991},"reconciliationBreakCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"latestRunFailed":{"type":"boolean"}},"required":["engineVersion","publishedAt","reviewItemCount","reviewCauses","transactionsWithoutEvidence","reconciliationBreakCount","latestRunFailed"],"additionalProperties":false},{"type":"null"}]}},"required":["identity","valuation","coverage","ledger"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_setup_status":{"post":{"operationId":"betteroff_get_setup_status","summary":"Get setup status","description":"Use this when the user asks what is left to set up, whether billing is active, or which connections need reconnecting. Get this household's BetterOff setup status: billing state, connected-account coverage, and connections that need the user to reconnect, each with a link. The user completes every step in BetterOff while signed in; this tool cannot start checkout, connect accounts, or change agent access.","tags":["tools"],"security":[{"agentOAuth":["accounts:read"]},{"apiToken":["accounts:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"access":{"type":"object","properties":{"state":{"type":"string"},"accessEndsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["state","accessEndsAt"],"additionalProperties":false},"accounts":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"needsActionCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["count","needsActionCount"],"additionalProperties":false},"steps":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string","enum":["subscription","connect_accounts","fix_connections"]},"status":{"type":"string","enum":["done","action_needed","optional"]},"url":{"type":"string","format":"uri"}},"required":["step","status","url"],"additionalProperties":false}},"manageAgentAccessUrl":{"type":"string","format":"uri"}},"required":["access","accounts","steps","manageAgentAccessUrl"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_list_accounts":{"post":{"operationId":"betteroff_list_accounts","summary":"List accounts","description":"Use this when the user asks which accounts are connected or wants account balances. Get the user's connected accounts with balances, types, and institutions.","tags":["tools"],"security":[{"agentOAuth":["accounts:read"]},{"apiToken":["accounts:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accountType":{"description":"Filter by account type. Omit or use null to get all accounts.","anyOf":[{"type":"string","enum":["depository","investment","credit","loan","crypto","wallet"]},{"type":"null"}]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"displayName":{"type":["string","null"]},"name":{"type":["string","null"]},"type":{"type":"string"},"balance":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"balanceAsOf":{"type":["string","null"]},"balanceAsOfSource":{"anyOf":[{"type":"string","enum":["institution","fetched","last_sync"]},{"type":"null"}]},"currency":{"type":["string","null"]},"isHidden":{"type":["boolean","null"]}},"required":["id","displayName","name","type","balance","balanceAsOf","balanceAsOfSource","currency","isHidden"],"additionalProperties":{}}},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_net_worth_history":{"post":{"operationId":"betteroff_get_net_worth_history","summary":"Get net worth history","description":"Use this when the user asks how net worth changed over time. Read stored household valuations over time, paged by cursor. For a two-date explanation use betteroff_explain_net_worth_change.","tags":["tools"],"security":[{"agentOAuth":["networth:read"]},{"apiToken":["networth:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"period":{"anyOf":[{"type":"string","enum":["7d","30d","90d","all"]},{"type":"null"}],"description":"Time period for the trend. Use '7d' for last week, '30d' for last month, '90d' for last quarter, 'all' for all history, or null for '30d'."},"cursor":{"anyOf":[{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"maximum":9007199254740991},"revision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["offset","revision"]},{"type":"null"}]},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":60},{"type":"null"}]}},"required":["period"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"period":{"type":"string","enum":["7d","30d","90d","all"]},"dataPoints":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"date":{"type":"string"},"netWorth":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"currency":{"type":"string"},"reconciliationStatus":{"type":"string"}},"required":["id","date","netWorth","currency","reconciliationStatus"],"additionalProperties":false}},"change":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"changePercent":{"type":["number","null"]},"asOf":{"type":["string","null"]},"baseDate":{"type":"string"},"baseNetWorth":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"baseCurrency":{"type":"string"},"currentNetWorth":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalAssets":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalLiabilities":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."}},"required":["period","dataPoints","change"],"additionalProperties":{}},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_explain_net_worth_change":{"post":{"operationId":"betteroff_explain_net_worth_change","summary":"Explain net worth change","description":"Use this when the user asks what caused net worth to change between two dates. Reconcile two stored net-worth valuations using asset and liability changes.","tags":["tools"],"security":[{"agentOAuth":["networth:read"]},{"apiToken":["networth:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"from":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"date":{"type":"string"},"netWorth":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalAssets":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalLiabilities":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"baseCurrency":{"type":"string"},"methodologyVersion":{"type":"string"},"reconciliationStatus":{"type":"string","enum":["reconciled","incomplete","discrepancy"]},"accountCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","date","netWorth","totalAssets","totalLiabilities","baseCurrency","methodologyVersion","reconciliationStatus","accountCount"],"additionalProperties":false},"to":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"date":{"type":"string"},"netWorth":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalAssets":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalLiabilities":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"baseCurrency":{"type":"string"},"methodologyVersion":{"type":"string"},"reconciliationStatus":{"type":"string","enum":["reconciled","incomplete","discrepancy"]},"accountCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","date","netWorth","totalAssets","totalLiabilities","baseCurrency","methodologyVersion","reconciliationStatus","accountCount"],"additionalProperties":false},"baseCurrency":{"type":"string"},"observedChange":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"assetChange":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"liabilityContribution":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"reconciliationResidual":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"economicAttributionResidual":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"accountCoverageChanged":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["from","to","baseCurrency","observedChange","assetChange","liabilityContribution","reconciliationResidual","economicAttributionResidual","accountCoverageChanged","warnings"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_search_transactions":{"post":{"operationId":"betteroff_search_transactions","summary":"Search transactions","description":"Use this when the user asks to find transactions or total a filtered set of transactions. Search transactions by date, merchant, category, trait, type/class, account, or amount; a summary totals all matches. Brokerage deposits/withdrawals: transactionClass `brokerage`, transactionTypes `transfer_in`/`transfer_out`/`deposit`/`withdrawal`.","tags":["tools"],"security":[{"agentOAuth":["transactions:read"]},{"apiToken":["transactions:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"allTime":{"default":null,"description":"Use true for all synced merchant history; dates are ignored. Use it when the answer may be older than the default 30 days: the last or first time, ever, annual or one-off charges, or 'did I pay X before'.","type":["boolean","null"]},"cursor":{"default":null,"anyOf":[{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"maximum":100000},"revision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["offset","revision"]},{"type":"null"}]},"startDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"Start date (ISO format, e.g. 2025-01-01). Use null for 30 days ago."},"endDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"End date (ISO format). Use null for today."},"merchant":{"description":"Merchant name to search for (partial match).","type":["string","null"]},"traits":{"anyOf":[{"type":"array","items":{"type":"string","enum":["discretionary","travel","health","kids","gifts","charity","business","crypto"]}},{"type":"null"}],"description":"Only transactions whose merchant has every listed trait. Use for purposes a category does not capture. discretionary: optional spending: dining out, entertainment, hobbies, shopping for wants; travel: trips: flights, hotels, rental cars, cruises, travel booking; health: medical care: doctors, dentists, pharmacies, vision, therapy; kids: children: childcare, schools, tutoring, toys, kids' activities; gifts: gifts: florists, gift shops, gift cards; charity: donations: charities, nonprofits, religious organizations, fundraisers; business: work expenses: software, office supplies, coworking, professional services; crypto: crypto: exchanges, on-ramps, wallets, crypto cards. Person-to-person payments and unrecognized merchants carry no traits. Use null for no trait filter."},"category":{"description":"Category code (e.g. FOOD_AND_DRINK, TRANSPORTATION, ENTERTAINMENT).","type":["string","null"]},"transactionTypes":{"anyOf":[{"type":"array","items":{"type":"string","enum":["bank_deposit","bank_withdrawal","card_charge","card_refund","ach_transfer","wire","check","atm","cash","interest_payment","fee","buy","sell","short_sell","buy_to_cover","swap","dividend","qualified_dividend","capital_gain_distribution","return_of_capital","interest","bond_coupon","airdrop","fork","staking_reward","mining_reward","lending_reward","nft_mint","nft_sale","nft_purchase","lp_mint","lp_burn","lending_supply","lending_borrow","lending_repay","transfer","bridge_out","bridge_in","split","spin_off","merger_proceeds","rights_issue","manual_valuation_change","other","payment","refund","deposit","withdrawal","receive","send","transfer_in","transfer_out"]}},{"type":"null"}],"description":"Filter by transaction type. For investment account deposits/withdrawals, use transfer_in/deposit/bank_deposit for deposits and transfer_out/withdrawal/bank_withdrawal for withdrawals."},"transactionClass":{"anyOf":[{"type":"string","enum":["bank","brokerage","crypto_exchange","blockchain_wallet"]},{"type":"null"}],"description":"Filter by normalized transaction class. Use brokerage for investment accounts."},"accountId":{"description":"Filter to a specific account by ID. Use null to search all accounts.","type":["string","null"]},"minAmount":{"description":"Minimum transaction amount.","type":["number","null"]},"maxAmount":{"description":"Maximum transaction amount.","type":["number","null"]},"limit":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Max results to return (default 25, max 50). Use null for 25."}},"required":["startDate","endDate","merchant","traits","category","transactionTypes","transactionClass","accountId","minAmount","maxAmount","limit"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"summary":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"signConvention":{"type":"string","const":"positive_is_outflow"},"netAmount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalSpent":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalReceived":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"outflowCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"inflowCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageOutflow":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"totalCurrency":{"type":"string"},"unconvertedRowCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"truncated":{"type":"boolean"}},"required":["count","returnedCount","signConvention","netAmount","totalSpent","totalReceived","outflowCount","inflowCount","averageOutflow","totalCurrency","unconvertedRowCount","truncated"],"additionalProperties":{}},"transactions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":["string","null"]},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text in the row's currency. Positive is an outflow; negative is an inflow."},"currency":{"type":["string","null"]},"date":{"type":"string"}},"required":["id","name","amount","currency","date"],"additionalProperties":{}}},"period":{"type":"object","properties":{"start":{"type":["string","null"]},"end":{"type":["string","null"]}},"required":["start","end"],"additionalProperties":{}},"page":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}},"required":["summary","transactions","period","page"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_analyze_spending":{"post":{"operationId":"betteroff_analyze_spending","summary":"Analyze spending","description":"Use this when the user asks where money went or compares spending across periods. Read category or merchant spending for a period, optionally against an earlier one. Excludes transfers and loan payments; fees and interest count.","tags":["tools"],"security":[{"agentOAuth":["transactions:read"]},{"apiToken":["transactions:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"groupBy":{"type":"string","enum":["category","merchant"]},"startDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"Start date (ISO). Use null for start of current month."},"endDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"End date (ISO). Use null for today."},"comparison":{"anyOf":[{"type":"object","properties":{"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["startDate","endDate"]},{"type":"null"}]}},"required":["startDate","endDate","comparison"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"period":{"type":"object","properties":{"start":{"type":["string","null"]},"end":{"type":["string","null"]}},"required":["start","end"],"additionalProperties":{}},"totalSpending":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"groupCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"categoryCode":{"type":["string","null"]},"merchant":{"type":["string","null"]},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"percentage":{"type":"number"}},"required":["category","categoryCode","amount","count","percentage"],"additionalProperties":false}},"comparison":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}},"required":["period","totalSpending","groupCount","categories"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_detect_spending_patterns":{"post":{"operationId":"betteroff_detect_spending_patterns","summary":"Detect spending patterns","description":"Use this when the user asks about spending habits, trends, or unusual transactions. Detect spending patterns: frequent merchants, complete-month trends, and unusual transactions (monthly repeats such as rent excluded). Frequent merchants are habits, not bills; use betteroff_list_recurring for recurring charges.","tags":["tools"],"security":[{"agentOAuth":["transactions:read"]},{"apiToken":["transactions:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"startDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"Start date (ISO). Use null for 6 months ago."},"endDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"End date (ISO). Use null for today."}},"required":["startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"asOf":{"type":["string","null"]},"period":{"type":"object","properties":{"start":{"type":["string","null"]},"end":{"type":["string","null"]}},"required":["start","end"],"additionalProperties":{}},"transactionCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"frequentMerchantPatterns":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}},"monthlyTrend":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}},"monthlyOutliers":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}},"overallTrend":{"$ref":"#/$defs/__schema1"},"overallTrendBasis":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}},"unusualTransactions":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}}},"required":["asOf","period","transactionCount","frequentMerchantPatterns","monthlyTrend","monthlyOutliers","overallTrend","overallTrendBasis","unusualTransactions"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema3"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]},"__schema3":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema3"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema3"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_account_flows":{"post":{"operationId":"betteroff_get_account_flows","summary":"Get account flows","description":"Use this when the user asks how much entered or left specific accounts. Gross inflows, gross outflows, and net flow for selected accounts over a date range, aggregated over ALL matches server-side, e.g. 'how much did I deposit into Schwab this year'. Prefer this over betteroff_search_transactions for deposit/withdrawal totals.","tags":["tools"],"security":[{"agentOAuth":["accounts:read","transactions:read"]},{"apiToken":["accounts:read","transactions:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"startDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"Start date (ISO format, e.g. 2026-01-01). Use null for Jan 1 of this year."},"endDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"End date (ISO format). Use null for today."},"accountIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Specific account IDs to include. Use null to select by accountType/institution."},"accountType":{"anyOf":[{"type":"string","enum":["depository","investment","credit","loan","crypto","wallet"]},{"type":"null"}],"description":"Optional account type filter. Use investment for brokerage/retirement accounts."},"institution":{"description":"Optional institution name filter, e.g. Charles Schwab. Partial matches are accepted.","type":["string","null"]},"direction":{"anyOf":[{"type":"string","enum":["all","inflow","outflow"]},{"type":"null"}],"description":"Use inflow for deposits only, outflow for withdrawals only, all for both."},"limit":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Max transaction rows to return for evidence (default 25, max 100)."}},"required":["startDate","endDate","accountIds","accountType","institution","direction","limit"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"period":{"type":"object","properties":{"start":{"type":["string","null"]},"end":{"type":["string","null"]}},"required":["start","end"],"additionalProperties":{}},"filters":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"summary":{"type":"object","properties":{"currency":{"type":"string"},"deposited":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"withdrawn":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"net":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"depositCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"withdrawalCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"matchingCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["currency","deposited","withdrawn","net","depositCount","withdrawalCount","matchingCount"],"additionalProperties":{}},"accounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":["string","null"]},"officialName":{"type":["string","null"]},"type":{"type":"string"},"subtype":{"type":["string","null"]},"mask":{"type":["string","null"]},"institution":{"type":["string","null"]},"currency":{"type":"string"},"deposited":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"withdrawn":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"net":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Deposited minus withdrawn, in currency. Negative is a net outflow."},"depositCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"withdrawalCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"connectionHealth":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}},{"type":"null"}]}},"required":["id","name","officialName","type","subtype","mask","institution","currency","deposited","withdrawn","net","depositCount","withdrawalCount","connectionHealth"],"additionalProperties":{}}},"transactions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":["string","null"]},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text in the row's currency. Positive is an outflow; negative is an inflow."},"absoluteAmount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"currency":{"type":"string"},"date":{"type":"string"},"direction":{"type":"string","enum":["inflow","outflow"]},"flowLabel":{"type":"string","enum":["deposit","withdrawal"]},"transactionType":{"type":"string"},"transactionClass":{"type":["string","null"]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"status":{"type":"string"},"account":{"type":"string"}},"required":["id","name","amount","absoluteAmount","currency","date","direction","flowLabel","transactionType","transactionClass","category","subcategory","status","account"],"additionalProperties":{}}}},"required":["period","filters","summary","accounts","transactions"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema2"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_cash_flow":{"post":{"operationId":"betteroff_get_cash_flow","summary":"Get cash flow","description":"Use this when the user asks about income, expenses, or cash flow. Get income vs expenses for a period with prior-period comparison and projections. Use for cash flow, earned vs spent, or saving questions.","tags":["tools"],"security":[{"agentOAuth":["cashflow:read"]},{"apiToken":["cashflow:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"startDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"Start date (ISO). Use null for start of current month."},"endDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"End date (ISO). Use null for today."}},"required":["startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"baseCurrency":{"type":"string"},"period":{"type":"object","properties":{"start":{"type":["string","null"]},"end":{"type":["string","null"]}},"required":["start","end"],"additionalProperties":{}},"income":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"expenses":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"netCashFlow":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"transactionCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"savingsRatePercent":{"type":["number","null"]},"dailyRates":{"type":"object","properties":{"income":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"expenses":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."}},"required":["income","expenses"],"additionalProperties":false},"projection":{"anyOf":[{"type":"object","properties":{"projectedIncome":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"projectedExpenses":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"projectedNet":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."}},"required":["projectedIncome","projectedExpenses","projectedNet"],"additionalProperties":false},{"type":"null"}]},"priorPeriod":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"},"income":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"expenses":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"netCashFlow":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"savingsRatePercent":{"type":["number","null"]}},"required":["start","end","income","expenses","netCashFlow","savingsRatePercent"],"additionalProperties":false}},"required":["baseCurrency","period","income","expenses","netCashFlow","transactionCount","savingsRatePercent","dailyRates","projection","priorPeriod"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_list_recurring":{"post":{"operationId":"betteroff_list_recurring","summary":"List recurring","description":"Use this when the user asks about recurring bills, subscriptions, or income. Get Plaid-reported recurring streams (active, early, inactive). Not a payment history (use search_transactions) or proof of insurance coverage.","tags":["tools"],"security":[{"agentOAuth":["cashflow:read"]},{"apiToken":["cashflow:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"asOf":{"type":["string","null"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"counts":{"type":"object","properties":{"active":{"type":"integer","minimum":0,"maximum":9007199254740991},"activeCharges":{"type":"integer","minimum":0,"maximum":9007199254740991},"activeIncoming":{"type":"integer","minimum":0,"maximum":9007199254740991},"inactive":{"type":"integer","minimum":0,"maximum":9007199254740991},"inactiveCharges":{"type":"integer","minimum":0,"maximum":9007199254740991},"inactiveIncoming":{"type":"integer","minimum":0,"maximum":9007199254740991},"unknownStatus":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["active","activeCharges","activeIncoming","inactive","inactiveCharges","inactiveIncoming","unknownStatus"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"streamId":{"type":"string"},"direction":{"type":"string"},"merchant":{"type":["string","null"]},"amount":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"averageAmount":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"currency":{"type":["string","null"]},"frequency":{"type":["string","null"]},"lastDate":{"type":["string","null"]},"nextDate":{"type":["string","null"]},"plaidCategory":{"type":["string","null"]},"status":{"type":["string","null"]},"isActive":{"type":["boolean","null"]},"stale":{"type":"boolean"},"source":{"type":"string","const":"plaid"}},"required":["streamId","direction","merchant","amount","averageAmount","currency","frequency","lastDate","nextDate","plaidCategory","status","isActive","stale","source"],"additionalProperties":{}}}},"required":["asOf","count","counts","items"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_portfolio":{"post":{"operationId":"betteroff_get_portfolio","summary":"Get portfolio","description":"Use this when the user asks about investment holdings, allocation, or concentration. Read portfolio positions, allocation, and concentration for the full filtered portfolio. includePositions false returns the allocation summary; true pages positions by cursor.","tags":["tools"],"security":[{"agentOAuth":["investments:read"]},{"apiToken":["investments:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"symbol":{"description":"Filter by ticker symbol (e.g. AAPL, BTC, ETH). Use null for all symbols.","type":["string","null"]},"instrumentId":{"description":"Filter by canonical instrument ID. Preferred over symbol when available. Use null for all.","type":["string","null"]},"type":{"description":"Filter by holding type (equity, etf, mutual_fund, crypto). Use null for all types.","type":["string","null"]},"groupBy":{"type":"string","enum":["type","account","symbol","instrument","underlying"],"description":"Group by type, account, symbol, separate instrument, or underlying ISIN exposure across brokerage holdings and Stock Tokens."},"includePositions":{"type":"boolean"},"cursor":{"anyOf":[{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"maximum":9007199254740991},"revision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["offset","revision"]},{"type":"null"}]},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":50},{"type":"null"}]}},"required":["symbol","instrumentId","type","groupBy","includePositions","limit"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"baseCurrency":{"type":"string"},"holdingCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"positions":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":["string","null"]},"chain":{"type":["string","null"]},"stockToken":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},{"type":"null"}]},"valuationKnown":{"type":"boolean"},"priceKnown":{"type":"boolean"},"instrumentId":{"type":["string","null"]},"symbol":{"type":["string","null"]},"name":{"type":["string","null"]},"type":{"type":["string","null"]},"quantity":{"type":"number"},"price":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"value":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"currency":{"type":["string","null"]},"basisSource":{"type":["string","null"]},"returnPct":{"type":["number","null"]},"isManual":{"type":"boolean"},"account":{"type":["string","null"]}},"required":["accountId","chain","stockToken","valuationKnown","priceKnown","instrumentId","symbol","name","type","quantity","price","value","currency","basisSource","returnPct","isManual","account"],"additionalProperties":{}}},"coverage":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}},"analysis":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}},"conversionIncomplete":{"type":"boolean"},"page":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema3"}}},"required":["baseCurrency","holdingCount","positions","coverage","analysis","conversionIncomplete","page"],"additionalProperties":{}},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema4"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]},"__schema3":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema3"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema3"}}]},"__schema4":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema4"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema4"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_defi_positions":{"post":{"operationId":"betteroff_get_defi_positions","summary":"Get defi positions","description":"Use this when the user asks about DeFi, lending, staking, or LP positions, or protocol exposure. DeFi exposure by protocol across chains: total value, position count, per-asset breakdown.","tags":["tools"],"security":[{"agentOAuth":["investments:read"]},{"apiToken":["investments:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"protocol":{"description":"Filter to a specific protocol name (case-insensitive substring match, e.g. 'aave', 'uniswap'). Use null for all protocols.","type":["string","null"]},"chain":{"description":"Filter to a specific chain slug (e.g. 'ethereum', 'base', 'arbitrum'). Use null for all chains.","type":["string","null"]}},"required":["protocol","chain"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"dataSource":{"type":"string","enum":["canonical_wallet_positions","legacy_holdings_projection"]},"totalValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"grossAssetValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"grossLiabilityValueUsd":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"netValueUsd":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"positionCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"protocolCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"protocols":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"protocol":{"type":"string"},"chains":{"type":"array","items":{"type":"string"}},"positionCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"grossAssetValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"grossLiabilityValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"netValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"positions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string"},"chain":{"type":"string"},"grossAssetValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"grossLiabilityValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"netValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"inRange":{"type":["boolean","null"]},"maturesAt":{"type":["string","null"]},"marketFixedApy":{"type":["number","null"]},"protocolContext":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},{"type":"null"}]},"legs":{"type":"array","items":{"type":"object","properties":{"assetId":{"type":["string","null"]},"contractAddress":{"type":["string","null"]},"role":{"type":"string"},"economicSide":{"type":"string","enum":["asset","liability"]},"contributesToNetWorth":{"type":"boolean"},"symbol":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"string"},"priceUsd":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"valueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"verified":{"type":["boolean","null"]},"valuationKnown":{"type":["boolean","null"]},"observedValueUsd":{"type":["string","null"]}},"required":["assetId","contractAddress","role","economicSide","contributesToNetWorth","symbol","name","quantity","priceUsd","valueUsd","verified","valuationKnown","observedValueUsd"],"additionalProperties":{}}},"risk":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"provenance":{"type":"object","properties":{"provider":{"type":"string"},"providerPositionId":{"type":"string"},"observedAt":{"type":"string"},"observedAtBlock":{"type":["string","null"]},"completeness":{"type":"string"},"freshness":{"type":"string"},"evidenceRef":{"type":["string","null"]}},"required":["provider","providerPositionId","observedAt","observedAtBlock","completeness","freshness","evidenceRef"],"additionalProperties":{}}},"required":["id","name","kind","chain","grossAssetValueUsd","grossLiabilityValueUsd","netValueUsd","inRange","maturesAt","marketFixedApy","protocolContext","legs","risk","provenance"],"additionalProperties":{}}}},"required":["protocol","chains","positionCount","grossAssetValueUsd","grossLiabilityValueUsd","netValueUsd","positions"],"additionalProperties":{}},{"type":"object","properties":{"protocol":{"type":"string"},"chains":{"type":"array","items":{"type":"string"}},"positionCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalValueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"byPositionType":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"valueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."}},"required":["type","count","valueUsd"],"additionalProperties":{}}},"topAssets":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"quantity":{"type":"number"},"valueUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."}},"required":["symbol","quantity","valueUsd"],"additionalProperties":{}}}},"required":["protocol","chains","positionCount","totalValueUsd","byPositionType","topAssets"],"additionalProperties":{}}]}},"coverage":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}},"filters":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}},"required":["dataSource","totalValueUsd","grossAssetValueUsd","grossLiabilityValueUsd","netValueUsd","positionCount","protocolCount","protocols","coverage","filters"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema3"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]},"__schema3":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema3"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema3"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_vault_yields":{"post":{"operationId":"betteroff_get_vault_yields","summary":"Get vault yields","description":"Use this when the user asks for current APYs of the vaults Investing lists. List reported APYs for the yield vaults the user can deposit into from BetterOff Investing (Upshift, and Morpho or Ethena when switched on), with each protocol's source and date. Filter by venue or asset symbol. Returns at most 50 vaults in name order.","tags":["tools"],"security":[{"agentOAuth":["investments:read"]},{"apiToken":["investments:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"venue":{"type":"string","enum":["upshift","morpho","ethena"]},"asset":{"description":"Asset symbol such as USDC.","type":"string","maxLength":20}},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"venues":{"type":"array","items":{"type":"string","enum":["upshift","morpho","ethena"]}},"vaults":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string","enum":["upshift","morpho","ethena"]},"name":{"type":"string"},"address":{"type":"string"},"chainId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"asset":{"type":["string","null"]},"apyPercent":{"type":["number","null"]},"apyBasis":{"type":"string"},"totalAssetsUsd":{"type":["number","null"]},"source":{"type":"string","format":"uri"},"asOf":{"type":"string"}},"required":["venue","name","address","chainId","asset","apyPercent","apyBasis","totalAssetsUsd","source","asOf"],"additionalProperties":false}},"omitted":{"type":"integer","minimum":0,"maximum":9007199254740991},"unavailable":{"type":"array","items":{"type":"string","enum":["upshift","morpho","ethena"]}},"stale":{"type":"array","items":{"type":"string","enum":["upshift","morpho","ethena"]}},"note":{"type":"string"}},"required":["venues","vaults","omitted","unavailable","stale","note"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_list_debts":{"post":{"operationId":"betteroff_list_debts","summary":"List debts","description":"Use this when the user asks what they owe or which debt terms are missing. Get the user's debts (cards and loans): names with last digits, balances with balanceAsOf, APRs, minimum payments, and totals. Use for debt, interest rate, or payoff-priority questions.","tags":["tools"],"security":[{"agentOAuth":["debts:read"]},{"apiToken":["debts:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"asOf":{"type":["string","null"]},"baseCurrency":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalDebt":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"knownDebtSubtotal":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalMinPayment":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"avgApr":{"type":["number","null"]},"aprKnownCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalYtdInterest":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"ytdInterestKnownCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"debts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"displayName":{"type":"string"},"mask":{"type":["string","null"]},"balance":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]},"balanceAsOf":{"type":["string","null"]},"balanceAsOfSource":{"anyOf":[{"type":"string","enum":["institution","fetched","last_sync"]},{"type":"null"}]},"apr":{"type":["number","null"]},"minimumPayment":{"anyOf":[{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},{"type":"null"}]}},"required":["id","name","displayName","mask","balance","balanceAsOf","balanceAsOfSource","apr","minimumPayment"],"additionalProperties":{}}},"valuation":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"unknownBalanceCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["asOf","baseCurrency","count","totalDebt","knownDebtSubtotal","totalMinPayment","avgApr","aprKnownCount","totalYtdInterest","ytdInterestKnownCount","debts","valuation","unknownBalanceCount"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_simulate_debt_payoff":{"post":{"operationId":"betteroff_simulate_debt_payoff","summary":"Simulate debt payoff","description":"Use this when the user asks to compare debt payoff strategies. Simulate paying off debts by avalanche (highest APR first) or snowball (smallest balance first), with an optional extra monthly payment. Refuses with missingInputs when a balance, APR, minimum payment, or FX rate is missing; betteroff_propose_debt_details saves terms the user states. Read-only; never moves money.","tags":["tools"],"security":[{"agentOAuth":["debts:read"]},{"apiToken":["debts:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"strategy":{"type":"string","enum":["avalanche","snowball"],"description":"avalanche = highest APR first (minimizes interest); snowball = smallest balance first (faster early wins)."},"extraMonthly":{"type":"number","minimum":0,"maximum":1000000,"description":"Extra amount paid toward debts each month beyond the minimums, in the user's base currency. Use 0 for none."}},"required":["strategy","extraMonthly"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"baseCurrency":{"type":"string"},"feasible":{"type":"boolean"},"totalMonths":{"type":["number","null"]},"totalInterest":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"order":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"payoffMonth":{"type":"number"}},"required":["id","name","payoffMonth"],"additionalProperties":false}}},"required":["baseCurrency","feasible","totalMonths","totalInterest","order"],"additionalProperties":{}},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_checklist":{"post":{"operationId":"betteroff_get_checklist","summary":"Get checklist","description":"Use this when the user asks what to do next, how prepared the household is, or about insurance, estate documents, an emergency fund, retirement accounts, or credit freezes. Get the household's readiness checklist: 0-100 score, 30-day change, and each item's status, evidence, and points. Edits happen in BetterOff.","tags":["tools"],"security":[{"agentOAuth":["checklist:read"]},{"apiToken":["checklist:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"changeOver30Days":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"profileAnswers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"householdAnswers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"},"deprecated":true},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"section":{"type":"string"},"status":{"type":"string","enum":["open","due_again","looks_done_confirm","done","not_applicable"]},"why":{"type":"string"},"evidence":{"type":["string","null"]},"lostEvidence":{"type":["string","null"]},"notApplicableReason":{"type":["string","null"]},"addsPoints":{"type":["number","null"]},"lastDone":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"assignedTo":{"type":["string","null"]},"link":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["id","label","section","status","why","evidence","lostEvidence","notApplicableReason","addsPoints","lastDone","assignedTo","link"],"additionalProperties":false}},"pageUrl":{"type":"string","format":"uri"}},"required":["score","changeOver30Days","profileAnswers","householdAnswers","items","pageUrl"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema2"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_search_activity":{"post":{"operationId":"betteroff_search_activity","summary":"Search activity","description":"Use this when the user asks about recorded account changes or correction proposals. Read permitted record changes. For an account's correction proposals (pending or approved), set accountId (via betteroff_list_accounts), actorType=all, action=null; needs corrections:prepare. Omits security events and raw fields.","tags":["tools"],"security":[{"agentOAuth":["activity:read"]},{"apiToken":["activity:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accountId":{"default":null,"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"actorType":{"type":"string","enum":["agent","user","system","all"]},"action":{"anyOf":[{"type":"string","enum":["categorize_transaction","update_transaction","classify_recurring","confirm_debt_details","apply_correction","undo_correction"]},{"type":"null"}]},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":50},{"type":"null"}]},"before":{"default":null,"anyOf":[{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["timestamp","id"]},{"type":"null"}]}},"required":["actorType","action","limit"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"accountId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"actorType":{"type":"string"},"action":{"type":"string"},"resourceType":{"type":["string","null"]},"resourceId":{"type":["string","null"]},"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"correction":{"type":"object","properties":{"kind":{"type":"string","enum":["category","recurring","debt"]},"status":{"type":"string","enum":["pending","expired","applied","undone"]},"appliedMode":{"anyOf":[{"type":"string","enum":["selected","matching"]},{"type":"null"}]},"reviewUrl":{"type":"string","format":"uri"}},"required":["reviewUrl"],"additionalProperties":false}},"required":["id","actorType","action","resourceType","resourceId","timestamp"],"additionalProperties":false}},"page":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"warning":{"type":"string"}},"required":["accountId","count","entries","page","warning"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_list_observations":{"post":{"operationId":"betteroff_list_observations","summary":"List observations","description":"Use this when the user asks about recorded financial findings and their status. Read recorded household financial findings and their status. Excludes insurance checklist findings. Does not refresh or dismiss findings.","tags":["tools"],"security":[{"agentOAuth":["accounts:read","networth:read","transactions:read","cashflow:read","investments:read","debts:read"]},{"apiToken":["accounts:read","networth:read","transactions:read","cashflow:read","investments:read","debts:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"anyOf":[{"type":"string","enum":["open","snoozed","dismissed","resolved"]},{"type":"null"}]},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":30},{"type":"null"}]},"before":{"anyOf":[{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["timestamp","id"]},{"type":"null"}]}},"required":["status","limit","before"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"source":{"type":"string"},"headline":{"type":"string"},"detail":{"type":"string"},"status":{"type":"string"},"lastSeenAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"evidence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"observedAt":{"type":"string"}},"required":["label","observedAt"],"additionalProperties":false}}},"required":["id","source","headline","detail","status","lastSeenAt","evidence"],"additionalProperties":false}},"page":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["items","page","warnings"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_propose_category_change":{"post":{"operationId":"betteroff_propose_category_change","summary":"Propose category change","description":"Use this when the user asks to correct the category of selected transactions. Prepare a durable category correction for selected transaction IDs. This saves a pending proposal and changes no financial records. The user must open the authenticated review link and explicitly choose selected payments or matching and future payments. Never report a proposal as applied.","tags":["tools"],"security":[{"agentOAuth":["transactions:read","corrections:prepare"]},{"apiToken":["transactions:read","corrections:prepare"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"transactionIds":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"category":{"type":"string","enum":["FOOD_AND_DRINK","RENT_AND_UTILITIES","ENTERTAINMENT","GENERAL_MERCHANDISE","GENERAL_SERVICES","PEER_PAYMENTS","TRANSPORTATION","TRAVEL","PERSONAL_CARE","MEDICAL","EDUCATION","INSURANCE","GIFTS_AND_DONATIONS","PETS","SUBSCRIPTIONS","REAL_ESTATE","INCOME","LOAN_PAYMENTS","TRANSFER_IN","TRANSFER_OUT","BANK_FEES","GOVERNMENT_AND_NON_PROFIT","HOME_IMPROVEMENT","OTHER"]}},"required":["transactionIds","category"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["category","recurring","debt"]},"status":{"type":"string"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"selectedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"matchingCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"canSaveRule":{"type":"boolean"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"preview":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","status","expiresAt","selectedCount","matchingCount","canSaveRule","input","preview","reviewUrl","note"],"additionalProperties":{}},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema2"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_propose_recurring_kind":{"post":{"operationId":"betteroff_propose_recurring_kind","summary":"Propose recurring kind","description":"Use this when the user says a recurring payment should be a bill or a subscription, for example that a Zelle payment is rent. Propose marking one of the user's recurring outgoing payments as a bill or a subscription. Get the streamId first with betteroff_list_recurring. This tool changes nothing: the user opens the review link and approves it in BetterOff. Never say the change is done.","tags":["tools"],"security":[{"agentOAuth":["cashflow:read","corrections:prepare"]},{"apiToken":["cashflow:read","corrections:prepare"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"streamId":{"type":"string","minLength":1,"maxLength":200,"description":"The streamId from betteroff_list_recurring."},"kind":{"type":"string","enum":["bill","subscription"],"description":"What the payment should be marked as."}},"required":["streamId","kind"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["category","recurring","debt"]},"status":{"type":"string"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"selectedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"matchingCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"canSaveRule":{"type":"boolean"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"preview":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","status","expiresAt","selectedCount","matchingCount","canSaveRule","input","preview","reviewUrl","note"],"additionalProperties":{}},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema2"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_propose_debt_details":{"post":{"operationId":"betteroff_propose_debt_details","summary":"Propose debt details","description":"Use this when the user provides a debt's APR, minimum payment, or next due date to save. Propose saving debt details the user states in chat: APR, minimum payment, or next due date, e.g. 'my Chase card APR is 24.99%'. Pass debtId from betteroff_list_debts, else the debt name. Use only numbers the user stated. This changes nothing until the user approves it at the review link; never say it is done.","tags":["tools"],"security":[{"agentOAuth":["debts:read","corrections:prepare"]},{"apiToken":["debts:read","corrections:prepare"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"debtId":{"description":"The debt's id from betteroff_list_debts. Preferred over debtName.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"debtName":{"description":"The debt's name as betteroff_list_debts returns it. Null when debtId is given.","anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"interestRate":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"APR as a percent, e.g. 24.99. Null to leave it unchanged."},"minimumPayment":{"anyOf":[{"type":"number","minimum":0,"maximum":1000000},{"type":"null"}],"description":"Minimum monthly payment. Null to leave it unchanged."},"nextPaymentDueDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"Next due date as YYYY-MM-DD. Null to leave it unchanged."}},"required":["interestRate","minimumPayment","nextPaymentDueDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["category","recurring","debt"]},"status":{"type":"string"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"selectedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"matchingCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"canSaveRule":{"type":"boolean"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"preview":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","status","expiresAt","selectedCount","matchingCount","canSaveRule","input","preview","reviewUrl","note"],"additionalProperties":{}},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema2"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema2"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema2"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_request_transfer":{"post":{"operationId":"betteroff_request_transfer","summary":"Request transfer","description":"Use this when the user asks to move USDC between two of their own tracked wallets on Solana. Request a USDC transfer on Solana between two wallets this household tracks. Saves a request for the user to review; never approves, signs, or sends. Return the review link and say it awaits the user's approval and wallet signature.","tags":["tools"],"security":[{"agentOAuth":["accounts:read","transfers:prepare"]},{"apiToken":["accounts:read","transfers:prepare"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chain":{"type":"string","enum":["solana","base"],"description":"Use solana. Base transfer requests are paused."},"fromWallet":{"type":"string","maxLength":64,"description":"Source wallet address tracked by this household."},"toWallet":{"type":"string","maxLength":64,"description":"Destination wallet address tracked by this household."},"amountUsdc":{"type":"string","pattern":"^\\d{1,9}(\\.\\d{1,6})?$","description":"USDC amount as a decimal string, at most 6 decimals."},"idempotencyKey":{"description":"Required for outside agents. Reuse the same key when retrying the same request; use a new key for a new one.","type":"string","pattern":"^[A-Za-z0-9_-]{8,100}$"}},"required":["chain","fromWallet","toWallet","amountUsdc"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["transfer","bank_transfer","vault_deposit"]},"surface":{"type":"string","enum":["app","mcp","imessage"]},"terms":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"termsDigest":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","surface","terms","termsDigest","status","createdAt","expiresAt","reviewUrl","note"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_request_bank_transfer":{"post":{"operationId":"betteroff_request_bank_transfer","summary":"Request bank transfer","description":"Use this when the user asks to move money between two of their own bank or brokerage accounts linked in Banking. Request a bank transfer through Natural between two of the user's own accounts linked in BetterOff Banking. Call without account IDs or amount to list the accounts and the per-transfer cap. Saves a request for the user to review; never approves or starts the transfer. Return the review link and say it awaits the user's passkey approval.","tags":["tools"],"security":[{"agentOAuth":["accounts:read","transfers:bank"]},{"apiToken":["accounts:read","transfers:bank"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sourceAccountId":{"description":"Natural account ID to pull from, from this tool's account list.","type":"string","maxLength":64},"destinationAccountId":{"description":"Natural account ID to send to, from this tool's account list.","type":"string","maxLength":64},"amountUsd":{"description":"US dollar amount as a decimal string, at most 2 decimals.","type":"string","pattern":"^\\d{1,7}(\\.\\d{1,2})?$"},"idempotencyKey":{"description":"Required for outside agents. Reuse the same key when retrying the same request; use a new key for a new one.","type":"string","pattern":"^[A-Za-z0-9_-]{8,100}$"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["transfer","bank_transfer","vault_deposit"]},"surface":{"type":"string","enum":["app","mcp","imessage"]},"terms":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"termsDigest":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","surface","terms","termsDigest","status","createdAt","expiresAt","reviewUrl","note"],"additionalProperties":false},{"type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"capUsd":{"type":"string"},"note":{"type":"string"}},"required":["accounts","capUsd","note"],"additionalProperties":false}]},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_request_vault_deposit":{"post":{"operationId":"betteroff_request_vault_deposit","summary":"Request vault deposit","description":"Use this when the user asks to deposit USDC or USDT from one of their own wallets into a vault they chose from Investing. Request a dollar-stablecoin deposit from one of the household's tracked EVM wallets into an Upshift or Morpho vault listed by betteroff_get_vault_yields. Saves a request for the user to review; never approves, signs, or deposits. Only prepare a deposit the user asked for, into a vault the user named; never pick a vault for them. Return the review link and say it awaits the user's approval and wallet signature.","tags":["tools"],"security":[{"agentOAuth":["investments:read","transfers:vault"]},{"apiToken":["investments:read","transfers:vault"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"vault":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Vault address from betteroff_get_vault_yields."},"chainId":{"description":"The vault's chainId from betteroff_get_vault_yields; needed when an address is listed on two chains.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fromWallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Household wallet that holds the vault's deposit asset."},"amountUsd":{"type":"string","pattern":"^\\d{1,9}(\\.\\d{1,6})?$","description":"Dollar amount as a decimal string, at most 6 decimals."},"idempotencyKey":{"description":"Required for outside agents. Reuse the same key when retrying the same request; use a new key for a new one.","type":"string","pattern":"^[A-Za-z0-9_-]{8,100}$"}},"required":["vault","fromWallet","amountUsd"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["transfer","bank_transfer","vault_deposit"]},"surface":{"type":"string","enum":["app","mcp","imessage"]},"terms":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"termsDigest":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","surface","terms","termsDigest","status","createdAt","expiresAt","reviewUrl","note"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_action_request":{"post":{"operationId":"betteroff_get_action_request","summary":"Get action request","description":"Use this when the user asks whether a requested transfer was approved, sent, or confirmed. Read a USDC transfer, bank transfer, or vault deposit request's status from BetterOff's records.","tags":["tools"],"security":[{"agentOAuth":["transfers:read"]},{"apiToken":["transfers:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["transfer","bank_transfer","vault_deposit"]},"surface":{"type":"string","enum":["app","mcp","imessage"]},"terms":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"termsDigest":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","surface","terms","termsDigest","status","createdAt","expiresAt","reviewUrl","note"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_cancel_action_request":{"post":{"operationId":"betteroff_cancel_action_request","summary":"Cancel action request","description":"Use this when the user asks to cancel a transfer request before signing it. Cancel a USDC transfer, bank transfer, or vault deposit request before the user signs or approves it.","tags":["tools"],"security":[{"agentOAuth":["transfers:prepare"]},{"apiToken":["transfers:prepare"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["transfer","bank_transfer","vault_deposit"]},"surface":{"type":"string","enum":["app","mcp","imessage"]},"terms":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}},"termsDigest":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"reviewUrl":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["id","kind","surface","terms","termsDigest","status","createdAt","expiresAt","reviewUrl","note"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema1"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema1"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_submit_feedback":{"post":{"operationId":"betteroff_submit_feedback","summary":"Submit feedback","description":"Send a diagnostic report to BetterOff support only when the user requests or approves sending it. Creates a support case, not a financial correction. Never send conversation history, balances, transactions, tool payloads, or credentials. Reuse the idempotency key when retrying. Returns a receipt, not a promise of resolution.","tags":["tools"],"security":[{"agentOAuth":["feedback:submit"]},{"apiToken":["feedback:submit"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false,"idempotentHint":true},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"category":{"type":"string","enum":["bug","confusing_result","missing_capability","suggestion"]},"description":{"type":"string","minLength":1,"maxLength":1000,"description":"User-approved diagnostic summary. Exclude financial data, credentials, conversation history, and tool payloads."},"toolName":{"type":"string","pattern":"^betteroff_[a-z_]{1,80}$"},"requestId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,128}$"},"client":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9 ._+-]+$"},"clientVersion":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[A-Za-z0-9 ._+-]+$"},"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Generate once per report; reuse for every retry."},"userApproved":{"type":"boolean","const":true,"description":"True only after the user requests or approves sending this report."}},"required":["category","description","idempotencyKey","userApproved"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"code":{"type":"string","enum":["INVALID_INPUT","RATE_LIMITED","ACCESS_DENIED"]},"error":{"type":"string"},"retryable":{"type":"boolean","const":false},"nextStep":{"type":"string"}},"required":["ok","code","error","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"receiptId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","const":"submitted"},"duplicate":{"type":"boolean"}},"required":["ok","schemaVersion","receiptId","status","duplicate"],"additionalProperties":false}]}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/v1/tools/betteroff_get_household_overview":{"post":{"operationId":"betteroff_get_household_overview","summary":"Get overview","description":"Retired name for betteroff_get_overview; removed on 2027-04-13. Responses carry Deprecation and Sunset headers.","tags":["tools"],"security":[{"agentOAuth":["accounts:read","networth:read"]},{"apiToken":["accounts:read","networth:read"]}],"x-stability":"beta","x-mcp-annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"requestId":{"type":"string"},"error":{"type":"string"},"code":{"type":"string"},"retryable":{"type":"boolean"},"nextStep":{"type":"string"},"field":{"type":"string"},"missingInputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"balanceMissing":{"type":"boolean"},"interestRateMissing":{"type":"boolean"},"minimumPaymentMissing":{"type":"boolean"}},"required":["id","name","balanceMissing","interestRateMissing","minimumPaymentMissing"],"additionalProperties":false}}},"required":["ok","error","code","retryable","nextStep"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"requestId":{"type":"string"},"schemaVersion":{"type":"string","const":"4"},"data":{"type":"object","properties":{"identity":{"type":"object","properties":{"login":{"type":["string","null"]},"name":{"type":["string","null"]},"household":{"deprecated":true,"type":["string","null"]}},"required":["login","name","household"],"additionalProperties":false},"valuation":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"date":{"type":"string"},"netWorth":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalAssets":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"totalLiabilities":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Decimal text, e.g. \"-12.50\". Read the currency beside it or on the result."},"baseCurrency":{"type":"string"},"methodologyVersion":{"type":"string"},"reconciliationStatus":{"type":"string","enum":["reconciled","incomplete","discrepancy"]},"accountCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","date","netWorth","totalAssets","totalLiabilities","baseCurrency","methodologyVersion","reconciliationStatus","accountCount"],"additionalProperties":false},{"type":"null"}]},"coverage":{"type":"object","properties":{"accountCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"unknownBalanceCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"unknownFreshnessCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["accountCount","unknownBalanceCount","unknownFreshnessCount"],"additionalProperties":false},"ledger":{"anyOf":[{"type":"object","properties":{"engineVersion":{"type":"string"},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"reviewItemCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"reviewCauses":{"type":"array","items":{"type":"string"}},"transactionsWithoutEvidence":{"type":"integer","minimum":0,"maximum":9007199254740991},"reconciliationBreakCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"latestRunFailed":{"type":"boolean"}},"required":["engineVersion","publishedAt","reviewItemCount","reviewCauses","transactionsWithoutEvidence","reconciliationBreakCount","latestRunFailed"],"additionalProperties":false},{"type":"null"}]}},"required":["identity","valuation","coverage","ledger"],"additionalProperties":false},"currency":{"type":["string","null"]},"timezone":{"type":"string"},"asOf":{"type":["string","null"]},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"householdRevision":{"type":"integer","minimum":0,"maximum":9007199254740991,"deprecated":true},"quality":{"type":"object","properties":{"state":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["state","reasons"],"additionalProperties":false},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"observedAt":{"type":["string","null"]}},"required":["source","observedAt"],"additionalProperties":false}},"page":{"type":"object","properties":{"returnedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"truncated":{"type":"boolean"},"nextCursor":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]}},"required":["returnedCount","totalCount","truncated","nextCursor"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["ok","schemaVersion","data","currency","timezone","asOf","revision","householdRevision","quality","evidence","page","warnings"],"additionalProperties":false}],"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}}}},"headers":{"RateLimit-Limit":{"description":"Sent to API tokens and agent grants: requests per minute in the tighter bucket.","schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}},"400":{"description":"INVALID_INPUT (a missing, unknown, or invalid argument, named in `fields`), TOOL_CALL_REJECTED, or a body that is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"AGENT_TOKEN_INVALID: the token is missing, expired, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"402":{"description":"AGENT_SUBSCRIPTION_INACTIVE or FEATURE_NOT_INCLUDED: needs BetterOff Core.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"INSUFFICIENT_SCOPE, ACCESS_DENIED, or AGENT_GRANT_REVOKED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"TOOL_NOT_FOUND, or NOT_FOUND for a record the org does not have.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"CONFLICT: the record's state rules this call out. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"INCOMPLETE_DATA or RESULT_TOO_LARGE. Narrow the request; don't retry as is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"RATE_LIMITED. Retry after Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"503":{"description":"DATA_UNAVAILABLE, DEPENDENCY_UNAVAILABLE (including the 25-second tool deadline), or AGENT_AUTHZ_UNAVAILABLE. Retryable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFailure"}},"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}}},"default":{"description":"Problem details","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"deprecated":true}}}}