openapi: 3.1.0
info:
title: Endpoints Accounts API
version: 1.0.0
servers:
- url: https://api.agora.finance
description: Production
tags:
- name: Accounts
paths:
/v0/accounts:
get:
operationId: get
summary: List Accounts
description: "\n The endpoints exposed here are currently in **Beta**! As we continue to build our initial offering, these endpoints may implement breaking changes. Be sure to check back for our change log regularly as a precaution.\n\n\nList every account registered to the authenticated organization. An account is either a bank account (fiat source/destination) or a blockchain wallet (on-chain source/destination); both appear in the same paginated list, distinguished by the `kind` discriminator.\n\nWallet accounts carry a `networks` array, one entry per network, each with its `entitlements` and their status (see [Wallet entitlements](/api/endpoints/accounts/overview#wallet-entitlements)). Bank accounts return the full `accountNumber` alongside `routingNumber`, `bankName`, and the `beneficiary` name on the wire.\n"
tags:
- Accounts
parameters:
- name: cursor
in: query
required: false
schema:
type: string
- name: limit
in: query
required: false
schema:
type: integer
default: 50
- name: Authorization
in: header
description: 'Session JWT from POST /v0/auth/token, sent as `Authorization: Bearer `.'
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/accounts_get_Response_200'
'400':
description: One or more request parameters are invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_400_parameter_invalid'
'401':
description: Authentication is required.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_401_unauthorized'
'403':
description: The account is not eligible for the requested route direction.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_403_account_not_eligible_forbidden'
'404':
description: Resource not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_404_not_found'
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_429_rate_limit_exceeded'
'500':
description: An unexpected error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_500_internal_error'
post:
operationId: create
summary: Register an Account
description: "\n The endpoints exposed here are currently in **Beta**! As we continue to build our initial offering, these endpoints may implement breaking changes. Be sure to check back for our change log regularly as a precaution.\n\n\nRegister a customer-owned account under the authenticated organization. Set `kind` to `wallet` to register a blockchain address (supply the `networks` it should be registered on; EVM hex is normalized to lowercase, Solana base58 is kept verbatim) or `bank` to register a fiat account.\n\nRegistering a wallet starts `mint` and (where supported) `instant_settlement` entitlements on the requested networks. See [Wallet entitlements](/api/endpoints/accounts/overview#wallet-entitlements) for how they are approved and when the wallet is usable. Registering the same address on a network it already holds returns `409`.\n"
tags:
- Accounts
parameters:
- name: Authorization
in: header
description: 'Session JWT from POST /v0/auth/token, sent as `Authorization: Bearer `.'
required: true
schema:
type: string
responses:
'201':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/accounts_create_Response_201'
'400':
description: One or more request parameters are invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_400_parameter_invalid'
'401':
description: Authentication is required.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_401_unauthorized'
'403':
description: The account is not eligible for the requested route direction.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_403_account_not_eligible_forbidden'
'404':
description: Resource not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_404_not_found'
'409':
description: An account with these details already exists.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_409_account_already_exists'
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_429_rate_limit_exceeded'
'500':
description: An unexpected error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_500_internal_error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/accounts_create_Request'
/v0/accounts/{accountId}:
put:
operationId: update
summary: Update an Account
description: "\n The endpoints exposed here are currently in **Beta**! As we continue to build our initial offering, these endpoints may implement breaking changes. Be sure to check back for our change log regularly as a precaution.\n\n\nApply a single change to an existing account, selected by `operation`:\n\n- **`setName`**: rename a wallet or bank account (send `name`).\n- **`addNetwork`**: register an existing wallet on an additional `network`, which starts a new `mint` entitlement there (see [Wallet entitlements](/api/endpoints/accounts/overview#wallet-entitlements)). Rejected with `409` if the address is already registered there.\n- **`requestEntitlement`**: request an `entitlement` (currently `instant_settlement`) on an existing wallet `network`. Returns `400` if the entitlement isn't requestable for that network. See [Wallet entitlements](/api/endpoints/accounts/overview#wallet-entitlements) for how requests are reviewed and approved.\n\nThe response is the full updated account, same shape as `GET /v0/accounts`.\n"
tags:
- Accounts
parameters:
- name: accountId
in: path
required: true
schema:
type: string
format: uuid
- name: Authorization
in: header
description: 'Session JWT from POST /v0/auth/token, sent as `Authorization: Bearer `.'
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/accounts_update_Response_200'
'400':
description: This entitlement cannot be requested in its current state.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_400_entitlement_not_requestable_parameter_invalid'
'401':
description: Authentication is required.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_401_unauthorized'
'403':
description: The account is not eligible for the requested route direction.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_403_account_not_eligible_forbidden'
'404':
description: Account not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_404_account_not_found_not_found'
'409':
description: An account with these details already exists.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_409_account_already_exists'
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_429_rate_limit_exceeded'
'500':
description: An unexpected error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse_500_internal_error'
requestBody:
content:
application/json:
schema:
type: object
properties:
operation:
$ref: '#/components/schemas/V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaOperation'
name:
type: string
description: User-set label. Free-form; max 200 characters.
network:
$ref: '#/components/schemas/V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaNetwork'
entitlement:
$ref: '#/components/schemas/V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaEntitlement'
description: Entitlement to request. Moves to pending_approval; granting stays Agora-side.
required:
- operation
components:
schemas:
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItems:
type: object
properties:
type:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsType'
description: Entitlement type. `mint` is the mint capability gated by the per-chain compliance scan; `instant_settlement` is the instant-settlement whitelist; `rewards` is rewards eligibility.
status:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsStatus'
description: 'Entitlement status. `pending_approval` is requested and under Agora review; `approved` is active. `conditionally_approved` applies to `mint` only: the address is usable now (screening and whitelisting are auto-initiated) while final approval is still pending internally. `instant_settlement` and `rewards` stay `pending_approval` until reviewed. The API never auto-approves.'
required:
- type
- status
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItems
ErrorResponse400ParameterInvalidContext:
type: object
properties:
issues:
type: array
items:
$ref: '#/components/schemas/ErrorResponse400ParameterInvalidContextIssuesItems'
required:
- issues
title: ErrorResponse400ParameterInvalidContext
V0AccountsGetResponsesContentApplicationJsonSchemaDataItems:
oneOf:
- $ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItems0'
- $ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItems1'
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItems
ErrorResponse_401_unauthorized:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse401UnauthorizedCode'
docs_url:
type: string
message:
type: string
context:
$ref: '#/components/schemas/ErrorResponse401UnauthorizedContext'
required:
- code
- docs_url
- message
title: ErrorResponse_401_unauthorized
ErrorResponse400EntitlementNotRequestableParameterInvalidCode:
type: string
enum:
- entitlement_not_requestable
- parameter_invalid
title: ErrorResponse400EntitlementNotRequestableParameterInvalidCode
ErrorResponse400ParameterInvalidContextIssuesItems:
type: object
properties:
field:
type: string
message:
type: string
required:
- field
- message
title: ErrorResponse400ParameterInvalidContextIssuesItems
ErrorResponse401UnauthorizedCode:
type: string
enum:
- unauthorized
title: ErrorResponse401UnauthorizedCode
ErrorResponse_400_entitlement_not_requestable_parameter_invalid:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse400EntitlementNotRequestableParameterInvalidCode'
docs_url:
type: string
message:
type: string
context:
$ref: '#/components/schemas/ErrorResponse400EntitlementNotRequestableParameterInvalidContext'
required:
- code
- docs_url
- message
title: ErrorResponse_400_entitlement_not_requestable_parameter_invalid
AccountsCreateResponse2010:
type: object
properties:
id:
type: string
format: uuid
description: Stable UUID identifying this account; safe to cache or display.
address:
type: string
description: On-chain address. EIP-55 checksummed for EVM (`ethereum`), base58 for Solana.
addressFormat:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0AddressFormat'
description: Address syntax family. `ethereum` covers every EVM chain (Ethereum, Base, Polygon, Arbitrum, etc.); per-chain authorization is enforced separately via the account's chain entitlements.
createdAt:
type: string
format: date-time
description: ISO-8601 UTC timestamp when this address was added to the org.
kind:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0Kind'
description: 'Discriminator: this is a customer-owned blockchain address.'
name:
type: string
description: User-set label. Free-form; may be empty if the user hasn't set one.
networks:
type: array
items:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItems'
description: The networks this address is registered on, each with its per-type entitlement states.
required:
- id
- address
- addressFormat
- createdAt
- kind
- name
- networks
description: Customer-owned blockchain address (CustomerAddress).
title: AccountsCreateResponse2010
ErrorResponse400EntitlementNotRequestableParameterInvalidContextIssuesItems:
type: object
properties:
field:
type: string
message:
type: string
required:
- field
- message
title: ErrorResponse400EntitlementNotRequestableParameterInvalidContextIssuesItems
ErrorResponse404AccountNotFoundNotFoundCode:
type: string
enum:
- account_not_found
- not_found
title: ErrorResponse404AccountNotFoundNotFoundCode
ErrorResponse409AccountAlreadyExistsCode:
type: string
enum:
- account_already_exists
title: ErrorResponse409AccountAlreadyExistsCode
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0AddressFormat:
type: string
enum:
- ethereum
- solana
description: Address syntax family. `ethereum` covers every EVM chain (Ethereum, Base, Polygon, Arbitrum, etc.); per-chain authorization is enforced separately via the account's chain entitlements.
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0AddressFormat
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf1Currency:
type: string
enum:
- usd
description: Settlement currency. Today only `usd`; will extend as new currencies launch.
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf1Currency
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItems:
type: object
properties:
type:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsType'
description: Entitlement type. `mint` is the mint capability gated by the per-chain compliance scan; `instant_settlement` is the instant-settlement whitelist; `rewards` is rewards eligibility.
status:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsStatus'
description: 'Entitlement status. `pending_approval` is requested and under Agora review; `approved` is active. `conditionally_approved` applies to `mint` only: the address is usable now (screening and whitelisting are auto-initiated) while final approval is still pending internally. `instant_settlement` and `rewards` stay `pending_approval` until reviewed. The API never auto-approves.'
required:
- type
- status
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItems
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsStatus:
type: string
enum:
- approved
- conditionally_approved
- pending_approval
- pending_removal
- rejected
- removed
description: 'Entitlement status. `pending_approval` is requested and under Agora review; `approved` is active. `conditionally_approved` applies to `mint` only: the address is usable now (screening and whitelisting are auto-initiated) while final approval is still pending internally. `instant_settlement` and `rewards` stay `pending_approval` until reviewed. The API never auto-approves.'
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsStatus
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf1Kind:
type: string
enum:
- bank
description: 'Discriminator: this is a customer-owned bank account.'
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf1Kind
accounts_update_Response_200:
oneOf:
- $ref: '#/components/schemas/AccountsUpdateResponse2000'
- $ref: '#/components/schemas/AccountsUpdateResponse2001'
title: accounts_update_Response_200
ErrorResponse_409_account_already_exists:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse409AccountAlreadyExistsCode'
docs_url:
type: string
message:
type: string
required:
- code
- docs_url
- message
title: ErrorResponse_409_account_already_exists
V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf1Kind:
type: string
enum:
- bank
description: 'Discriminator: register a customer-owned bank account.'
title: V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf1Kind
AccountsCreateRequest0:
type: object
properties:
kind:
$ref: '#/components/schemas/V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf0Kind'
description: 'Discriminator: register a customer-owned blockchain address.'
address:
type: string
description: On-chain address to register. EVM hex is normalized to lowercase; Solana base58 is kept verbatim.
name:
type: string
description: User-set label. Free-form; max 200 characters.
networks:
type: array
items:
$ref: '#/components/schemas/V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf0NetworksItems'
description: Networks to register this address on. Each must be compatible with the address format.
required:
- kind
- address
- networks
title: AccountsCreateRequest0
V0AccountsGetResponsesContentApplicationJsonSchemaDataItems0:
type: object
properties:
id:
type: string
format: uuid
description: Stable UUID identifying this account; safe to cache or display.
address:
type: string
description: On-chain address. EIP-55 checksummed for EVM (`ethereum`), base58 for Solana.
addressFormat:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0AddressFormat'
description: Address syntax family. `ethereum` covers every EVM chain (Ethereum, Base, Polygon, Arbitrum, etc.); per-chain authorization is enforced separately via the account's chain entitlements.
createdAt:
type: string
format: date-time
description: ISO-8601 UTC timestamp when this address was added to the org.
kind:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0Kind'
description: 'Discriminator: this is a customer-owned blockchain address.'
name:
type: string
description: User-set label. Free-form; may be empty if the user hasn't set one.
networks:
type: array
items:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItems'
description: The networks this address is registered on, each with its per-type entitlement states.
required:
- id
- address
- addressFormat
- createdAt
- kind
- name
- networks
description: Customer-owned blockchain address (CustomerAddress).
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItems0
accounts_get_Response_200:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItems'
description: Page of accounts, newest first, tie-broken by id.
nextCursor:
type:
- string
- 'null'
description: Opaque cursor for the next page. Pass back verbatim as the `cursor` query param to fetch the next page; null when no more results.
required:
- data
- nextCursor
title: accounts_get_Response_200
ErrorResponse_404_account_not_found_not_found:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse404AccountNotFoundNotFoundCode'
docs_url:
type: string
message:
type: string
required:
- code
- docs_url
- message
title: ErrorResponse_404_account_not_found_not_found
ErrorResponse401UnauthorizedContextReason:
type: string
enum:
- invalid_token
- missing_claim
- missing_header
- token_expired
- token_revoked
- unknown_tenant
title: ErrorResponse401UnauthorizedContextReason
V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaEntitlement:
type: string
enum:
- instant_settlement
description: Entitlement to request. Moves to pending_approval; granting stays Agora-side.
title: V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaEntitlement
V0AccountsGetResponsesContentApplicationJsonSchemaDataItems1:
type: object
properties:
id:
type: string
format: uuid
description: Stable UUID identifying this account; safe to cache or display.
accountNumber:
type: string
description: Full bank account number.
bankName:
type: string
description: Name of the receiving bank.
beneficiary:
type: string
description: 'Account-holder name on the wire. Part of the account''s identity: distinguishes accounts that share a routing + account number (e.g. omnibus/custodian accounts holding several funds under one account number).'
createdAt:
type: string
format: date-time
description: ISO-8601 UTC timestamp when this account was added to the org.
currency:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf1Currency'
description: Settlement currency. Today only `usd`; will extend as new currencies launch.
kind:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf1Kind'
description: 'Discriminator: this is a customer-owned bank account.'
name:
type: string
description: User-set label. Free-form; may be empty if the user hasn't set one.
routingNumber:
type: string
description: ABA routing number identifying the receiving bank. A public bank identifier, returned in full.
required:
- id
- accountNumber
- bankName
- beneficiary
- createdAt
- currency
- kind
- name
- routingNumber
description: Customer-owned bank account (WireDetail, status=verified).
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItems1
ErrorResponse404NotFoundCode:
type: string
enum:
- not_found
title: ErrorResponse404NotFoundCode
V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf0NetworksItems:
type: string
enum:
- arbitrum
- avalanche
- base
- binance-smart-chain
- core
- ethereum
- fraxtal
- gnosis
- immutable
- injective
- katana
- mantle
- monad
- plume
- polygon-pos
- solana
- sui
description: Blockchain network identifier. Use this to filter or group supply data by chain. Values are stable; new networks may be added but existing ones will not be renamed.
title: V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf0NetworksItems
ErrorResponse_400_parameter_invalid:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse400ParameterInvalidCode'
docs_url:
type: string
message:
type: string
context:
$ref: '#/components/schemas/ErrorResponse400ParameterInvalidContext'
required:
- code
- docs_url
- message
title: ErrorResponse_400_parameter_invalid
AccountsCreateResponse2011:
type: object
properties:
id:
type: string
format: uuid
description: Stable UUID identifying this account; safe to cache or display.
accountNumber:
type: string
description: Full bank account number.
bankName:
type: string
description: Name of the receiving bank.
beneficiary:
type: string
description: 'Account-holder name on the wire. Part of the account''s identity: distinguishes accounts that share a routing + account number (e.g. omnibus/custodian accounts holding several funds under one account number).'
createdAt:
type: string
format: date-time
description: ISO-8601 UTC timestamp when this account was added to the org.
currency:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf1Currency'
description: Settlement currency. Today only `usd`; will extend as new currencies launch.
kind:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf1Kind'
description: 'Discriminator: this is a customer-owned bank account.'
name:
type: string
description: User-set label. Free-form; may be empty if the user hasn't set one.
routingNumber:
type: string
description: ABA routing number identifying the receiving bank. A public bank identifier, returned in full.
required:
- id
- accountNumber
- bankName
- beneficiary
- createdAt
- currency
- kind
- name
- routingNumber
description: Customer-owned bank account (WireDetail, status=verified).
title: AccountsCreateResponse2011
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItemsStatus:
type: string
enum:
- approved
- conditionally_approved
- pending_approval
- pending_removal
- rejected
- removed
description: 'Entitlement status. `pending_approval` is requested and under Agora review; `approved` is active. `conditionally_approved` applies to `mint` only: the address is usable now (screening and whitelisting are auto-initiated) while final approval is still pending internally. `instant_settlement` and `rewards` stay `pending_approval` until reviewed. The API never auto-approves.'
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItemsStatus
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItems:
type: object
properties:
chain:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsChain'
description: Network the wallet is registered on (kebab-case public network id).
entitlements:
type: array
items:
$ref: '#/components/schemas/V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItems'
description: Entitlement states on this network, one per type the wallet holds on the chain.
required:
- chain
- entitlements
description: Per-network entitlement state for the wallet.
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItems
accounts_create_Response_201:
oneOf:
- $ref: '#/components/schemas/AccountsCreateResponse2010'
- $ref: '#/components/schemas/AccountsCreateResponse2011'
title: accounts_create_Response_201
AccountsUpdateResponse2000:
type: object
properties:
id:
type: string
format: uuid
description: Stable UUID identifying this account; safe to cache or display.
address:
type: string
description: On-chain address. EIP-55 checksummed for EVM (`ethereum`), base58 for Solana.
addressFormat:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0AddressFormat'
description: Address syntax family. `ethereum` covers every EVM chain (Ethereum, Base, Polygon, Arbitrum, etc.); per-chain authorization is enforced separately via the account's chain entitlements.
createdAt:
type: string
format: date-time
description: ISO-8601 UTC timestamp when this address was added to the org.
kind:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0Kind'
description: 'Discriminator: this is a customer-owned blockchain address.'
name:
type: string
description: User-set label. Free-form; may be empty if the user hasn't set one.
networks:
type: array
items:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItems'
description: The networks this address is registered on, each with its per-type entitlement states.
required:
- id
- address
- addressFormat
- createdAt
- kind
- name
- networks
description: Customer-owned blockchain address (CustomerAddress).
title: AccountsUpdateResponse2000
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf1Currency:
type: string
enum:
- usd
description: Settlement currency. Today only `usd`; will extend as new currencies launch.
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf1Currency
ErrorResponse403AccountNotEligibleForbiddenCode:
type: string
enum:
- account_not_eligible
- forbidden
title: ErrorResponse403AccountNotEligibleForbiddenCode
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0Kind:
type: string
enum:
- wallet
description: 'Discriminator: this is a customer-owned blockchain address.'
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0Kind
AccountsCreateRequest1:
type: object
properties:
kind:
$ref: '#/components/schemas/V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf1Kind'
description: 'Discriminator: register a customer-owned bank account.'
accountNumber:
type: string
description: Bank account number. 6-100 uppercase letters and digits; embedded spaces are ignored.
bankName:
type: string
description: Name of the receiving bank.
beneficiary:
type: string
description: 'Account-holder name on the wire. Part of the account''s identity (with routing + account number): omnibus/custodian accounts share one account number across beneficiaries, so this disambiguates them.'
name:
type: string
description: User-set label. Free-form; max 200 characters.
routingNumber:
type: string
description: ABA routing number (US) or SWIFT/BIC (international). 6-100 uppercase letters and digits; embedded spaces are ignored.
required:
- kind
- accountNumber
- bankName
- beneficiary
- routingNumber
title: AccountsCreateRequest1
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItemsType:
type: string
enum:
- instant_settlement
- mint
- rewards
description: Entitlement type. `mint` is the mint capability gated by the per-chain compliance scan; `instant_settlement` is the instant-settlement whitelist; `rewards` is rewards eligibility.
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItemsType
ErrorResponse401UnauthorizedContext:
type: object
properties:
reason:
$ref: '#/components/schemas/ErrorResponse401UnauthorizedContextReason'
required:
- reason
title: ErrorResponse401UnauthorizedContext
V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaNetwork:
type: string
enum:
- arbitrum
- avalanche
- base
- binance-smart-chain
- core
- ethereum
- fraxtal
- gnosis
- immutable
- injective
- katana
- mantle
- monad
- plume
- polygon-pos
- solana
- sui
title: V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaNetwork
ErrorResponse_404_not_found:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse404NotFoundCode'
docs_url:
type: string
message:
type: string
required:
- code
- docs_url
- message
title: ErrorResponse_404_not_found
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsChain:
type: string
enum:
- arbitrum
- avalanche
- base
- binance-smart-chain
- core
- ethereum
- fraxtal
- gnosis
- immutable
- injective
- katana
- mantle
- monad
- plume
- polygon-pos
- solana
- sui
description: Network the wallet is registered on (kebab-case public network id).
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsChain
ErrorResponse_429_rate_limit_exceeded:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse429RateLimitExceededCode'
docs_url:
type: string
message:
type: string
required:
- code
- docs_url
- message
title: ErrorResponse_429_rate_limit_exceeded
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf1Kind:
type: string
enum:
- bank
description: 'Discriminator: this is a customer-owned bank account.'
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf1Kind
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItems:
type: object
properties:
chain:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsChain'
description: Network the wallet is registered on (kebab-case public network id).
entitlements:
type: array
items:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItems'
description: Entitlement states on this network, one per type the wallet holds on the chain.
required:
- chain
- entitlements
description: Per-network entitlement state for the wallet.
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItems
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0Kind:
type: string
enum:
- wallet
description: 'Discriminator: this is a customer-owned blockchain address.'
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0Kind
ErrorResponse400ParameterInvalidCode:
type: string
enum:
- parameter_invalid
title: ErrorResponse400ParameterInvalidCode
accounts_create_Request:
oneOf:
- $ref: '#/components/schemas/AccountsCreateRequest0'
- $ref: '#/components/schemas/AccountsCreateRequest1'
title: accounts_create_Request
ErrorResponse400EntitlementNotRequestableParameterInvalidContext:
type: object
properties:
issues:
type: array
items:
$ref: '#/components/schemas/ErrorResponse400EntitlementNotRequestableParameterInvalidContextIssuesItems'
required:
- issues
title: ErrorResponse400EntitlementNotRequestableParameterInvalidContext
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0AddressFormat:
type: string
enum:
- ethereum
- solana
description: Address syntax family. `ethereum` covers every EVM chain (Ethereum, Base, Polygon, Arbitrum, etc.); per-chain authorization is enforced separately via the account's chain entitlements.
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0AddressFormat
ErrorResponse429RateLimitExceededCode:
type: string
enum:
- rate_limit_exceeded
title: ErrorResponse429RateLimitExceededCode
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf1Currency:
type: string
enum:
- usd
description: Settlement currency. Today only `usd`; will extend as new currencies launch.
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf1Currency
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0Kind:
type: string
enum:
- wallet
description: 'Discriminator: this is a customer-owned blockchain address.'
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0Kind
ErrorResponse_403_account_not_eligible_forbidden:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse403AccountNotEligibleForbiddenCode'
docs_url:
type: string
message:
type: string
required:
- code
- docs_url
- message
title: ErrorResponse_403_account_not_eligible_forbidden
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItems:
type: object
properties:
type:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItemsType'
description: Entitlement type. `mint` is the mint capability gated by the per-chain compliance scan; `instant_settlement` is the instant-settlement whitelist; `rewards` is rewards eligibility.
status:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItemsStatus'
description: 'Entitlement status. `pending_approval` is requested and under Agora review; `approved` is active. `conditionally_approved` applies to `mint` only: the address is usable now (screening and whitelisting are auto-initiated) while final approval is still pending internally. `instant_settlement` and `rewards` stay `pending_approval` until reviewed. The API never auto-approves.'
required:
- type
- status
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItems
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItems:
type: object
properties:
chain:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsChain'
description: Network the wallet is registered on (kebab-case public network id).
entitlements:
type: array
items:
$ref: '#/components/schemas/V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsEntitlementsItems'
description: Entitlement states on this network, one per type the wallet holds on the chain.
required:
- chain
- entitlements
description: Per-network entitlement state for the wallet.
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItems
V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsChain:
type: string
enum:
- arbitrum
- avalanche
- base
- binance-smart-chain
- core
- ethereum
- fraxtal
- gnosis
- immutable
- injective
- katana
- mantle
- monad
- plume
- polygon-pos
- solana
- sui
description: Network the wallet is registered on (kebab-case public network id).
title: V0AccountsGetResponsesContentApplicationJsonSchemaDataItemsOneOf0NetworksItemsChain
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsStatus:
type: string
enum:
- approved
- conditionally_approved
- pending_approval
- pending_removal
- rejected
- removed
description: 'Entitlement status. `pending_approval` is requested and under Agora review; `approved` is active. `conditionally_approved` applies to `mint` only: the address is usable now (screening and whitelisting are auto-initiated) while final approval is still pending internally. `instant_settlement` and `rewards` stay `pending_approval` until reviewed. The API never auto-approves.'
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsStatus
ErrorResponse500InternalErrorCode:
type: string
enum:
- internal_error
title: ErrorResponse500InternalErrorCode
AccountsUpdateResponse2001:
type: object
properties:
id:
type: string
format: uuid
description: Stable UUID identifying this account; safe to cache or display.
accountNumber:
type: string
description: Full bank account number.
bankName:
type: string
description: Name of the receiving bank.
beneficiary:
type: string
description: 'Account-holder name on the wire. Part of the account''s identity: distinguishes accounts that share a routing + account number (e.g. omnibus/custodian accounts holding several funds under one account number).'
createdAt:
type: string
format: date-time
description: ISO-8601 UTC timestamp when this account was added to the org.
currency:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf1Currency'
description: Settlement currency. Today only `usd`; will extend as new currencies launch.
kind:
$ref: '#/components/schemas/V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf1Kind'
description: 'Discriminator: this is a customer-owned bank account.'
name:
type: string
description: User-set label. Free-form; may be empty if the user hasn't set one.
routingNumber:
type: string
description: ABA routing number identifying the receiving bank. A public bank identifier, returned in full.
required:
- id
- accountNumber
- bankName
- beneficiary
- createdAt
- currency
- kind
- name
- routingNumber
description: Customer-owned bank account (WireDetail, status=verified).
title: AccountsUpdateResponse2001
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0AddressFormat:
type: string
enum:
- ethereum
- solana
description: Address syntax family. `ethereum` covers every EVM chain (Ethereum, Base, Polygon, Arbitrum, etc.); per-chain authorization is enforced separately via the account's chain entitlements.
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0AddressFormat
V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaOperation:
type: string
enum:
- setName
- addNetwork
- requestEntitlement
title: V0AccountsAccountIdPutRequestBodyContentApplicationJsonSchemaOperation
V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsType:
type: string
enum:
- instant_settlement
- mint
- rewards
description: Entitlement type. `mint` is the mint capability gated by the per-chain compliance scan; `instant_settlement` is the instant-settlement whitelist; `rewards` is rewards eligibility.
title: V0AccountsAccountIdPutResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsType
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsType:
type: string
enum:
- instant_settlement
- mint
- rewards
description: Entitlement type. `mint` is the mint capability gated by the per-chain compliance scan; `instant_settlement` is the instant-settlement whitelist; `rewards` is rewards eligibility.
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsEntitlementsItemsType
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf1Kind:
type: string
enum:
- bank
description: 'Discriminator: this is a customer-owned bank account.'
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf1Kind
V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf0Kind:
type: string
enum:
- wallet
description: 'Discriminator: register a customer-owned blockchain address.'
title: V0AccountsPostRequestBodyContentApplicationJsonSchemaOneOf0Kind
V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsChain:
type: string
enum:
- arbitrum
- avalanche
- base
- binance-smart-chain
- core
- ethereum
- fraxtal
- gnosis
- immutable
- injective
- katana
- mantle
- monad
- plume
- polygon-pos
- solana
- sui
description: Network the wallet is registered on (kebab-case public network id).
title: V0AccountsPostResponsesContentApplicationJsonSchemaOneOf0NetworksItemsChain
ErrorResponse_500_internal_error:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorResponse500InternalErrorCode'
docs_url:
type: string
message:
type: string
required:
- code
- docs_url
- message
title: ErrorResponse_500_internal_error
securitySchemes:
accessKey:
type: http
scheme: bearer
description: 'Agora access key (cleartext), sent as `Authorization: Bearer `. Used only by POST /v0/auth/token to mint a session JWT.'
sessionJwt:
type: http
scheme: bearer
description: 'Session JWT from POST /v0/auth/token, sent as `Authorization: Bearer `.'