betteroff-finance Connections API
The connections API from betteroff-finance — 12 operation(s) for connections.
The connections API from betteroff-finance — 12 operation(s) for connections.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/betteroff-finance:betteroff-finance-connections-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Betteroff Finance Connections API
version: 0.5.0+cd65185c
description: 'Operations tagged connections across 2 of this provider''s published API definitions: betteroff-finance-openapi.json, betteroff-finance-public.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.betteroff.finance
tags:
- name: Connections
paths:
/connections/result:
get:
operationId: getConnectionsResult
tags:
- Connections
security:
- session: []
responses:
'200':
description: Success
default:
description: Problem details
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
summary: Get connections result
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Patch connections id
x-summary-source: derived
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'
summary: Delete connections id
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Post connections exit reason
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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
status:
type: string
pattern: ^[a-z_]{1,64}$
error_type:
type: string
pattern: ^[A-Z_]{1,64}$
request_id:
type: string
pattern: ^[A-Za-z0-9]{1,64}$
additionalProperties: false
required:
- provider
- event
responses:
'204':
description: No content
default:
description: Problem details
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
summary: Post connections events
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Post connections id delete
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Post connections id refresh
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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:
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)$
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:
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)$
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
label:
type: string
maxLength: 80
required:
- address
- chain
required:
- source
- input
responses:
'200':
description: Success
default:
description: Problem details
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
summary: Post connections start
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Post connections finish
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Get connections sources
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Get connections plaid institutions
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Patch connections plaid opt ins
x-summary-source: derived
servers:
- url: https://api.betteroff.finance
/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'
summary: Get connections ccxt
x-summary-source: derived
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.
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.
x-refined-from:
- betteroff-finance-openapi.json
- betteroff-finance-public.json