CFX Labs Ledger Accounts API
MoveUSD-denominated accounts owned by an identity.
MoveUSD-denominated accounts owned by an identity.
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/cfx-labs:cfx-labs-ledger-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: Identity Ledger Accounts API
description: Registration, verification and management of CFX identities associated with financial transactions on the CFX network.
termsOfService: ''
contact:
name: API Owner
email: api@cfxlabs.com
license:
name: ''
url: ''
version: '@VERSION@'
summary: CFX Identity API
servers:
- url: https://api.dev.cfx.to
description: Customer Sandbox
- url: https://api.cfx.to
description: Production
security:
- ApiKeyAuth: []
ApiSecretAuth: []
tags:
- name: Ledger Accounts
description: MoveUSD-denominated accounts owned by an identity.
paths:
/v1/identity/{identityId}/ledger-accounts:
post:
summary: Create a ledger account of an identity
tags:
- Ledger Accounts
description: Ledger accounts can hold MoveUSD and be used in transactions.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Human-readable label for this account
referenceId:
type: string
description: Customer's reference ID for this account
visibility:
enum:
- PRIVATE
- PUBLIC
type: string
description: 'Visibility of the account across MoveUSD network. **WARNING: `PUBLIC` wallets are visible to all customers.**'
default: PRIVATE
parameters:
- schema:
type: string
example: id_xxxxxxxxxx
in: path
name: identityId
required: true
description: The unique identifier for the organization that owns the account
- schema:
type: string
in: header
name: Idempotency-Key
required: false
responses:
'202':
description: Default Response
content:
application/json:
schema:
type: object
required:
- id
- balance
- address
- visibility
- createdAt
- updatedAt
properties:
id:
type: string
description: Unique identifier for a ledger account, in `redwal_...` format
example: redwal_xxxxxxxx
referenceId:
type: string
description: Customer's reference ID for this account
balance:
type: string
description: The balance of the ledger account
name:
type: string
description: Human-readable label for this account
address:
type: string
description: Base-58 address to the underlying Solana account
visibility:
enum:
- PRIVATE
- PUBLIC
type: string
description: 'Visibility of the account across MoveUSD network. **WARNING: `PUBLIC` wallets are visible to all customers.**'
createdAt:
type: string
format: date-time
description: The timestamp of when this account was created
updatedAt:
type: string
format: date-time
description: The timestamp of when this account was last updated
'400':
description: Default Response
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INVALID_REQUEST
- INVALID_IDENTITY
description: '- `INVALID_REQUEST`: The service cannot understand the request
- `INVALID_IDENTITY`: The identity is not allowed to create a ledger account'
message:
type: string
errors:
type: array
items:
type: object
properties: {}
additionalProperties: true
'401':
description: The access to this resource has been denied
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- UNAUTHORIZED
message:
type: string
title: UNAUTHORIZED
description: The access to this resource has been denied
'403':
description: The credentials are valid but the caller is not permitted to transact
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- FORBIDDEN
message:
type: string
title: FORBIDDEN
description: The credentials are valid but the caller is not permitted to transact
'409':
description: A duplicate request with this idempotency key is already in progress
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- IDEMPOTENCY_IN_PROGRESS
message:
type: string
title: IDEMPOTENCY_IN_PROGRESS
description: A duplicate request with this idempotency key is already in progress
'422':
description: Another request with this idempotency key was made using a different body
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- IDEMPOTENCY_KEY_REUSED
message:
type: string
title: IDEMPOTENCY_KEY_REUSED
description: Another request with this idempotency key was made using a different body
default:
description: Catch-all error response for any unexpected internal errors
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INTERNAL
message:
type: string
enum:
- An unexpected internal error has occurred
title: INTERNAL
description: Catch-all error response for any unexpected internal errors
operationId: postV1IdentityByIdentityIdLedgerAccounts
x-operation-id-source: derived
get:
summary: Search for ledger accounts of an identity
tags:
- Ledger Accounts
parameters:
- schema:
type: string
in: query
name: addresses
required: false
description: Comma-separated list of base-58 addresses for the underlying Solana account
- schema:
type: string
format: date-time
in: query
name: createdBefore
required: false
- schema:
type: string
format: date-time
in: query
name: createdAfter
required: false
- schema:
type: string
in: query
name: orderBy
required: false
description: 'Comma-separated list of fields and directions to order the results by.
Format: `<field name>:<direction>,...`
* `<field name>`: `createdAt`
* `<direction>`: `ASC`, `DESC`'
- schema:
type: integer
default: 1
in: query
name: page
required: false
description: Result page number to return, starting from 1
- schema:
type: integer
default: 10
maximum: 100
in: query
name: pageSize
required: false
description: Items per page to return
- schema:
type: string
example: id_xxxxxxxxxx
in: path
name: identityId
required: true
description: The unique identifier for the organization that owns the account
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
required:
- hasNext
- items
properties:
hasNext:
type: boolean
description: Whether there are more pages for this search result
items:
type: array
items:
type: object
required:
- id
- balance
- address
- visibility
- createdAt
- updatedAt
properties:
id:
type: string
description: Unique identifier for a ledger account, in `redwal_...` format
example: redwal_xxxxxxxx
referenceId:
type: string
description: Customer's reference ID for this account
balance:
type: string
description: The balance of the ledger account
name:
type: string
description: Human-readable label for this account
address:
type: string
description: Base-58 address to the underlying Solana account
visibility:
enum:
- PRIVATE
- PUBLIC
type: string
description: 'Visibility of the account across MoveUSD network. **WARNING: `PUBLIC` wallets are visible to all customers.**'
createdAt:
type: string
format: date-time
description: The timestamp of when this account was created
updatedAt:
type: string
format: date-time
description: The timestamp of when this account was last updated
'400':
description: Default Response
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INVALID_REQUEST
- INVALID_ADDRESSES
description: '- `INVALID_REQUEST`: The service cannot understand the request
- `INVALID_ADDRESSES`: Invalid `addresses` query'
message:
type: string
errors:
type: array
items:
type: object
properties: {}
additionalProperties: true
'401':
description: The access to this resource has been denied
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- UNAUTHORIZED
message:
type: string
title: UNAUTHORIZED
description: The access to this resource has been denied
'403':
description: The credentials are valid but the caller is not permitted to transact
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- FORBIDDEN
message:
type: string
title: FORBIDDEN
description: The credentials are valid but the caller is not permitted to transact
default:
description: Catch-all error response for any unexpected internal errors
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INTERNAL
message:
type: string
enum:
- An unexpected internal error has occurred
title: INTERNAL
description: Catch-all error response for any unexpected internal errors
operationId: getV1IdentityByIdentityIdLedgerAccounts
x-operation-id-source: derived
/v1/identity/{identityId}/ledger-accounts/{id}:
put:
summary: Update a ledger account of an identity
tags:
- Ledger Accounts
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
referenceId:
type: string
description: Customer's reference ID for this account
name:
type: string
description: Human-readable label for this account
parameters:
- schema:
type: string
example: redwal_xxxxxxxx
in: path
name: id
required: true
description: The unique identifier for the account
- schema:
type: string
example: id_xxxxxxxxxx
in: path
name: identityId
required: true
description: The unique identifier for the organization that owns the account
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
required:
- id
- balance
- address
- visibility
- createdAt
- updatedAt
properties:
id:
type: string
description: Unique identifier for a ledger account, in `redwal_...` format
example: redwal_xxxxxxxx
referenceId:
type: string
description: Customer's reference ID for this account
balance:
type: string
description: The balance of the ledger account
name:
type: string
description: Human-readable label for this account
address:
type: string
description: Base-58 address to the underlying Solana account
visibility:
enum:
- PRIVATE
- PUBLIC
type: string
description: 'Visibility of the account across MoveUSD network. **WARNING: `PUBLIC` wallets are visible to all customers.**'
createdAt:
type: string
format: date-time
description: The timestamp of when this account was created
updatedAt:
type: string
format: date-time
description: The timestamp of when this account was last updated
'400':
description: Default Response
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INVALID_REQUEST
- INVALID_IDENTITY
description: '- `INVALID_REQUEST`: The service cannot understand the request
- `INVALID_IDENTITY`: The identity is not allowed to update a ledger account'
message:
type: string
errors:
type: array
items:
type: object
properties: {}
additionalProperties: true
'401':
description: The access to this resource has been denied
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- UNAUTHORIZED
message:
type: string
title: UNAUTHORIZED
description: The access to this resource has been denied
'403':
description: The credentials are valid but the caller is not permitted to transact
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- FORBIDDEN
message:
type: string
title: FORBIDDEN
description: The credentials are valid but the caller is not permitted to transact
'404':
description: The resource was not found
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- NOT_FOUND
message:
type: string
title: NOT_FOUND
description: The resource was not found
default:
description: Catch-all error response for any unexpected internal errors
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INTERNAL
message:
type: string
enum:
- An unexpected internal error has occurred
title: INTERNAL
description: Catch-all error response for any unexpected internal errors
operationId: putV1IdentityByIdentityIdLedgerAccountsById
x-operation-id-source: derived
get:
summary: Get a ledger account details, belonging to an identity
tags:
- Ledger Accounts
parameters:
- schema:
type: string
example: redwal_xxxxxxxx
in: path
name: id
required: true
description: The unique identifier for the account
- schema:
type: string
example: id_xxxxxxxxxx
in: path
name: identityId
required: true
description: The unique identifier for the organization that owns the account
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
required:
- id
- balance
- address
- visibility
- createdAt
- updatedAt
properties:
id:
type: string
description: Unique identifier for a ledger account, in `redwal_...` format
example: redwal_xxxxxxxx
referenceId:
type: string
description: Customer's reference ID for this account
balance:
type: string
description: The balance of the ledger account
name:
type: string
description: Human-readable label for this account
address:
type: string
description: Base-58 address to the underlying Solana account
visibility:
enum:
- PRIVATE
- PUBLIC
type: string
description: 'Visibility of the account across MoveUSD network. **WARNING: `PUBLIC` wallets are visible to all customers.**'
createdAt:
type: string
format: date-time
description: The timestamp of when this account was created
updatedAt:
type: string
format: date-time
description: The timestamp of when this account was last updated
'400':
description: The service cannot understand the request
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INVALID_REQUEST
message:
type: string
errors:
type: array
items:
type: object
properties: {}
additionalProperties: true
title: INVALID_REQUEST
description: The service cannot understand the request
'401':
description: The access to this resource has been denied
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- UNAUTHORIZED
message:
type: string
title: UNAUTHORIZED
description: The access to this resource has been denied
'403':
description: The credentials are valid but the caller is not permitted to transact
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- FORBIDDEN
message:
type: string
title: FORBIDDEN
description: The credentials are valid but the caller is not permitted to transact
'404':
description: The resource was not found
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- NOT_FOUND
message:
type: string
title: NOT_FOUND
description: The resource was not found
default:
description: Catch-all error response for any unexpected internal errors
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- INTERNAL
message:
type: string
enum:
- An unexpected internal error has occurred
title: INTERNAL
description: Catch-all error response for any unexpected internal errors
operationId: getV1IdentityByIdentityIdLedgerAccountsById
x-operation-id-source: derived
components:
securitySchemes:
ApiKeyAuth:
name: x-api-key
type: apiKey
in: header
ApiSecretAuth:
name: x-api-secret
type: apiKey
in: header
externalDocs:
description: Find out more about CFX
url: https://www.cfxlabs.com/