openapi: 3.0.0
info:
version: 2.0.0
title: Anchorage Digital API Reference Addresses Fiat Banking Operations API
contact:
email: api@anchorage.com
description: "# Introduction\n*CONFIDENTIAL: Please do not distribute this documentation externally without prior Anchorage Digital approval.*\n\n\nThe Anchorage Digital REST API v2.0 provides a set of operations and resources that allow Anchorage Digital clients and partners to:\n - Programmatically transfer funds from an Anchorage Digital vault or wallet without human intervention\n - Create and list deposit addresses in a vault\n - Read and monitor vault balances\n - Query transaction history including deposits\n - Request quotes from and execute trades with the Anchorage Digital trading desk\n\n\nWant help or to share your opinion on how this API works for you? Please contact api@anchorage.com.\n\n\n# Authentication and Security\n\nThe Anchorage Digital API performs authentication and authorization via a combination of:\n\n\n* An API key, which is a bearer token\n\n* A permission group signed by the user's organization, which is linked to the API key\n\n* An Ed25519 Signature, which comes from a user-generated key and is required for certain requests\n\n\n## Permission Groups\n\n\nA permission group acts as a set of rules for how an organization and its resources can be accessed. Permission groups are created independently of API keys, and new permission groups must be created prior to making an API key.\n\n\nEach permission group has a name, a description and a set of permissions which can be applied to your organization's vaults. Updating, creating and deleting permissions groups require a quorum of approvals. After creation, a permission group can be freely assigned to an unlimited number of API keys.\n\n\nEach API key inherits its permissions from the associated permission group. When the permission group is updated, all API keys associated with it will inherit the updated permission set. If a permission group is deleted, all associated API keys will no longer work.\n\n\nEach organization is created with a default permission group that allows read-only access. This permission group may be modified or deleted at any time, and no API keys are created by default with this permission group.\n\n\n### Permissions\n\n\nPossible vault permissions include the following:\n\n\n
\n \n | Read vault activity (READ) | \n See an overview of your vault(s) and wallets. Read vault details, balances, asset types, transaction history and deposit addresses. | \n
\n \n | Create address (CREATE_DEPOSIT_ADDRESS) | \n Receive deposits in the vault from external sources. Create and read deposit addresses. | \n
\n \n | Transfer funds (TRANSFER) | \n This permission is configurable to enable an API key endowed with this permission to either 1) Transfer funds to any Anchorage Digital institutional account, including those outside of your organization or 2) Transfer funds to any blockchain address not custodied by Anchorage Digital that has gone through quorum approval. | \n
\n \n | Propose and accept settlements (PROPOSE_ACCEPT_SETTLEMENTS) | \n This is an Atlas specific permission for initiating settlements. | \n
\n \n | Authorize settlements (AUTHORIZE_SETTLEMENTS) | \n This is an Atlas specific permission for authorizing settlements after they've been proposed or accepted. | \n
\n
\n\n\nThere are also special vault permissions for enabled by Anchorage Digital on a per-organization basis:\n\nAdditionally, there are global permissions which apply to the entire organization:\n\n\n\n \n | Initiate withdrawals (INITIATE_WITHDRAWAL) | \n Initiate withdrawals to external destinations. All withdrawals require quorum approval through the Anchorage Digital mobile app. | \n
\n \n | Execute trades (TRADE) | \n Request for quotes (RFQ) from the Anchorage Digital trading desk. Create and accept quotes. Read data of trades and settlements created by this key. | \n
\n \n | Read trade activity (READ_TRADE) | \n Read trade activity and trade settlements data of your organization. | \n
\n \n | Read lending activity (LENDER_READ) | \n Read lending activity of your organization. | \n
\n \n | Read facility data (FACILITY_ONLY) | \n Read lending facility data. | \n
\n \n | Read deposit attribution activity (READ_DEPOSIT_ATTRIBUTION) | \n Read deposit attribution activity of your organization. | \n
\n \n | Manage deposit attributions (DEPOSIT_ATTRIBUTION) | \n Read deposit attribution activity of your organization. Perform deposit attributions. | \n
\n \n | Initiate Staking and Unstaking (STAKE) | \n Initiate staking or unstaking operation. All operations require quorum approval through the Anchorage Digital mobile app. | \n
\n
\n\n\n### Example Workflow - Allow transfers from specific vaults\n\nTo create an API key with the ability to transfer funds from an Anchorage Digital vaults or wallet, a permission group must first be created with the **Transfer funds** permission for the desired source vaults. Creating this permission group requires a quorum of approvals on the Anchorage Digital iOS app. Once the creation is confirmed, any number of API keys may be created with this permission group in the Anchorage Digital Web Dashboard under the API 2.0 section.\n\nTo add additional permissions to the API key, update the associated permission group through the Anchorage Digital Web Dashboard. To revoke any permissions, the individual API key may be revoked, or the permission group may be updated or deleted to remove Transfer access.\n\n## API Keys\n\nAll API requests must be made over HTTPS and must include authentication using the following scheme.\n\n\n\n### Generating an API Key\n\nIn order to make a valid API request, you must first create an API key. API keys can be created and managed in the Anchorage Digital Web Dashboard under the [API 2.0 tab](https://anchoragelogin.com/api). When you create an API key, there are 3 pieces of information you will need to remember:\n - API access key\n - Ed25519 public key (optional for read-only requests)\n - Ed25519 private/signing key (optional for read-only requests)\n\nYou must generate an Ed25519 signing key pair and save the public portion in the Anchorage Digital Web Dashboard when creating the API access key. The signing key pair is used for added security with sensitive requests.\n\nPlease note, Anchorage Digital cannot recover your API access key or private signing key if you forget them. You may generate a new access key and signing key at any time if you lose access.\n\n### API Key Permissions\n\nEach API key is associated with a permission group. This permission group specifies the permitted actions for all associated API keys. Read more about permission groups [here](#section/Authentication-and-Security/Permission-Groups).\n\n### Creating a request\n\nAll requests must include the `Api-Access-Key` header, which contains your API access key as a string.\n\nEndpoints that require a signature must include the `Api-Signature` and `Api-Timestamp` headers. Read more about signatures [here](#section/Authentication-and-Security/Signatures).\n\nAll request bodies must be valid JSON and have the content type `application/json`.\n\n## Request Signatures\n\nCertain endpoints require an Ed25519 signature to be provided alongside the API key. These endpoints will specify the `Api-Signature` and `Api-Timestamp` headers as additional parameters.\n\nSignatures are optional unless explicitly required, but are encouraged for all requests. If a signature is provided, it will be verified.\n\n### Signing Keys\n\nA signing key pair is generated by the user and the corresponding public key must be provided when creating an API key.\n\nWhen creating an API key, you will be prompted to provide an Ed25519 public key. You must use the associated Ed25519 signing key (private key) when creating signatures for requests from this API key.\n\nPlease note that signing keys (Ed25519 private keys) should be stored securely by the user. The signing key should only be used to derive request signatures and should never be sent in a request. Anchorage Digital will never request you share your private key.\n\n### Generating a Signing Key\n\nThe user must securely generate an Ed25519 key pair on their own hardware and retain both the public and private portions. The Anchorage Digital API accepts a 64-character (32 bytes) hex-encoded Ed25519 public key when creating an API access key.\n\n\n#### Code sample (Python)\n\n*Generate a new signing key pair*\n\n```python\n# https://pypi.org/project/PyNaCl/\n\nimport nacl\nimport nacl.signing\nimport secrets\n\nseed = secrets.token_bytes(32)\n\n# Generate a new random signing key\nsigning_key = nacl.signing.SigningKey(seed)\n\n# Obtain the hex-encoded signing key\nprint('Signing key:')\nprint(signing_key.encode().hex())\n\n# Obtain the hex-encoded verify key for the given signing key\n# Use this in the Anchorage Digital Web Dashboard when creating an API key\nprint('Public key:')\nprint(signing_key.verify_key.encode().hex())\n```\n\n\n### Signing a Request\n\nTo sign a request, generate a request signature using the Ed25519 private (signing) key and provide it alongside the request in the `Api-Signature` header.\n\nTo create a request signature, first concatenate the `timestamp`, `method`, `request path`, and `body` into a string. Then, create a signature of this message using the Ed25519 private key and hex-encode the output. Use this value as the `Api-Signature` header and use the `timestamp` value as the `Api-Timestamp` header.\n\n- The `method` is an uppercase HTTP method (ex. `GET`, `POST`, `DELETE`)\n- The `request path` should contain all query parameters (ex. `/v2/transfers?foo=bar&baz=bang`)\n- The `body` is a stringified HTTP request body\n- The `body` should be omitted if the request does not contain a body (ex. a `GET` or `DELETE` request)\n- The `timestamp` is the same as the `Api-Timestamp` header\n- The `timestamp` is a number of seconds since the Unix Epoch in UTC, and must be within one minute of the API service's time when the request is received\n\n### Reference signature\n\nTo verify your signature generation code is correct, generate a signature for the following request and timestamp using the provided signing key. If the generated signature matches the signature below, your signature generation code is correct.\n\n\n\n \n | Timestamp | \n 1577880000 | \n
\n \n | HTTP Method (Uppercase) | \n POST | \n
\n \n | HTTP Path + query | \n /v2/transfers?foo=bar&baz=bang | \n
\n \n | HTTP Body | \n {\"source\": {\"id\": \"1c920f4241b78a1d483a29f3c24b6c4c\", \"type\": \"VAULT\"}, \"assetType\": \"ETH\", \"destination\": {\"id\": \"55e89d4a644d736b01533a2ea9b32a20\", \"type\": \"VAULT\"}, \"amount\": \"1000.00000000\"} | \n
\n \n | Signing Key (Ed25519 Private Key Seed) | \n 0101010101010101010101010101010101010101010101010101010101010101 | \n
\n \n | Public Key | \n 8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c | \n
\n \n | Signature | \n 4bf42054bf7db1f8a2a2bc83d2a108502ee7a9d2ac7a2738adc2f932922446786fb9be1bd1eb475023296c6cba4ddbe28b04baca4b7521b1f1840a4ffd2b4d0d | \n
\n
\n\n## Reference clients\n\n### Python (with `requests` library)\n\n*Authorize and sign requests*\n\n```python\n\n# https://pypi.org/project/PyNaCl/\n\nfrom nacl import signing\n\nimport time\n\nimport requests\n\n\nclass AnchorageAuth(requests.auth.AuthBase):\n ACCESS_KEY_HEADER = \"Api-Access-Key\"\n SIGNATURE_HEADER = \"Api-Signature\"\n TIMESTAMP_HEADER = \"Api-Timestamp\"\n\n access_key: str\n signing_key: signing.SigningKey\n\n def __init__(self, access_key: str, signing_key_seed: bytes):\n self.access_key = access_key\n self.signing_key = signing.SigningKey(signing_key_seed)\n\n def __call__(self, r: requests.PreparedRequest):\n r.headers[self.ACCESS_KEY_HEADER] = self.access_key\n\n timestamp = str(int(time.time()))\n method = r.method.upper() if r.method else \"GET\"\n body: bytes = bytes()\n if r.body and isinstance(r.body, bytes):\n body = r.body\n elif r.body and isinstance(r.body, str):\n body = bytearray(r.body, \"utf-8\")\n message = b\"\".join(\n [bytearray(timestamp, \"utf-8\"), bytearray(method, \"utf-8\"), bytearray(r.path_url, \"utf-8\"), body]\n )\n signature = self.signing_key.sign(message).signature.hex()\n r.headers[self.SIGNATURE_HEADER] = signature\n r.headers[self.TIMESTAMP_HEADER] = timestamp\n return r\n\n\n# load secrets\n\n# Use the API key generated in the Anchorage Digital Web Dashboard\n\naccess_key = ...\n\n# Use the Ed25519 signing private key\n\nsigning_key_str = ... # load the raw string\n\nsigning_key = bytes(bytearray.fromhex(signing_key_str))\n\ndata = {}\n\nanchorage_auth = AnchorageAuth(access_key, signing_key)\n\nr = requests.post(\"https://api.anchorage.com/v2/transfers\", data=data, auth=anchorage_auth)\n\n```\n\n### Ruby - Reproduce reference signature\n```ruby\n require \"ed25519\"\n require \"net/http\"\n require \"time\"\n\n def hex_to_bin(s)\n [s].pack('H*')\n end\n\n def bin_to_hex(s)\n s.unpack('H*').first\n end\n\n private_key_seed_hex = '0101010101010101010101010101010101010101010101010101010101010101'\n public_key_hex = '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c'\n key_pair_hex = private_key_seed_hex + public_key_hex\n\n key_pair = hex_to_bin(key_pair_hex)\n\n signing_key = Ed25519::SigningKey.from_keypair(key_pair)\n\n timestamp = '1577880000' # Time.now.to_i.to_s\n\n req = Net::HTTP::Post.new('/v2/transfers?foo=bar&baz=bang')\n req.body = '{\"source\": {\"id\": \"1c920f4241b78a1d483a29f3c24b6c4c\", \"type\": \"VAULT\"}, \"assetType\": \"ETH\", \"destination\": {\"id\": \"55e89d4a644d736b01533a2ea9b32a20\", \"type\": VAULT\"}, \"amount\": \"1000.00000000\"}'\n\n signature = signing_key.sign(timestamp + req.method + req.path + req.body)\n\n req['Api-Access-Key'] = 'YOUR_ACCESS_KEY'\n req['Api-Timestamp'] = timestamp\n req['Api-Signature'] = bin_to_hex(signature)\n\n puts bin_to_hex(signature)\n```\n\n# Errors\n\n\nThe Anchorage Digital API returns standard HTTP error codes for each API request.\n\n\n\n \n | Response Code | \n Description | \n
\n
\n | 200 OK | \n The request was successful. | \n
\n \n | 400 Bad Request | \n The request was improperly formed and could not be understood by the server, often due to invalid syntax, insufficient funds, or a missing required parameter. | \n
\n \n | 401 Unauthorized | \n The request was missing a valid API key. | \n
\n \n | 403 Forbidden | \n The provided API key does not have permission to perform the requested action. | \n
\n \n | 404 Not Found | \n The requested resource does not exist. | \n
\n \n | 409 Conflict | \n The requested resource cannot proceed with the requested action because it is not in the required state. | \n
\n \n | 429 Too Many Requests | \n Too many requests have been sent in a given amount of time. | \n
\n \n \n 500 Internal Server Error\n \n 502 Bad Gateway\n \n 503 Service Unavailable\n \n 504 Gateway Timeout\n | \n Something went wrong on Anchorage’s side. We have been alerted and are working on it. | \n
\n
\n\n\nIn addition to returning HTTP error codes for failed requests, the Anchorage Digital API includes a readable error message describing what went wrong in the response body.\n\n\n\n\n\n# Idempotency\n\n\nCertain endpoints support idempotent requests so that a given request can be safely retried without performing the same operation twice. For example, if a request to transfer funds does not respond due to network issues, you can retry the request using the same idempotent ID to ensure that only one transfer is created.\n\n\nEndpoints that support idempotent requests have an optional `idempotentId` field that can be included in the body of the `POST` request. Provide a unique string using your method of choice (such as a v4 UUID).\n\n\nIf a request is valid, Anchorage Digital will save the request indefinitely. If a subsequent request is received with the same `idempotentId` we will return the previously saved response for that `idempotentId`.\n\n\n# Rate Limits\n\n\nKeys provisioned by an Organization share one common rate limit. API requests are limited to 20 requests per second per Organization, allowing for bursts of up to 100 requests within a single second.\n\n\n# Pagination\n\n\nCursor pagination is used for REST endpoints which return multiple data points. Pagination allows for fetching data after the current page and specifying how many records to return. The `next` cursor is available in responses with the `page` attribute. Requests should use the `next` cursor URL to query subsequent data. Query parameter `afterId` specifies the last record previously retrieved. Some endpoints instead use the `endDate` parameter to specify the end date and older for records to retrieve. Query parameter `limit` specifies the maximum number of records in a response.\n\n## Parameters\n\n\n \n | Parameter | \n Description | \n
\n | afterId | \n Request page after (older than) this pagination id. | \n
\n \n | endDate | \n Request records older than this date (YYYY-MM-DD format). Used for /trading/trades and /trading/settlements resources. | \n
\n \n | limit | \n Maximum number of results requested. Default usually 25, but varies depending on resource. | \n
\n
\n\n## Example\n\n`GET /v2/transfers?afterId=1968b94b09b8a1a8a381775d1f04978c424d891d50e517774bf984297985b471&limit=100`\n\n## Next cursor\n\nThe `next` cursor is a URL which references the last record in a set of records. When queried, the `next` cursor URL will return subsequent records, but otherwise using the same query parameters."
servers:
- url: https://api.anchorage-staging.com/v2
security:
- Api-Access-Key: []
tags:
- description: Operations for managing fiat bank payments and accounts
name: Fiat Banking Operations
paths:
/fiat/banks/payments/wire:
post:
operationId: createWire
summary: Create a wire transfer
description: 'Permissions required: **Fiat Banking**
Create a new wire transfer.
Upon receiving a successful response, the payment immediately enters the approved state. At this point, the bank will attempt to process the payment, with status updates delivered via webhooks.'
parameters:
- name: Api-Signature
in: header
description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WireCreateRequest'
responses:
'201':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/WireCreateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'413':
description: Payload Too Large
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
get:
operationId: listWires
summary: List wire transfers
description: 'Permissions required: **Fiat Banking**
Retrieve a paginated list of wire transfers.'
parameters:
- name: first
in: query
description: Maximum number of results to return per query
schema:
type: integer
format: int64
default: 25
maximum: 100
minimum: 1
- name: after
in: query
description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
schema:
type: string
- name: clientRefId
in: query
description: Filter by client reference ID
required: false
schema:
type: string
- name: effectiveDateStart
in: query
description: 'Filter payments with an effective date on or after this date (inclusive). Format: YYYY-MM-DD.'
required: false
schema:
type: string
format: date
- name: effectiveDateEnd
in: query
description: 'Filter payments with an effective date on or before this date (inclusive). Format: YYYY-MM-DD.'
required: false
schema:
type: string
format: date
- name: createdAtStart
in: query
description: 'Filter payments created at or after this datetime (inclusive). Format: RFC 3339 date-time.'
required: false
schema:
type: string
format: date-time
- name: createdAtEnd
in: query
description: 'Filter payments created at or before this datetime (inclusive). Format: RFC 3339 date-time.'
required: false
schema:
type: string
format: date-time
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/ListWiresResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/payments/wire/{id}:
get:
operationId: getWire
summary: Get a wire transfer
description: 'Permissions required: **Fiat Banking**
Retrieve details of a specific wire transfer by ID.'
parameters:
- name: id
in: path
description: The unique identifier of the wire transfer
required: true
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/WireResponse'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/payments/ach:
post:
operationId: createACH
summary: Create an ACH transfer
description: 'Permissions required: **Fiat Banking**
Create a new ACH transfer.
Upon receiving a successful response, the payment immediately enters the approved state. At this point, the bank will attempt to process the payment, with status updates delivered via webhooks.'
parameters:
- name: Api-Signature
in: header
description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ACHCreateRequest'
responses:
'201':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/ACHCreateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'413':
description: Payload Too Large
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
get:
operationId: listACHTransfers
summary: List ACH transfers
description: 'Permissions required: **Fiat Banking**
Retrieve a paginated list of ACH transfers.'
parameters:
- name: first
in: query
description: Maximum number of results to return per query
schema:
type: integer
format: int64
default: 25
maximum: 100
minimum: 1
- name: after
in: query
description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
schema:
type: string
- name: clientRefId
in: query
description: Filter by client reference ID
required: false
schema:
type: string
- name: effectiveDateStart
in: query
description: 'Filter payments with an effective date on or after this date (inclusive). Format: YYYY-MM-DD.'
required: false
schema:
type: string
format: date
- name: effectiveDateEnd
in: query
description: 'Filter payments with an effective date on or before this date (inclusive). Format: YYYY-MM-DD.'
required: false
schema:
type: string
format: date
- name: createdAtStart
in: query
description: 'Filter payments created at or after this datetime (inclusive). Format: RFC 3339 date-time.'
required: false
schema:
type: string
format: date-time
- name: createdAtEnd
in: query
description: 'Filter payments created at or before this datetime (inclusive). Format: RFC 3339 date-time.'
required: false
schema:
type: string
format: date-time
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/ListACHTransfersResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/payments/ach/{id}:
get:
operationId: getACH
summary: Get an ACH transfer
description: 'Permissions required: **Fiat Banking**
Retrieve details of a specific ACH transfer by ID.'
parameters:
- name: id
in: path
description: The unique identifier of the ACH transfer
required: true
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/ACHResponse'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/payments/book:
post:
operationId: createBook
summary: Create a book transfer
description: 'Permissions required: **Fiat Banking**
Create a new book transfer between two internal accounts.'
parameters:
- name: Api-Signature
in: header
description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BookCreateRequest'
responses:
'201':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/BookCreateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'413':
description: Payload Too Large
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
get:
operationId: listBookTransfers
summary: List book transfers
description: 'Permissions required: **Fiat Banking**
Retrieve a paginated list of book transfers.'
parameters:
- name: first
in: query
description: Maximum number of results to return per query
schema:
type: integer
format: int64
default: 25
maximum: 100
minimum: 1
- name: after
in: query
description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
schema:
type: string
- name: clientRefId
in: query
description: Filter by client reference ID
required: false
schema:
type: string
- name: effectiveDateStart
in: query
description: 'Filter payments with an effective date on or after this date (inclusive). Format: YYYY-MM-DD.'
required: false
schema:
type: string
format: date
- name: effectiveDateEnd
in: query
description: 'Filter payments with an effective date on or before this date (inclusive). Format: YYYY-MM-DD.'
required: false
schema:
type: string
format: date
- name: createdAtStart
in: query
description: 'Filter payments created at or after this datetime (inclusive). Format: RFC 3339 date-time.'
required: false
schema:
type: string
format: date-time
- name: createdAtEnd
in: query
description: 'Filter payments created at or before this datetime (inclusive). Format: RFC 3339 date-time.'
required: false
schema:
type: string
format: date-time
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/ListBookTransfersResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/payments/book/{id}:
get:
operationId: getBook
summary: Get a book transfer
description: 'Permissions required: **Fiat Banking**
Retrieve details of a specific book transfer by ID.'
parameters:
- name: id
in: path
description: The unique identifier of the book transfer
required: true
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/BookResponse'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/transactions:
post:
operationId: createIncomingTransaction
summary: Create an incoming transaction
description: 'Permissions required: **Fiat Banking**
Create an incoming payment transaction to an internal account.
**IMPORTANT:** This endpoint is designed for testing and simulation in non-production
environments only. It allows you to simulate incoming fiat payments for integration
testing purposes.
This endpoint simulates receiving funds by creating a transaction that credits the
specified account. It triggers webhooks for full end-to-end testing of incoming
payment flows.'
parameters:
- name: Api-Signature
in: header
description: 'A hex-encoded Ed25519 signature of `timestamp_epoch_seconds +
uppercase(http_method) + request_path + request_body`.'
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionCreateRequest'
responses:
'201':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionCreateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/virtual-account-owners:
post:
operationId: createVirtualAccountOwner
summary: Create a virtual account owner
description: 'Permissions required: **Fiat Banking**
Create a new virtual account owner to collect KYC information required by some banks.'
parameters:
- name: Api-Signature
in: header
description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountOwnerCreateRequest'
responses:
'201':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountOwnerCreateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/virtual-account-owners/{id}:
get:
operationId: getVirtualAccountOwner
summary: Get a bank virtual account owner
description: 'Permissions required: **Fiat Banking**
Retrieve details of a specific virtual account owner by ID.'
parameters:
- name: id
in: path
description: The unique identifier of the virtual account owner
required: true
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountOwnerGetResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
put:
operationId: updateVirtualAccountOwner
summary: Update a virtual account owner
description: 'Permissions required: **Fiat Banking**
Update details of a specific virtual account owner. All fields are optional - only provided fields will be updated.'
parameters:
- name: id
in: path
description: The unique identifier of the virtual account owner
required: true
schema:
type: string
- name: Api-Signature
in: header
description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountOwnerUpdateRequest'
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountOwnerGetResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/virtual-accounts:
post:
operationId: createVirtualAccount
summary: Create a bank virtual account
description: 'Permissions required: **Fiat Banking**
Create a new virtual account for sending or receiving funds.
**Note:** For certain banks, a Virtual Account Owner must be created first to collect KYC information using the Create Virtual Account Owner,
and returned ID included in this endpoint. Please contact Anchorage Digital about requirements for your specific correspondent bank.'
parameters:
- name: Api-Signature
in: header
description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountCreateRequest'
responses:
'201':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountCreateResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'413':
description: Payload Too Large
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/virtual-accounts/{id}:
get:
operationId: getVirtualAccount
summary: Get a bank virtual account
description: 'Permissions required: **Fiat Banking**
Retrieve details of a specific virtual account by ID.'
parameters:
- name: id
in: path
description: The unique identifier of the virtual account
required: true
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountGetResponse'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
delete:
operationId: deleteVirtualAccount
summary: Close a bank virtual account
description: 'Permissions required: **Fiat Banking**
Close a virtual account. Once closed, the account cannot be reopened or used for transactions.
The closed account can still be retrieved via GET to view its details including the closure timestamp.'
parameters:
- name: id
in: path
description: The unique identifier of the virtual account
required: true
schema:
type: string
- name: Api-Signature
in: header
description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
required: true
schema:
type: string
pattern: ^[0-9A-Fa-f]{128,160}$
- name: Api-Timestamp
in: header
description: Current timestamp, represented as unix epoch seconds
required: true
schema:
type: integer
format: int64
- name: Idempotency-Key
in: header
description: Client-provided idempotency key to ensure request is processed only once
required: true
schema:
type: string
maxLength: 128
responses:
'200':
description: Virtual account successfully closed
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountGetResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
/fiat/banks/balance/{id}:
get:
operationId: getBalance
summary: Get account balance
description: 'Permissions required: **Fiat Banking**
Retrieve the current balance for a specific account by ID.'
parameters:
- name: id
in: path
description: The unique identifier of the account
required: true
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/BalanceResponse'
'401':
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDetails'
tags:
- Fiat Banking Operations
components:
schemas:
PaymentStatus:
description: 'Status of a payment (wire, ACH, or book transfer). Payments flow through the following lifecycle:
* `APPROVED` - The payment order has been approved and will be sent to the bank
* `PROCESSING` - Brief transition state while the payment is prepared for bank submission
* `SENT` - The payment order has been sent to the bank (may remain for a few days depending on payment type)
* `COMPLETED` - The bank has accepted and executed the payment; funds posted to recipient''s ledger
* `RETURNED` - The payment was returned by the receiving bank (see associated Return object)
* `FAILED` - Bank error or invalid parameters caused the payment to fail
* `CANCELLED` - Terminal state - the payment order was cancelled
* `OTHER` - Unexpected status received from the banking provider'
type: string
enum:
- APPROVED
- PROCESSING
- SENT
- COMPLETED
- RETURNED
- FAILED
- CANCELLED
- OTHER
WireResponse:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
clientRefId:
description: A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.
type: string
createdAt:
description: Timestamp when the wire transfer was created
type: string
format: date-time
id:
description: Unique identifier for the wire transfer
type: string
imad:
description: Fedwire Input Message Accountability Data (IMAD) reference (when available)
type: string
omad:
description: Fedwire Output Message Accountability Data (OMAD) reference (when available)
type: string
originatingAccountId:
description: Unique identifier of the originating account
type: string
receivingAccount:
$ref: '#/components/schemas/WireReceivingAccount'
returnInfo:
description: Return information if the wire was returned by the receiving bank
type: object
allOf:
- $ref: '#/components/schemas/PaymentReturnInfo'
nullable: true
status:
$ref: '#/components/schemas/PaymentStatus'
swiftMir:
description: SWIFT Message Identifier Reference (MIR) - unique identifier for SWIFT messages (when available)
type: string
swiftUetr:
description: SWIFT Unique End-to-End Transaction Reference (UETR) - tracks payment lifecycle (when available)
type: string
required:
- id
- originatingAccountId
- receivingAccount
- amount
- clientRefId
- status
- createdAt
BNYIndividual:
type: object
properties:
firstName:
description: Individual's first name.
type: string
lastName:
description: Individual's last name.
type: string
middleName:
description: Individual's middle name.
type: string
type:
description: Discriminator field indicating individual entity type
type: string
default: INDIVIDUAL
enum:
- INDIVIDUAL
required:
- type
- firstName
- lastName
title: BNY Individual
ACHRoutingDetails:
type: object
properties:
routingNumber:
description: Bank routing number (ABA routing number for US banks)
type: string
routingNumberType:
description: Type of routing number. ACH transfers only support ABA routing numbers.
type: string
default: ABA
enum:
- ABA
required:
- routingNumber
- routingNumberType
title: ACH Routing Details
WireRoutingDetails:
type: object
properties:
routingNumber:
description: Bank routing number (e.g., ABA routing number for US banks)
type: string
routingNumberType:
description: Type of routing number. ABA routing numbers are 9-digit codes used for US domestic bank transfers. SWIFT codes (also called BIC) are 8 or 11 character codes used for international wire transfers.
type: string
enum:
- ABA
- SWIFT
required:
- routingNumber
- routingNumberType
title: Wire Routing Details
VirtualAccountOwnerGetResponse:
type: object
properties:
addressCity:
description: Address city.
type: string
addressCountry:
description: Address country code. Two letters from the ISO 3166-1 alpha-2 standard.
type: string
addressLine1:
description: Address line 1.
type: string
addressLine2:
description: Address line 2. Optional.
type: string
addressPostalCode:
description: Address postal or zip code. Cannot contain dash or space characters.
type: string
addressState:
description: Address state or region.
type: string
bankCode:
description: Bank this virtual account owner is for. Currently only `CRB` for Cross River Bank requires virtual account owners.
type: string
enum:
- CRB
createdAt:
type: string
format: date-time
discardedAt:
type: string
format: date-time
nullable: true
id:
description: Unique identifier for the virtual account owner
type: string
liveMode:
description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
type: boolean
object:
type: string
ownerInfo:
discriminator:
propertyName: type
mapping:
INDIVIDUAL: '#/components/schemas/VirtualAccountOwnerIndividual'
BUSINESS: '#/components/schemas/VirtualAccountOwnerBusiness'
oneOf:
- $ref: '#/components/schemas/VirtualAccountOwnerIndividual'
- $ref: '#/components/schemas/VirtualAccountOwnerBusiness'
riskRating:
description: Can be `LOW`, `MEDIUM` or `HIGH`.
type: string
enum:
- LOW
- MEDIUM
- HIGH
taxId:
description: Must be 9-20 alphanumeric characters; cannot contain period, dash or space characters.
type: string
taxIdType:
description: Can be `SSN`, `EIN`, `ITIN`, `VAT` or `FOREIGN`.
type: string
enum:
- SSN
- EIN
- ITIN
- VAT
- FOREIGN
updatedAt:
type: string
format: date-time
required:
- id
- object
- liveMode
- createdAt
- updatedAt
- discardedAt
- bankCode
- ownerInfo
- taxIdType
- taxId
- addressLine1
- addressCity
- addressState
- addressPostalCode
- addressCountry
ACHCreateResponse:
type: object
properties:
id:
description: Unique identifier for the ACH transfer
type: string
required:
- id
ACHType:
description: Type of ACH transaction - CREDIT for funds moving into an account, DEBIT for funds moving out of an account.
type: string
enum:
- CREDIT
- DEBIT
ListACHTransfersResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ACHResponse'
page:
$ref: '#/components/schemas/Page'
required:
- data
- page
Page:
description: Pagination info
type: object
properties:
endCursor:
description: Submit this parameter in the "after" field to fetch the next page.
type: string
nullable: true
title: Page
VirtualAccountOwnerCreateResponse:
type: object
properties:
id:
description: Unique identifier for the virtual account owner
type: string
required:
- id
AccountDetails:
type: object
properties:
accountNumber:
description: Bank account number
type: string
required:
- accountNumber
title: Account Details
PaymentAmount:
type: object
properties:
amount:
description: Payment amount in cents
type: integer
example: 10000
currency:
description: Currency code (e.g., USD)
type: string
example: USD
required:
- currency
- amount
BalanceObject:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
asOfTime:
description: The date and time when this balance became true for the account.
type: string
format: date-time
type:
$ref: '#/components/schemas/BalanceType'
required:
- type
- amount
- asOfTime
WireCreateRequest:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
clientRefId:
description: A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.
type: string
originatingAccountId:
description: Unique identifier of the originating account
type: string
receivingAccount:
$ref: '#/components/schemas/WireReceivingAccount'
required:
- originatingAccountId
- receivingAccount
- amount
- clientRefId
ListWiresResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/WireResponse'
page:
$ref: '#/components/schemas/Page'
required:
- data
- page
BookCreateResponse:
type: object
properties:
id:
description: Unique identifier for the book transfer
type: string
required:
- id
BookCreateRequest:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
clientRefId:
description: A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.
type: string
originatingAccountId:
description: Unique identifier of the originating internal account
type: string
receivingAccountId:
description: Unique identifier of the receiving internal account
type: string
required:
- originatingAccountId
- receivingAccountId
- amount
- clientRefId
TransactionCreateResponse:
type: object
properties:
id:
description: Unique identifier for the transaction
type: string
required:
- id
BalanceResponse:
type: object
properties:
accountId:
description: Unique identifier of the account
type: string
balances:
description: Array of balance objects. Partner banks return different balance types (current, closing, opening, ledger vs available).
type: array
items:
$ref: '#/components/schemas/BalanceObject'
required:
- accountId
- balances
CRBBankInfoResponse:
type: object
properties:
bankCode:
description: Discriminator field indicating Cross River Bank
type: string
default: CRB
enum:
- CRB
partyAddress:
$ref: '#/components/schemas/PartyAddress'
partyName:
description: Party name for this virtual account.
type: string
virtualAccountOwnerId:
description: Virtual account owner ID (legal entity ID) associated with this virtual account.
type: string
nullable: true
required:
- bankCode
- partyName
title: CRB Bank Information Response
VirtualAccountCreateRequest:
type: object
properties:
bankKycInfo:
description: Bank-specific KYC information for this virtual account.
discriminator:
propertyName: bankCode
mapping:
BNY: '#/components/schemas/BNYBankInfo'
CRB: '#/components/schemas/CRBBankInfo'
oneOf:
- $ref: '#/components/schemas/BNYBankInfo'
- $ref: '#/components/schemas/CRBBankInfo'
currency:
description: Currency code for permitted currency with this virtual account.
type: string
enum:
- USD
parentAccountId:
description: The parent internal account ID at the bank provider. This is the main account under which this virtual account will be created.
type: string
required:
- bankKycInfo
- currency
- parentAccountId
ACHCreateRequest:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
clientRefId:
description: A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.
type: string
originatingAccountId:
description: Unique identifier of the originating account
type: string
receivingAccount:
$ref: '#/components/schemas/ACHReceivingAccount'
subtype:
$ref: '#/components/schemas/ACHSubtype'
type:
$ref: '#/components/schemas/ACHType'
required:
- originatingAccountId
- receivingAccount
- amount
- type
- subtype
- clientRefId
VirtualAccountCreateResponse:
type: object
properties:
id:
description: Unique identifier for the virtual account
type: string
required:
- id
ACHSubtype:
description: SEC (Standard Entry Class) code for ACH transactions.
type: string
enum:
- WEB
- CCD
VirtualAccountStatus:
description: 'Status of a virtual account (internal account). Virtual accounts can be in the following states:
* `ACTIVE` - Account is open and operational for payments
* `CLOSED` - Account has been successfully closed
* `PENDING_CLOSURE` - Account closure has been requested and is being processed
* `OTHER` - Unexpected status received from the banking provider'
type: string
enum:
- ACTIVE
- CLOSED
- PENDING_CLOSURE
- OTHER
PartyAddress:
description: Physical address of a party
type: object
properties:
country:
description: Country code (e.g., US)
type: string
line1:
description: Street address line 1
type: string
line2:
description: Street address line 2 (optional)
type: string
nullable: true
locality:
description: City or locality
type: string
postalCode:
description: Postal code or ZIP code
type: string
region:
description: State or region
type: string
required:
- line1
- locality
- region
- postalCode
- country
title: Party Address
WireCreateResponse:
type: object
properties:
id:
description: Unique identifier for the wire transfer
type: string
required:
- id
ACHReceivingAccount:
type: object
properties:
achInstructions:
discriminator:
propertyName: type
mapping:
PLAID: '#/components/schemas/ACHPlaidToken'
BANK: '#/components/schemas/ACHBankInstructions'
oneOf:
- $ref: '#/components/schemas/ACHPlaidToken'
- $ref: '#/components/schemas/ACHBankInstructions'
required:
- achInstructions
title: ACH Instructions
VirtualAccountOwnerUpdateRequest:
type: object
properties:
addressCity:
description: Address city.
type: string
addressCountry:
description: Address country code. Two letters from the ISO 3166-1 alpha-2 standard.
type: string
maxLength: 2
minLength: 2
pattern: ^[A-Z]{2}$
addressLine1:
description: Address line 1.
type: string
addressLine2:
description: Address line 2. Optional.
type: string
addressPostalCode:
description: Address postal or zip code. Cannot contain dash or space characters.
type: string
maxLength: 10
pattern: ^[A-Za-z0-9]+$
addressState:
description: Address state or region.
type: string
bankCode:
description: Bank this virtual account owner is for. Currently only `CRB` for Cross River Bank requires virtual account owners.
type: string
enum:
- CRB
ownerInfo:
discriminator:
propertyName: type
mapping:
INDIVIDUAL: '#/components/schemas/VirtualAccountOwnerIndividual'
BUSINESS: '#/components/schemas/VirtualAccountOwnerBusiness'
oneOf:
- $ref: '#/components/schemas/VirtualAccountOwnerIndividual'
- $ref: '#/components/schemas/VirtualAccountOwnerBusiness'
riskRating:
description: Can be `LOW`, `MEDIUM` or `HIGH`.
type: string
enum:
- LOW
- MEDIUM
- HIGH
taxId:
description: Must be 9-20 alphanumeric characters; cannot contain period, dash or space characters.
type: string
maxLength: 20
minLength: 9
pattern: ^[A-Za-z0-9]+$
taxIdType:
description: Can be `SSN`, `EIN`, `ITIN`, `VAT` or `FOREIGN`.
type: string
enum:
- SSN
- EIN
- ITIN
- VAT
- FOREIGN
BNYBankInfo:
type: object
properties:
bankCode:
description: Discriminator field indicating Bank of New York Mellon
type: string
default: BNY
enum:
- BNY
entityInfo:
discriminator:
propertyName: type
mapping:
INDIVIDUAL: '#/components/schemas/BNYIndividual'
BUSINESS: '#/components/schemas/BNYBusiness'
oneOf:
- $ref: '#/components/schemas/BNYIndividual'
- $ref: '#/components/schemas/BNYBusiness'
partyAddress:
$ref: '#/components/schemas/PartyAddress'
partyName:
description: Party name for this virtual account. If not provided, it will be populated automatically from the entityInfo fields.
type: string
required:
- bankCode
- entityInfo
title: BNY Bank Information
PaymentReturnInfo:
type: object
properties:
code:
description: Return code indicating the reason for the return (e.g., 'R01', 'C01')
type: string
reason:
description: Human-readable description of the return reason
type: string
required:
- code
- reason
ACHResponse:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
clientRefId:
description: A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.
type: string
createdAt:
description: Timestamp when the ACH transfer was created
type: string
format: date-time
id:
description: Unique identifier for the ACH transfer
type: string
originatingAccountId:
description: Unique identifier of the originating account
type: string
receivingAccount:
$ref: '#/components/schemas/ACHReceivingAccount'
returnInfo:
description: Return information if the ACH payment was returned
type: object
allOf:
- $ref: '#/components/schemas/PaymentReturnInfo'
nullable: true
status:
$ref: '#/components/schemas/PaymentStatus'
subtype:
$ref: '#/components/schemas/ACHSubtype'
type:
$ref: '#/components/schemas/ACHType'
required:
- id
- originatingAccountId
- receivingAccount
- amount
- type
- subtype
- clientRefId
- status
- createdAt
ErrorDetails:
type: object
properties:
message:
description: A human-readable message providing more details about the error.
type: string
example: Missing required field 'amount'.
required:
- message
title: ErrorDetails
ListBookTransfersResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/BookResponse'
page:
$ref: '#/components/schemas/Page'
required:
- data
- page
ACHBankInstructions:
type: object
properties:
accountDetails:
$ref: '#/components/schemas/AccountDetails'
partyName:
description: Name of the account holder or beneficiary
type: string
routingDetails:
$ref: '#/components/schemas/ACHRoutingDetails'
type:
description: Discriminator field indicating bank account type
type: string
default: BANK
enum:
- BANK
required:
- type
- partyName
- accountDetails
- routingDetails
title: ACH Bank Instructions
BalanceType:
description: Balance type returned from partner banks indicating the nature and timing of the balance.
type: string
enum:
- CLOSING_AVAILABLE
- CLOSING_LEDGER
- CURRENT_AVAILABLE
- CURRENT_LEDGER
- OPENING_AVAILABLE
- OPENING_AVAILABLE_NEXT_BUSINESS_DAY
- OPENING_LEDGER
- OTHER
- PREVIOUSLY_CLOSED_BOOK
VirtualAccountOwnerIndividual:
type: object
properties:
dateOfBirth:
description: Individual's birth date in the form YYYY-MM-DD.
type: string
format: date
firstName:
description: Individual's first name.
type: string
lastName:
description: Individual's last name.
type: string
middleName:
description: Individual's middle name.
type: string
politicallyExposedPerson:
description: Whether the individual is a politically exposed person.
type: boolean
regulationO:
description: Pertains to loans issued to executive officers, directors, and principal shareholders of member banks.
type: boolean
type:
description: Discriminator field indicating individual owner type
type: string
default: INDIVIDUAL
enum:
- INDIVIDUAL
required:
- type
- firstName
- lastName
- dateOfBirth
title: Individual Owner
CRBBankInfo:
type: object
properties:
bankCode:
description: Discriminator field indicating Cross River Bank
type: string
default: CRB
enum:
- CRB
partyAddress:
$ref: '#/components/schemas/PartyAddress'
partyName:
description: Party name for this virtual account.
type: string
virtualAccountOwnerId:
description: Virtual account owner ID required by this bank.
type: string
required:
- bankCode
- partyName
- partyAddress
- virtualAccountOwnerId
title: CRB Bank Information
WireReceivingAccount:
type: object
properties:
accountDetails:
$ref: '#/components/schemas/AccountDetails'
partyAddress:
description: Address of the account holder or beneficiary
type: object
properties:
country:
description: Country code (e.g., US)
type: string
line1:
description: Street address line 1
type: string
line2:
description: Street address line 2 (optional)
type: string
nullable: true
locality:
description: City or locality
type: string
postalCode:
description: Postal code or ZIP code
type: string
region:
description: State or region
type: string
required:
- line1
- locality
- region
- postalCode
- country
partyName:
description: Name of the account holder or beneficiary
type: string
routingDetails:
$ref: '#/components/schemas/WireRoutingDetails'
required:
- partyName
- partyAddress
- routingDetails
- accountDetails
title: Wire Instructions
ACHPlaidToken:
type: object
properties:
plaidProcessorToken:
description: Plaid processor token for the receiving account
type: string
type:
description: Discriminator field indicating Plaid token type
type: string
default: PLAID
enum:
- PLAID
required:
- type
- plaidProcessorToken
title: ACH Plaid Token
BNYBankInfoResponse:
type: object
properties:
bankCode:
description: Discriminator field indicating Bank of New York Mellon
type: string
default: BNY
enum:
- BNY
partyAddress:
$ref: '#/components/schemas/PartyAddress'
partyName:
description: 'Party name for this virtual account. Note: Individual name components (firstName, middleName, lastName) and business name are not returned as currently they cannot be changed after account creation.'
type: string
required:
- bankCode
- partyName
title: BNY Bank Information Response
VirtualAccountOwnerCreateRequest:
type: object
properties:
addressCity:
description: Address city.
type: string
addressCountry:
description: Address country code. Two letters from the ISO 3166-1 alpha-2 standard.
type: string
maxLength: 2
minLength: 2
pattern: ^[A-Z]{2}$
addressLine1:
description: Address line 1.
type: string
addressLine2:
description: Address line 2. Optional.
type: string
addressPostalCode:
description: Address postal or zip code. Cannot contain dash or space characters.
type: string
maxLength: 10
pattern: ^[A-Za-z0-9]+$
addressState:
description: Address state or region.
type: string
bankCode:
description: Bank this virtual account owner is for. Currently only `CRB` for Cross River Bank requires virtual account owners.
type: string
enum:
- CRB
ownerInfo:
discriminator:
propertyName: type
mapping:
INDIVIDUAL: '#/components/schemas/VirtualAccountOwnerIndividual'
BUSINESS: '#/components/schemas/VirtualAccountOwnerBusiness'
oneOf:
- $ref: '#/components/schemas/VirtualAccountOwnerIndividual'
- $ref: '#/components/schemas/VirtualAccountOwnerBusiness'
riskRating:
description: Can be `LOW`, `MEDIUM` or `HIGH`.
type: string
enum:
- LOW
- MEDIUM
- HIGH
taxId:
description: Must be 9-20 alphanumeric characters; cannot contain period, dash or space characters.
type: string
maxLength: 20
minLength: 9
pattern: ^[A-Za-z0-9]+$
taxIdType:
description: Can be `SSN`, `EIN`, `ITIN`, `VAT` or `FOREIGN`.
type: string
enum:
- SSN
- EIN
- ITIN
- VAT
- FOREIGN
required:
- bankCode
- ownerInfo
- taxIdType
- taxId
- addressLine1
- addressCity
- addressState
- addressPostalCode
- addressCountry
BNYBusiness:
type: object
properties:
businessName:
description: Business's name.
type: string
type:
description: Discriminator field indicating business entity type
type: string
default: BUSINESS
enum:
- BUSINESS
required:
- type
- businessName
title: BNY Business
BookResponse:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
clientRefId:
description: A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.
type: string
createdAt:
description: Timestamp when the book transfer was created
type: string
format: date-time
id:
description: Unique identifier for the book transfer
type: string
originatingAccountId:
description: Unique identifier of the originating internal account
type: string
receivingAccountId:
description: Unique identifier of the receiving internal account
type: string
returnInfo:
description: Return information if the book transfer was returned
type: object
allOf:
- $ref: '#/components/schemas/PaymentReturnInfo'
nullable: true
status:
$ref: '#/components/schemas/PaymentStatus'
required:
- id
- originatingAccountId
- receivingAccountId
- amount
- clientRefId
- status
- createdAt
VirtualAccountGetResponse:
type: object
properties:
accountDetails:
description: Bank account details. Contains the account number and account number type.
type: object
allOf:
- $ref: '#/components/schemas/AccountDetails'
nullable: true
achRoutingDetails:
description: ACH routing details for this virtual account. Contains the ABA routing number used for ACH transfers.
type: object
allOf:
- $ref: '#/components/schemas/ACHRoutingDetails'
nullable: true
bankKycInfo:
description: 'Bank-specific KYC information for this virtual account. Note: Only fields returned by the applicable bank (bankCode and partyName) are included.'
discriminator:
propertyName: bankCode
mapping:
BNY: '#/components/schemas/BNYBankInfoResponse'
CRB: '#/components/schemas/CRBBankInfoResponse'
oneOf:
- $ref: '#/components/schemas/BNYBankInfoResponse'
- $ref: '#/components/schemas/CRBBankInfoResponse'
bankName:
description: Name of the financial institution. This field is specific to virtual accounts and not part of the standard routing schemas.
type: string
nullable: true
createdAt:
type: string
format: date-time
currency:
description: Currency code for permitted currency with this virtual account.
type: string
enum:
- USD
id:
description: Unique identifier for the virtual account
type: string
liveMode:
description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
type: boolean
object:
type: string
parentAccountId:
description: The parent internal account ID at the bank provider. This is the main account under which this virtual account was created.
type: string
nullable: true
status:
$ref: '#/components/schemas/VirtualAccountStatus'
updatedAt:
type: string
format: date-time
wireRoutingDetails:
description: Wire routing details for this virtual account. Contains the routing number (ABA or SWIFT) used for wire transfers. If routingNumberType is SWIFT, the routingNumber field contains the SWIFT code. If routingNumberType is ABA, the routingNumber may differ from the ACH routing number.
type: object
allOf:
- $ref: '#/components/schemas/WireRoutingDetails'
nullable: true
required:
- id
- object
- liveMode
- createdAt
- updatedAt
- status
- bankKycInfo
- currency
TransactionCreateRequest:
type: object
properties:
amount:
$ref: '#/components/schemas/PaymentAmount'
asOfDate:
description: Date the transaction settled, in YYYY-MM-DD format
type: string
format: date
direction:
description: Direction of the transaction. Use 'credit' for incoming (deposit) and 'debit' for outgoing.
type: string
enum:
- credit
- debit
internalAccountId:
description: Unique identifier of the internal account to credit
type: string
posted:
description: Whether the transaction has posted
type: boolean
type:
description: Type of incoming transaction
type: string
enum:
- ACH
- WIRE
vendorCode:
description: Bank-specific code for the transaction
type: string
vendorCodeType:
description: The type of vendor_code being reported. Required if type is not provided.
type: string
vendorDescription:
description: Optional description for the transaction
type: string
required:
- internalAccountId
- amount
- direction
- asOfDate
- posted
VirtualAccountOwnerBusiness:
type: object
properties:
businessName:
description: Business's name.
type: string
dateOfFormation:
description: Business's formation date in the form YYYY-MM-DD.
type: string
format: date
type:
description: Discriminator field indicating business owner type
type: string
default: BUSINESS
enum:
- BUSINESS
required:
- type
- businessName
- dateOfFormation
title: Business Owner
securitySchemes:
Api-Access-Key:
type: apiKey
name: Api-Access-Key
in: header
description: An API key associated with a security role
x-tagGroups:
- name: Under Development
tags:
- Collateral Management
- Holds
- Deposit Attribution
- Onboarding
- Trusted Destinations
- Atlas Settlement Network
- Tax
- name: API Endpoints
tags:
- Addresses
- Asset Types
- Transactions
- Transfers
- Wallets
- Vaults
- Vesting
- Tagging
- Subaccounts
- Stablecoins
- Webhook Notifications
- API Key
- Statements
- Tax Reporting
- Trading
- name: Models
tags:
- Transfer Model
- Transaction Model
- Vault Model
- Deposit Attribution Model