Bakkt Accounts API
Accounts are used to represent users that use the platform's services.
Accounts are used to represent users that use the platform's services.
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/bakkt-accounts-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: Bakkt Crypto Solutions Accounts API
version: '2.0'
description: The Bakkt Crypto Solutions API is a REST-based API that provides a platform for clients, so their investors can purchase, hold, sell, and transfer digital assets. Clients must have authorization to use the APIs, secure endpoints, and facilities to ensure safe, fast execution and tracking of orders. Users must specify all date and time units using epoch time in UTC. The URL path includes a version number to indicate major versions which retain backward compatibility to other URLs with the same version prefix. This document is reconstructed by the API Evangelist enrichment pipeline from the per-endpoint OpenAPI fragments Bakkt publishes on its ReadMe developer hub (bakkt.readme.io); it merges the Crypto Solutions (/apex-crypto/api/v2) and Fiat/Partner (/partner/v1) endpoint families.
termsOfService: https://bakkt.com/user-agreement
contact:
name: Bakkt User Account Agreement
url: https://bakkt.com/user-agreement
servers:
- url: https://api.bakkt.com
description: Bakkt API gateway (dedicated per-client, IP-whitelisted; base paths /apex-crypto/api/v2 and /partner/v1)
tags:
- description: Accounts are used to represent users that use the platform's services.
name: Accounts
paths:
/apex-crypto/api/v2/accounts:
post:
description: Use this endpoint to create new investor accounts. The client must provide an account ID that uniquely identifies the investor from other investors on the client's platform.
operationId: createAccount
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountRequest'
description: The account request must provide the required, basic jurisdiction and biographical information about the investor to enable the investor to participate in crypto asset transactions. Bakkt validates the provided information.
required: true
responses:
'200':
description: This response returns the newly created account for this investor.
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
'422':
description: This response returns a validation failure with additional details about specific sections of the request that failed validation in both machine-readable and developer-friendly messages tied to fields by name.
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationErrors'
default:
description: This response returns if the system encounters an unexpected error while handling this request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- api_key: []
summary: Create a New User Account
tags:
- Accounts
/apex-crypto/api/v2/accounts/{clientAccountId}:
get:
description: This endpoint retrieves an investor account provided the client's unique account ID.
operationId: getAccount
parameters:
- description: A unique account ID originally provided by the client system when the account was created
in: path
name: clientAccountId
required: true
schema:
type: string
responses:
'200':
description: This response returns the latest account information.
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
default:
description: This response returns if the system encounters an unexpected error while handling this request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- api_key: []
summary: Retrieves Accounts by Account ID
tags:
- Accounts
/apex-crypto/api/v2/accounts/{clientAccountId}/status:
get:
description: This endpoint retrieves an investor account trading status provided the client's unique account ID.
operationId: getAccountStatus
parameters:
- description: A unique account ID originally provided by the client system when the account was created
in: path
name: clientAccountId
required: true
schema:
type: string
responses:
'200':
description: This response returns the latest account status.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountOpeningStatus'
default:
description: This response returns if the system encounters an unexpected error while handling this request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- api_key: []
summary: Retrieves account status by Account ID
tags:
- Accounts
/apex-crypto/api/v2/accounts/kycTransferRecovery/{clientAccountId}:
post:
description: Use this endpoing to recover KYC's that are transferred
operationId: kycTransferRecovery
parameters:
- description: A unique account ID originally provided by the client system when the account was created
in: path
name: clientAccountId
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KycTransferRecoveryRequest'
description: The account transfer recovery request must provide the shared token
required: true
responses:
'200':
description: If transfer recovery request triggered successfully, this call returns the text "success."
content:
application/json:
schema:
type: string
'422':
description: This response returns a validation failure with additional details about the failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationErrors'
default:
description: This response returns if the system encounters an unexpected error while handling this request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- api_key: []
summary: KYC transfer recovery request
tags:
- Accounts
/apex-crypto/api/v2/accounts/triggerKYBScreening/{clientAccountId}:
post:
description: Use this endpoint to trigger a KYB screening on input account.
operationId: triggerKYBScreening
parameters:
- description: A unique account ID originally provided by the client system when the account was created
in: path
name: clientAccountId
required: true
schema:
type: string
responses:
'200':
description: If KYB has been triggered successfully, this call returns the text "success."
content:
application/json:
schema:
type: string
default:
description: This response returns if the system encounters an unexpected error while handling this request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- api_key: []
summary: Trigger KYB Screening on Account
tags:
- Accounts
/apex-crypto/api/v2/accounts/settlementMethod/update:
post:
description: Use this endpoint to update settlement method on input account.
operationId: updateAccountSettlement
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountSettlementRequest'
description: The account settlement request must provide unique account ID and desired settlement method it needs to be updated to
required: true
responses:
'200':
description: Response should return status of update and input request.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountSettlementResponse'
'422':
description: This response returns a validation failure with additional details about the failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationErrors'
default:
description: This response returns if the system encounters an unexpected error while handling this request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- api_key: []
summary: Update Settlement Method on Account
tags:
- Accounts
components:
schemas:
KycTransferRecoveryRequest:
properties:
shareToken:
description: The shared token
type: string
x-order: 0
required:
- shareToken
type: object
AccountOpeningStatus:
properties:
canTradeCrypto:
type: boolean
x-order: 0
cipClearanceState:
$ref: '#/components/schemas/CIPClearanceState'
settlementMethod:
$ref: '#/components/schemas/SettlementMethod'
required:
- canTradeCrypto
- cipClearanceState
- settlementMethod
type: object
ValidationErrors:
properties:
code:
description: This code represents an HTTP style error code. Error codes in the 4xx range indicates errors made in the way the client made the request. Error codes in the 5xx range indicates errors that the Apex Crypto system encountered in handling the request.
format: int32
type: integer
message:
description: This error message provides a summary of the count of the validations that failed. Details about a field-level falure are provided in the validationErrors field.
type: string
validationErrors:
description: The individual validation errors encountered in processing the client request. Each error should contain detail about a specific field-level validation that failed, the rejected value, and a message indicating the nature of the failure to aid in presentation to end users. The system makes a best effort to batch as many validation failures together as possible to avoid piece-meal, one-time validations.
items:
$ref: '#/components/schemas/ValidationError'
type: array
required:
- code
- message
type: object
Error:
properties:
code:
description: This code represents an HTTP style error code. Error codes in the 4xx range indicate errors made in the way the client made the request. Error codes in the 5xx range indicate errors that the Apex Crypto system encountered in handling the request.
format: int32
type: integer
message:
description: This error message provides additional insight into the nature of the error encountered.
type: string
required:
- code
- message
type: object
Entity:
description: Entity details
properties:
activeWalletAddress:
description: Active crypto wallet address of the Entity
example: e1847689-3047-477d-a46f-79ad0ce8dc14
format: uuid
type: string
x-order: 0
dailyNotionalTradingVolumeUsdRange:
description: The Entity's expected daily trading volume
enum:
- UNDER_250K
- FROM_250K_TO_500K
- FROM_500K_TO_1M
- FROM_1M_TO_2M
- FROM_2M_TO_5M
- FROM_5M_TO_10M
- FROM_10M_TO_20M
- FROM_20M_TO_50M
- OVER_50M
example: FROM_1M_TO_2M
type: string
x-order: 1
dailyTransactionVolumeUsdRange:
description: The Entity's expected daily transaction volume
enum:
- UNDER_250K
- FROM_250K_TO_500K
- FROM_500K_TO_1M
- FROM_1M_TO_2M
- FROM_2M_TO_5M
- FROM_5M_TO_10M
- FROM_10M_TO_20M
- FROM_20M_TO_50M
- OVER_50M
example: FROM_1M_TO_2M
type: string
x-order: 2
entityEmailAddress:
description: The email of the Entity
example: johnw@hightable.com
format: email
type: string
x-order: 3
entityFormationDate:
description: The date of the Entity formation
example: '2001-01-01'
format: date
type: string
x-order: 4
entityLegalName:
description: The legal name of the Entity
example: Cruickshank, Franecki and Swift
maxLength: 100
minLength: 1
type: string
x-order: 5
entityOfferings:
description: Products and services offered
type: string
x-order: 6
entityPhoneNumber:
description: Phone number in e.164 format
example: '+1234567890'
pattern: ^\+[1-9][0-9]{3,14}$
type: string
x-order: 7
entityRegistrationStatus:
description: Entity's registration status with a regulatory body
enum:
- CURRENTLY_REGISTERED
- NOT_REGISTERED
- REGISTRATION_IN_PROGRESS
- NOT_APPLICABLE
example: NOT_APPLICABLE
type: string
x-order: 8
entityTaxId:
description: The tax identifier for the Entity
example: 098123456
type: string
x-order: 9
entityType:
description: Entity type
enum:
- CORPORATE
- PARTNERSHIP
- LLC
- LIMITED_PARTNERSHIP
- TRUST
example: CORPORATE
type: string
x-order: 10
firmAnnualNetIncome:
description: The annual net income of the Entity
enum:
- UNDER_250K
- FROM_250K_TO_500K
- FROM_500K_TO_1M
- FROM_1M_TO_2M
- FROM_2M_TO_5M
- FROM_5M_TO_10M
- FROM_10M_TO_20M
- FROM_20M_TO_50M
- OVER_50M
example: FROM_1M_TO_2M
type: string
x-order: 11
firmLiquidNetWorthUsdRange:
description: The liquid net worth of the Entity
enum:
- UNDER_250K
- FROM_250K_TO_500K
- FROM_500K_TO_1M
- FROM_1M_TO_2M
- FROM_2M_TO_5M
- FROM_5M_TO_10M
- FROM_10M_TO_20M
- FROM_20M_TO_50M
- OVER_50M
example: FROM_1M_TO_2M
type: string
x-order: 12
firmTotalNetWorthUsdRange:
description: The total net worth of the Entity
enum:
- UNDER_250K
- FROM_250K_TO_500K
- FROM_500K_TO_1M
- FROM_1M_TO_2M
- FROM_2M_TO_5M
- FROM_5M_TO_10M
- FROM_10M_TO_20M
- FROM_20M_TO_50M
- OVER_50M
example: FROM_1M_TO_2M
type: string
x-order: 13
investmentExperience:
description: Entity's level of investment experience prior to account creation
enum:
- NONE
- LIMITED
- GOOD
- EXTENSIVE
type: string
x-order: 14
investmentObjective:
description: Entity's primary objective for investment account
enum:
- BALANCED
- CAPITAL_PRESERVATION
- GROWTH
- INCOME
- SPECULATION
- OTHER
type: string
x-order: 15
operatingAddress:
$ref: '#/components/schemas/Address'
operatingCountries:
description: 3 letter country code as per ISO 3166 Alpha-3
example:
- USA
items:
description: 3 letter country code as per ISO 3166 Alpha-3
enum:
- AND
- ARE
- AFG
- ATG
- AIA
- ALB
- ARM
- AGO
- ATA
- ARG
- ASM
- AUT
- AUS
- ABW
- ALA
- AZE
- BIH
- BRB
- BGD
- BEL
- BFA
- BGR
- BHR
- BDI
- BEN
- BLM
- BMU
- BRN
- BOL
- BES
- BRA
- BHS
- BTN
- BVT
- BWA
- BLR
- BLZ
- CAN
- CCK
- COD
- CAF
- COG
- CHE
- CIV
- COK
- CHL
- CMR
- CHN
- COL
- CRI
- CUB
- CPV
- CUW
- CXR
- CYP
- CZE
- DEU
- DJI
- DNK
- DMA
- DOM
- DZA
- ECU
- EST
- EGY
- ESH
- ERI
- ESP
- ETH
- FIN
- FJI
- FLK
- FSM
- FRO
- FRA
- GAB
- GBR
- GRD
- GEO
- GUF
- GGY
- GHA
- GIB
- GRL
- GMB
- GIN
- GLP
- GNQ
- GRC
- SGS
- GTM
- GUM
- GNB
- GUY
- HKG
- HMD
- HND
- HRV
- HTI
- HUN
- IDN
- IRL
- ISR
- IMN
- IND
- IOT
- IRQ
- IRN
- ISL
- ITA
- JEY
- JAM
- JOR
- JPN
- KEN
- KGZ
- KHM
- KIR
- COM
- KNA
- PRK
- KOR
- KWT
- CYM
- KAZ
- LAO
- LBN
- LCA
- LIE
- LKA
- LBR
- LSO
- LTU
- LUX
- LVA
- LBY
- MAR
- MCO
- MDA
- MNE
- MAF
- MDG
- MHL
- MKD
- MLI
- MMR
- MNG
- MAC
- MNP
- MTQ
- MRT
- MSR
- MLT
- MUS
- MDV
- MWI
- MEX
- MYS
- MOZ
- NAM
- NCL
- NER
- NFK
- NGA
- NIC
- NLD
- NOR
- NPL
- NRU
- NIU
- NZL
- OMN
- PAN
- PER
- PYF
- PNG
- PHL
- PAK
- POL
- SPM
- PCN
- PRI
- PSE
- PRT
- PLW
- PRY
- QAT
- REU
- ROU
- SRB
- RUS
- RWA
- SAU
- SLB
- SYC
- SDN
- SWE
- SGP
- SHN
- SVN
- SJM
- SVK
- SLE
- SMR
- SEN
- SOM
- SUR
- SSD
- STP
- SLV
- SXM
- SYR
- SWZ
- TCA
- TCD
- ATF
- TGO
- THA
- TJK
- TKL
- TLS
- TKM
- TUN
- TON
- TUR
- TTO
- TUV
- TWN
- TZA
- UKR
- UGA
- UMI
- USA
- URY
- UZB
- VAT
- VCT
- VEN
- VGB
- VIR
- VNM
- VUT
- WLF
- WSM
- YEM
- MYT
- ZAF
- ZMB
- ZWE
example: USA
type: string
type: array
x-order: 17
operatingIndustry:
description: The Nature of Business (industry) of the Entity
type: string
x-order: 18
registeredAddress:
$ref: '#/components/schemas/Address'
sourceOfCurrency:
description: Source of virtual currency
type: string
x-order: 20
sourceOfFunds:
description: Source of fiat funds
type: string
x-order: 21
subjectToAMLRegulations:
description: Whether the Entity is subject to AML regulations
example: true
type: boolean
x-order: 22
required:
- entityEmailAddress
- entityLegalName
- entityPhoneNumber
- entityTaxId
- entityType
- operatingAddress
- operatingIndustry
- registeredAddress
type: object
AccountSettlementResponse:
properties:
request:
$ref: '#/components/schemas/AccountSettlementRequest'
status:
description: status tied to account settlement update
enum:
- COMPLETE
- FAILED
type: string
x-order: 1
required:
- request
- status
type: object
Address:
properties:
city:
description: City of residence
type: string
x-order: 0
country:
description: Country of residence (ISO code)
type: string
x-order: 3
postalCode:
description: Postal code / zip code (required when country is USA)
type: string
x-order: 2
state:
description: State of residence (two-letter state abbreviation). If outside of the United States please provide the province/territory in this field (no character limitation).
type: string
x-order: 1
streetAddress:
description: Street address for primary residence (for employer, street address for place of employment)
items:
type: string
type: array
x-order: 4
required:
- city
- country
- streetAddress
type: object
InvestmentExperience:
description: Customer's level of investment experience prior to account creation
enum:
- NONE
- LIMITED
- GOOD
- EXTENSIVE
type: string
RiskTolerance:
description: Customer's accepted level of investment risk
enum:
- LOW
- MEDIUM
- HIGH
type: string
LiquidityNeeds:
description: Importance of liquidity for the customer
enum:
- VERY_IMPORTANT
- SOMEWHAT_IMPORTANT
- NOT_IMPORTANT
type: string
InvestmentObjective:
description: Customer's primary objective for investment account
enum:
- BALANCED
- CAPITAL_PRESERVATION
- GROWTH
- INCOME
- SPECULATION
- OTHER
type: string
InvestmentProfile:
properties:
accountGoals:
$ref: '#/components/schemas/AccountGoals'
customerProfile:
$ref: '#/components/schemas/CustomerProfile'
required:
- accountGoals
- customerProfile
type: object
AccountGoals:
properties:
investmentObjective:
$ref: '#/components/schemas/InvestmentObjective'
liquidityNeeds:
$ref: '#/components/schemas/LiquidityNeeds'
riskTolerance:
$ref: '#/components/schemas/RiskTolerance'
timeHorizon:
$ref: '#/components/schemas/TimeHorizon'
required:
- investmentObjective
type: object
USDRange:
enum:
- UNDER_25K
- FROM_25K_TO_50K
- FROM_50K_TO_100K
- FROM_100K_TO_200K
- FROM_200K_TO_300K
- FROM_300K_TO_500K
- FROM_500K_TO_1M
- FROM_1M_TO_5M
- OVER_5M
type: string
Enrollments:
description: DEPRECATED.
properties:
registrationIndividual:
$ref: '#/components/schemas/RegistrationIndividual'
required:
- registrationIndividual
type: object
TrustedContact:
properties:
emailAddress:
description: The trusted contact's email address
format: email
type: string
x-order: 4
familyName:
description: The trusted contact's family (typically last) name
type: string
x-order: 2
givenName:
description: The trusted contact's given (typically first) name
type: string
x-order: 0
mailingAddress:
$ref: '#/components/schemas/Address'
middleNames:
description: The trusted contact's middle name(s). Space or comma separated.
type: string
x-order: 1
phoneNumber:
description: The trusted contact's phone number
type: string
x-order: 3
required:
- givenName
- familyName
type: object
Owner:
properties:
agreements:
items:
$ref: '#/components/schemas/Agreement'
type: array
x-order: 8
clientOwnerId:
description: Client provided unique owner id (required when multiple owners are present or national id is specified)
type: string
x-order: 1
emailAddress:
description: Customer's contact email
format: email
type: string
x-order: 3
identity:
$ref: '#/components/schemas/Identity'
identityId:
description: DEPRECATED.
type: string
x-order: 5
mailingAddress:
$ref: '#/components/schemas/Address'
ownerId:
description: Bakkt owner identifier
format: uuid
type: string
x-order: 0
phoneNumber:
description: Customer's contact phone number (Should be in compacted E.164 format, eg UK (+44) 1234 123456 becomes +441234123456)
type: string
x-order: 2
role:
$ref: '#/components/schemas/PartyRelationType'
required:
- emailAddress
- mailingAddress
- role
- identity
- agreements
type: object
SettlementMethod:
description: Settlement Method tied to Account
enum:
- NET_SETTLEMENT
- NO_SETTLEMENT
- BAKKT_TPJ
- APEX_TPJ
type: string
PartyRelationType:
enum:
- AUTHORIZED_AGENT
- AUTHORIZED_MEMBER
- AUTHORIZED_OWNER
- BENEFICIAL_OWNER
- BENEFICIARY
- CUSTODIAN
- EDUCATION_BENEFICIARY
- EDUCATION_MANAGER
- EXECUTOR
- GUARDIAN_CONSERVATOR
- INTERNAL_POWER_OF_ATTY
- INITIAL_DEPOSITOR
- JOINT_OWNER
- MINOR_OWNER
- PRIMARY_OWNER
- POWER_OF_ATTY
- SOLE_PROPRIETOR
- TRADING_AUTHORITY
- TREASURER
- TRUSTEE
- TRUSTED_CONTACT
type: string
TimeHorizon:
description: Investment time horizon
enum:
- SHORT
- AVERAGE
- LONG
type: string
MaritalStatus:
description: Customer's marital status
enum:
- SINGLE
- MARRIED
- DIVORCED
- WIDOWED
type: string
AccountRequest:
properties:
accountType:
description: Customer account type
enum:
- INDIVIDUAL
- CUSTODIAL
- ENTITY_PERSONAL_TRUST
- ENTITY
type: string
x-order: 2
clientAccountId:
description: Client-specified unique identifier for the account (clientAccountId)
type: string
x-order: 1
enrollments:
$ref: '#/components/schemas/Enrollments'
entity:
$ref: '#/components/schemas/Entity'
id:
description: DEPRECATED. Please use clientAccountId
type: string
x-order: 0
investmentProfile:
$ref: '#/components/schemas/InvestmentProfile'
owners:
items:
$ref: '#/components/schemas/Owner'
minimum: 1
type: array
x-order: 5
settlementMethod:
description: Method of settlement for the customer account
enum:
- BAKKT_TPJ
- NET_SETTLEMENT
type: string
x-order: 8
shareToken:
description: The share token field will contain a Sumsub token. If the user is designated for this specific KYC flow, this token must be passed.
type: string
x-order: 9
trustedContacts:
items:
$ref: '#/components/schemas/TrustedContact'
type: array
x-order: 6
required:
- clientAccountId
- owners
type: object
RegistrationIndividual:
type: object
AccountSettlementRequest:
properties:
accountId:
description: client-specified unique identifier for the account
type: string
x-order: 0
settlementMethod:
description: Settlement Method tied to Account
enum:
- NET_SETTLEMENT
- BAKKT_TPJ
type: string
x-order: 1
required:
- accountId
- settlementMethod
type: object
ValidationError:
properties:
code:
description: This is an open API-styled validation error code. These fields are provided so that client systems can present customized, localized messages in response to validation error types such as a required field.
format: int32
type: integer
field:
description: This is a field that failed validation in the input object as identified by an Open API Path.
type: string
message:
description: This is an open API-styled message that summarizes the validation failed. This may include Open API Dot notation, so it should be formatted before being presented to an end user. Clients should consider implementing their own custom messages driven off the code field.
type: string
rejectedValue:
type: string
required:
- code
- message
type: object
Agreement:
properties:
eSignedDate:
description: Date of electronic signature of the agreement
format: date-time
type: string
x-order: 3
name:
description: Name of the agreement document
type: string
x-order: 0
text:
description: Text containing the body of the agreement document
type: string
x-order: 2
version:
description: Agreement document version
type: string
x-order: 1
required:
- name
- version
type: object
Identity:
properties:
citizenshipCountry:
description: DEPRECATED
type: string
x-order: 7
dateOfBirth:
description: Customer's date of birth
format: date
type: string
x-order: 3
disclosures:
$ref: '#/components/schemas/Disclosures'
employment:
$ref: '#/components/schemas/Employment'
familyName:
description: Customer's family (typically last) name
type: string
x-order: 2
givenName:
description: Customer's given (typically first) name
type: string
x-order: 0
maritalStatus:
$ref: '#/components/schemas/MaritalStatus'
middleNames:
description: Customer's middle name(s). Space or comma separated.
type: string
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bakkt/refs/heads/main/openapi/bakkt-accounts-api-openapi.yml