Modern Treasury VirtualAccount API
The VirtualAccount API from Modern Treasury — 2 operation(s) for virtualaccount.
The VirtualAccount API from Modern Treasury — 2 operation(s) for virtualaccount.
openapi: 3.0.1
info:
title: Modern Treasury AccountCapability VirtualAccount API
version: v1
contact:
name: Modern Treasury Engineering Team
url: https://moderntreasury.com
description: The Modern Treasury REST API. Please see https://docs.moderntreasury.com for more details.
servers:
- url: http://localhost:3000
- url: https://app.moderntreasury.com
tags:
- name: VirtualAccount
paths:
/api/virtual_accounts:
get:
summary: list virtual_accounts
tags:
- VirtualAccount
operationId: listVirtualAccounts
security:
- basic_auth: []
description: Get a list of virtual accounts.
parameters:
- name: after_cursor
in: query
schema:
type: string
nullable: true
required: false
- name: per_page
in: query
required: false
schema:
type: integer
- name: internal_account_id
in: query
schema:
type: string
required: false
- name: counterparty_id
in: query
schema:
type: string
required: false
- $ref: '#/components/parameters/metadata_query'
responses:
'200':
description: successful
headers:
X-After-Cursor:
schema:
type: string
nullable: true
required: false
description: The cursor for the next page. Including this in a call as `after_cursor` will return the next page.
X-Per-Page:
schema:
type: integer
nullable: true
description: The current `per_page`.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/virtual_account'
'401':
description: unsuccessful
content:
application/json:
schema:
$ref: '#/components/schemas/error_message'
post:
summary: create virtual_account
tags:
- VirtualAccount
operationId: createVirtualAccount
security:
- basic_auth: []
parameters:
- name: Idempotency-Key
in: header
required: false
description: This key should be something unique, preferably something like an UUID.
schema:
type: string
responses:
'201':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/virtual_account'
'401':
description: unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/error_message'
'422':
description: unsuccessful
content:
application/json:
schema:
$ref: '#/components/schemas/error_message'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/virtual_account_create_request'
/api/virtual_accounts/{id}:
parameters:
- name: id
in: path
schema:
type: string
required: true
description: Virtual Acccount ID
get:
summary: get virtual_account
tags:
- VirtualAccount
operationId: getVirtualAccount
security:
- basic_auth: []
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/virtual_account'
'404':
description: not found
content:
application/json:
schema:
$ref: '#/components/schemas/error_message'
patch:
summary: update virtual_account
tags:
- VirtualAccount
operationId: updateVirtualAccount
security:
- basic_auth: []
parameters: []
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/virtual_account'
'422':
description: unsuccessful
content:
application/json:
schema:
$ref: '#/components/schemas/error_message'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/virtual_account_update_request'
delete:
summary: delete virtual_account
tags:
- VirtualAccount
operationId: deleteVirtualAccount
security:
- basic_auth: []
responses:
'200':
description: successful
content:
application/json:
schema:
$ref: '#/components/schemas/virtual_account'
components:
schemas:
address:
type: object
properties:
id:
type: string
format: uuid
object:
type: string
live_mode:
type: boolean
description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
line1:
type: string
nullable: true
line2:
type: string
nullable: true
locality:
type: string
nullable: true
description: Locality or City.
region:
type: string
nullable: true
description: Region or State.
postal_code:
type: string
description: The postal code of the address.
nullable: true
country:
type: string
description: Country code conforms to [ISO 3166-1 alpha-2]
nullable: true
nullable: true
additionalProperties: false
minProperties: 11
required:
- id
- object
- live_mode
- created_at
- updated_at
- line1
- line2
- locality
- region
- postal_code
- country
account_detail:
type: object
properties:
id:
type: string
format: uuid
object:
type: string
live_mode:
type: boolean
description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
discarded_at:
type: string
format: date-time
nullable: true
account_number:
type: string
description: The account number for the bank account.
account_number_type:
type: string
enum:
- au_number
- base_address
- card_token
- clabe
- ethereum_address
- hk_number
- iban
- id_number
- nz_number
- other
- pan
- polygon_address
- sg_number
- solana_address
- wallet_address
description: One of `iban`, `clabe`, `wallet_address`, or `other`. Use `other` if the bank account number is in a generic format.
account_number_safe:
type: string
description: The last 4 digits of the account_number.
additionalProperties: false
minProperties: 8
maxProperties: 9
required:
- id
- object
- live_mode
- created_at
- updated_at
- discarded_at
- account_number_type
- account_number_safe
virtual_account_create_request:
type: object
properties:
name:
type: string
description: The name of the virtual account.
description:
type: string
description: An optional description for internal use.
counterparty_id:
type: string
format: uuid
description: The ID of the counterparty that the virtual account belongs to.
internal_account_id:
type: string
format: uuid
description: The ID of the internal account that this virtual account is associated with.
account_details:
type: array
items:
$ref: '#/components/schemas/account_detail_create_request'
description: An array of account detail objects.
routing_details:
type: array
items:
$ref: '#/components/schemas/routing_detail_create_request'
description: An array of routing detail objects.
debit_ledger_account_id:
type: string
format: uuid
description: The ID of a debit normal ledger account. When money enters the virtual account, this ledger account will be debited. Must be accompanied by a credit_ledger_account_id if present.
credit_ledger_account_id:
type: string
format: uuid
description: The ID of a credit normal ledger account. When money leaves the virtual account, this ledger account will be credited. Must be accompanied by a debit_ledger_account_id if present.
ledger_account:
$ref: '#/components/schemas/ledger_account_create_request'
description: Specifies a ledger account object that will be created with the virtual account. The resulting ledger account is linked to the virtual account for auto-ledgering IPDs.
metadata:
type: object
description: Additional data represented as key-value pairs. Both the key and value must be strings.
additionalProperties:
type: string
required:
- name
- internal_account_id
account_detail_create_request:
type: object
properties:
account_number:
type: string
description: The account number for the bank account.
account_number_type:
type: string
enum:
- au_number
- base_address
- card_token
- clabe
- ethereum_address
- hk_number
- iban
- id_number
- nz_number
- other
- pan
- polygon_address
- sg_number
- solana_address
- wallet_address
description: One of `iban`, `clabe`, `wallet_address`, or `other`. Use `other` if the bank account number is in a generic format.
required:
- account_number
virtual_account:
type: object
properties:
id:
type: string
format: uuid
object:
type: string
live_mode:
type: boolean
description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
discarded_at:
type: string
format: date-time
nullable: true
name:
type: string
description: The name of the virtual account.
description:
type: string
description: An optional free-form description for internal use.
nullable: true
counterparty_id:
type: string
format: uuid
description: The ID of a counterparty that the virtual account belongs to. Optional.
nullable: true
internal_account_id:
type: string
format: uuid
description: The ID of the internal account that the virtual account is in.
account_details:
type: array
description: An array of account detail objects.
items:
$ref: '#/components/schemas/account_detail'
routing_details:
type: array
description: An array of routing detail objects. These will be the routing details of the internal account.
items:
$ref: '#/components/schemas/routing_detail'
debit_ledger_account_id:
type: string
format: uuid
description: The ID of a debit normal ledger account. When money enters the virtual account, this ledger account will be debited. Must be accompanied by a credit_ledger_account_id if present.
nullable: true
credit_ledger_account_id:
type: string
format: uuid
description: The ID of a credit normal ledger account. When money enters the virtual account, this ledger account will be credited. Must be accompanied by a debit_ledger_account_id if present.
nullable: true
ledger_account_id:
type: string
format: uuid
nullable: true
description: If the virtual account links to a ledger account in Modern Treasury, the id of the ledger account will be populated here.
metadata:
type: object
description: Additional data represented as key-value pairs. Both the key and value must be strings.
additionalProperties:
type: string
example:
key: value
foo: bar
modern: treasury
additionalProperties: false
minProperties: 16
required:
- id
- object
- live_mode
- created_at
- updated_at
- discarded_at
- name
- description
- counterparty_id
- internal_account_id
- account_details
- routing_details
- debit_ledger_account_id
- credit_ledger_account_id
- ledger_account_id
- metadata
ledger_account_create_request:
type: object
properties:
name:
type: string
description: The name of the ledger account.
description:
type: string
description: The description of the ledger account.
nullable: true
normal_balance:
type: string
enum:
- credit
- debit
description: The normal balance of the ledger account.
_x-stainless-modelDefPath: $shared.transaction_direction
ledger_id:
type: string
format: uuid
description: The id of the ledger that this account belongs to.
currency:
type: string
description: The currency of the ledger account.
currency_exponent:
type: integer
description: The currency exponent of the ledger account.
nullable: true
ledger_account_category_ids:
type: array
items:
type: string
format: uuid
description: The array of ledger account category ids that this ledger account should be a child of.
ledgerable_id:
type: string
format: uuid
description: If the ledger account links to another object in Modern Treasury, the id will be populated here, otherwise null.
ledgerable_type:
type: string
enum:
- counterparty
- external_account
- internal_account
- virtual_account
description: If the ledger account links to another object in Modern Treasury, the type will be populated here, otherwise null. The value is one of internal_account or external_account.
metadata:
type: object
description: Additional data represented as key-value pairs. Both the key and value must be strings.
additionalProperties:
type: string
example:
key: value
foo: bar
modern: treasury
external_id:
type: string
nullable: true
description: An optional user-defined 180 character unique identifier.
required:
- name
- normal_balance
- ledger_id
- currency
error_message:
type: object
properties:
errors:
type: object
properties:
code:
type: string
enum:
- parameter_invalid
- parameter_missing
- resource_not_found
- not_found
- forbidden
- invalid_ip
- invalid_key
- header_invalid
- expired_key
- conflict
- too_many_requests
message:
type: string
parameter:
type: string
required:
- errors
routing_detail_create_request:
type: object
properties:
routing_number:
type: string
description: The routing number of the bank.
routing_number_type:
type: string
enum:
- aba
- au_bsb
- br_codigo
- ca_cpa
- chips
- cnaps
- dk_interbank_clearing_code
- gb_sort_code
- hk_interbank_clearing_code
- hu_interbank_clearing_code
- id_sknbi_code
- il_bank_code
- in_ifsc
- jp_zengin_code
- mx_bank_identifier
- my_branch_code
- nz_national_clearing_code
- pl_national_clearing_code
- se_bankgiro_clearing_code
- sg_interbank_clearing_code
- swift
- za_national_clearing_code
description: The type of routing number. See https://docs.moderntreasury.com/platform/reference/routing-detail-object for more details.
payment_type:
type: string
enum:
- ach
- au_becs
- bacs
- book
- card
- chats
- check
- cross_border
- dk_nets
- eft
- gb_fps
- hu_ics
- interac
- masav
- mx_ccen
- neft
- nics
- nz_becs
- pl_elixir
- provxchange
- ro_sent
- rtp
- se_bankgirot
- sen
- sepa
- sg_giro
- sic
- signet
- sknbi
- stablecoin
- wire
- zengin
nullable: true
description: If the routing detail is to be used for a specific payment type this field will be populated, otherwise null.
required:
- routing_number
- routing_number_type
routing_detail:
type: object
properties:
id:
type: string
format: uuid
object:
type: string
live_mode:
type: boolean
description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
discarded_at:
type: string
format: date-time
nullable: true
routing_number:
type: string
description: The routing number of the bank.
routing_number_type:
type: string
enum:
- aba
- au_bsb
- br_codigo
- ca_cpa
- chips
- cnaps
- dk_interbank_clearing_code
- gb_sort_code
- hk_interbank_clearing_code
- hu_interbank_clearing_code
- id_sknbi_code
- il_bank_code
- in_ifsc
- jp_zengin_code
- mx_bank_identifier
- my_branch_code
- nz_national_clearing_code
- pl_national_clearing_code
- se_bankgiro_clearing_code
- sg_interbank_clearing_code
- swift
- za_national_clearing_code
description: The type of routing number. See https://docs.moderntreasury.com/platform/reference/routing-detail-object for more details.
payment_type:
type: string
enum:
- ach
- au_becs
- bacs
- book
- card
- chats
- check
- cross_border
- dk_nets
- eft
- gb_fps
- hu_ics
- interac
- masav
- mx_ccen
- neft
- nics
- nz_becs
- pl_elixir
- provxchange
- ro_sent
- rtp
- se_bankgirot
- sen
- sepa
- sg_giro
- sic
- signet
- sknbi
- stablecoin
- wire
- zengin
nullable: true
description: If the routing detail is to be used for a specific payment type this field will be populated, otherwise null.
bank_name:
type: string
description: The name of the bank.
bank_address:
$ref: '#/components/schemas/address'
additionalProperties: false
minProperties: 11
required:
- id
- object
- live_mode
- created_at
- updated_at
- discarded_at
- routing_number
- routing_number_type
- payment_type
- bank_name
- bank_address
virtual_account_update_request:
type: object
properties:
name:
type: string
nullable: true
counterparty_id:
type: string
format: uuid
ledger_account_id:
type: string
format: uuid
description: The ledger account that you'd like to link to the virtual account.
metadata:
type: object
additionalProperties:
type: string
parameters:
metadata_query:
name: metadata
in: query
schema:
type: object
additionalProperties:
type: string
style: deepObject
explode: true
required: false
description: For example, if you want to query for records with metadata key `Type` and value `Loan`, the query would be `metadata%5BType%5D=Loan`. This encodes the query parameters.
securitySchemes:
basic_auth:
type: http
scheme: basic