Operations 4
Documentation
Documentation
https://docs.volt.io/implementation/volt-accounts
APIReference
https://docs.volt.io/api-reference/accounts
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/volt-io-accounts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Global Accounts API
version: 1.0.0
description: "## API idempotency \nEach `POST` request creating a resource (for example a transaction) requires to send a unique idempotency key. It is included in the `Idempotency-Key` HTTP header. Idempotency key helps prevent duplicates in your `POST` requests. We recommend using an **UUID** for the key, however you may use any other unique identifier you choose.\n\n#### Preventing duplicates \nIf we have already processed the request and you send a request using the same idempotency key, it will fail with an error, returning a ```409 Conflict``` response.\n\n## Case-sensitivity\nAll properties/keys within request's/response's payload are case-sensitive.\n\nHTTP headers' names are case-insensitive.\n\n## API base URL\n**Sandbox: [https://accounts.sandbox.volt.io]()**\n\n**Production: [https://accounts.volt.io]()**"
contact:
email: support@volt.io
name: Volt Support
url: https://www.volt.io/contact/
servers:
- url: https://accounts.sandbox.volt.io
description: Sandbox
- url: https://accounts.volt.io
description: Production
security:
- BearerAuth: []
tags:
- name: Accounts
description: Management of accounts.
paths:
/accounts:
get:
summary: List of accounts
operationId: get-accounts
tags:
- Accounts
parameters:
- $ref: '#/components/parameters/XVoltApiVersion'
- $ref: '#/components/parameters/LimitParam'
- $ref: '#/components/parameters/PageParam'
- in: query
name: currency[]
schema:
type: array
description: Filter by Currency.
items:
$ref: '#/components/schemas/CurrencyCode'
example:
- EUR
- in: query
name: active
description: Filter by Active.
schema:
type: boolean
responses:
'200':
description: Retrieve accounts list.
headers:
limit:
$ref: '#/components/headers/PaginationLimit'
page:
$ref: '#/components/headers/PaginationPage'
page-count:
$ref: '#/components/headers/PaginationPageCount'
total-items:
$ref: '#/components/headers/PaginationTotalItems'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AccountMinimalDetails'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'405':
$ref: '#/components/responses/405'
'406':
$ref: '#/components/responses/406'
'415':
$ref: '#/components/responses/415'
'422':
$ref: '#/components/responses/422'
'500':
$ref: '#/components/responses/500'
/accounts/{accountId}:
get:
tags:
- Accounts
summary: Get account details
operationId: get-account-details
parameters:
- $ref: '#/components/parameters/XVoltApiVersion'
- name: accountId
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the account.
responses:
'200':
description: Successful account details response.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountDetails'
example:
id: 7523a8d3-70a9-4448-822a-ba1a38e0b715
currency: EUR
identifications:
- iban: DE33500105173822933531
bic: ALBPPLPW
name: My EUR account
active: true
country: DK
balance:
available: 123
timestamp: '2023-10-16T16:52:37+00:00'
type: VOLT_ACCOUNT
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'406':
$ref: '#/components/responses/406'
'415':
$ref: '#/components/responses/415'
'422':
$ref: '#/components/responses/422'
'500':
$ref: '#/components/responses/500'
/accounts/{accountId}/close:
post:
tags:
- Accounts
summary: Close account
operationId: close-account
description: Immediately closes the specified account. A closed account cannot be reopened or used for further transactions. Only Named Accounts can be closed.
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
- $ref: '#/components/parameters/XVoltApiVersion'
- name: accountId
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the account to be closed.
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/AccountCloseRequest'
responses:
'200':
description: Account successfully closed.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'406':
$ref: '#/components/responses/406'
'409':
$ref: '#/components/responses/409'
'415':
$ref: '#/components/responses/415'
'422':
$ref: '#/components/responses/422'
'500':
$ref: '#/components/responses/500'
/accounts/{accountId}/beneficiaries:
get:
summary: List of transaction beneficiaries
operationId: get-account-beneficiaries
tags:
- Accounts
parameters:
- $ref: '#/components/parameters/XVoltApiVersion'
- $ref: '#/components/parameters/LimitParam'
- $ref: '#/components/parameters/PageParam'
- name: accountId
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the account
- in: query
name: iban
schema:
type: string
example: DE07500105176551562526
description: Filter by IBAN.
- in: query
name: sortCode
schema:
type: string
example: 12345678
description: Filter by SortCode number.
- in: query
name: accountNumber
schema:
type: string
example: 12345678
description: Filter by Account number.
- in: query
name: order[createdAt]
description: Sort order by createdAt field.
schema:
allOf:
- $ref: '#/components/schemas/SortOrder'
default: desc
responses:
'200':
description: List of account beneficiaries
headers:
limit:
$ref: '#/components/headers/PaginationLimit'
page:
$ref: '#/components/headers/PaginationPage'
page-count:
$ref: '#/components/headers/PaginationPageCount'
total-items:
$ref: '#/components/headers/PaginationTotalItems'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AccountBeneficiaryMinimalDetails'
example:
- name: John Doe
accountIdentifiers:
iban: DE07500105176551562526
swiftBic: '123456'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'406':
$ref: '#/components/responses/406'
'415':
$ref: '#/components/responses/415'
'422':
$ref: '#/components/responses/422'
'500':
$ref: '#/components/responses/500'
components:
schemas:
Error401Response:
type: object
description: Error response for HTTP 401 Unauthorized.
properties:
code:
type: string
description: Error code.
enum:
- UNAUTHORISED
message:
type: string
description: Error message.
required:
- code
- message
AccountStatusEnum:
type: string
description: The current status of the account.
enum:
- ACTIVE
- SUSPENDED
- CLOSED
Error403Response:
type: object
description: Error response for HTTP 403 Forbidden.
properties:
code:
type: string
description: Error code.
enum:
- ACCESS_DENIED
message:
type: string
description: Error message.
required:
- code
- message
AccountBeneficiaryMinimalDetails:
type: object
properties:
name:
type: string
description: Name of the beneficiary
example: John Doe
accountIdentifiers:
$ref: accounts-common.yaml#/components/schemas/AccountIdentifier
AccountBalance:
type: object
description: The account balance in minor units.
properties:
available:
type: integer
format: int64
timestamp:
type: string
format: date-time
AccountCloseRequest:
type: object
properties:
communication:
$ref: '#/components/schemas/Communication'
AccountHolderMinimalDetails:
type: object
required:
- entityId
- legalName
properties:
entityId:
$ref: '#/components/schemas/AccountHolderEntityId'
legalName:
type: string
description: Full name or legal entity name of the account holder as registered with the bank.
Error500Response:
type: object
description: Error response for HTTP 500 Internal Server Error.
properties:
code:
type: string
description: Error code.
enum:
- INTERNAL_SERVER_ERROR
message:
type: string
description: Error message.
required:
- code
- message
Communication:
type: object
properties:
notifications:
type: object
description: Settings for webhook notifications delivery.
properties:
url:
type: string
pattern: ^https?://[^ ]+$
description: URL where the notifications (webhooks) are going to be sent when the transaction status changes. This value will take precedence over Fuzebox configuration. Provide a value here only if you need to overwrite it. Note that a default notifications URL must be configured in Fuzebox for notifications to be delivered; if it is not configured, no notification will be sent even when this overwrite URL is provided.
example: https://mywebsite.com/webhooks
AccountDetails:
type: object
allOf:
- $ref: '#/components/schemas/AccountMinimalDetails'
- type: object
properties:
_links:
type: object
properties:
self:
$ref: '#/components/schemas/LinkObject'
AccountType:
type: string
enum:
- VOLT_ACCOUNT
- NAMED_ACCOUNT
- CONNECTED_ACCOUNT
Error422Response:
type: object
description: Error response for HTTP 422 Unprocessable Entity.
properties:
code:
type: string
description: Error code.
enum:
- VALIDATION_FAILURE
message:
type: string
description: Error message.
errors:
type: array
description: Field validation errors.
items:
$ref: '#/components/schemas/ValidationErrorDetail'
required:
- code
- message
- errors
AccountSubType:
type: string
enum:
- BUSINESS
- INDIVIDUAL
Error400Response:
type: object
description: Error response for HTTP 400 Bad Request.
properties:
code:
type: string
description: Error code.
enum:
- BAD_REQUEST
- INVALID_PATH_VARIABLE
- MISSING_HTTP_HEADER
- INVALID_HTTP_HEADER
- MALFORMED_PATH_PARAM
- MISSING_QUERY_PARAM
- INVALID_QUERY_PARAM
- MALFORMED_QUERY_PARAM
- CONFIGURATION_ERROR
message:
type: string
description: Error message.
required:
- code
- message
SortOrder:
description: Sorting direction
type: string
enum:
- asc
- desc
ValidationErrorType:
$ref: ./error-common.yaml#/components/schemas/ValidationErrorType
Identifications:
description: A list of one or more account identifiers.
type: array
items:
$ref: accounts-common.yaml#/components/schemas/AccountIdentifier
minItems: 1
Error409Response:
type: object
description: Error response for HTTP 409 Conflict.
properties:
code:
type: string
description: Error code.
enum:
- CONFLICT
- IDEMPOTENCY_CONFLICT
- RESOURCE_NOT_MODIFIABLE
message:
type: string
description: Error message.
required:
- code
- message
Error405Response:
type: object
description: HTTP method is not supported for this URL.
properties:
code:
type: string
description: Error code.
enum:
- METHOD_NOT_SUPPORTED
message:
type: string
description: Error message.
required:
- code
- message
AccountHolderEntityId:
type: string
format: uuid
description: 'The unique identifier of the account holder entity depends on the entity type:
* Volt Business Customer: customer identifier
* Merchant Clients (Business/Individual): unique identifier issued during the client onboarding process
'
example: 40bb9716-fb00-484e-b4a2-eb3a220b3906
Error404Response:
type: object
description: Error response for HTTP 404 Not Found.
properties:
code:
type: string
description: Error code.
enum:
- RESOURCE_NOT_FOUND
message:
type: string
description: Error message.
required:
- code
- message
LinkObject:
type: object
properties:
href:
type: string
format: uri
method:
type: string
enum:
- GET
- POST
- PATCH
- DELETE
required:
- href
CurrencyCode:
type: string
description: Three-letter ISO 4217 currency code.
example: EUR
pattern: ^[A-Z]{3}$
CountryCode:
description: Alpha-2 country code
example: DE
pattern: ^[A-Z]{2}$
type: string
Error415Response:
type: object
description: Request contains data in an unsupported content type.
properties:
code:
type: string
description: Error code.
enum:
- UNSUPPORTED_MEDIA_TYPE
message:
type: string
description: Error message.
required:
- code
- message
ValidationErrorDetail:
type: object
description: Details about a specific validation error.
properties:
type:
$ref: '#/components/schemas/ValidationErrorType'
propertyPath:
type: string
description: Points to the specific field or property in the incoming request that violated the validation rule.
message:
type: string
description: Human-readable message about constraint violation.
Error406Response:
type: object
description: API is not able to generate a response in the format defined in the Accept HTTP request header.
properties:
code:
type: string
description: Error code.
enum:
- MEDIA_TYPE_NOT_ACCEPTABLE
message:
type: string
description: Error message.
required:
- code
- message
AccountMinimalDetails:
type: object
properties:
id:
type: string
format: uuid
description: Id of Account.
currency:
$ref: '#/components/schemas/CurrencyCode'
identifications:
$ref: '#/components/schemas/Identifications'
name:
type: string
description: User-defined account alias.
active:
type: boolean
description: Boolean flag indicating if the account is currently enabled for processing transactions.
status:
$ref: '#/components/schemas/AccountStatusEnum'
country:
$ref: '#/components/schemas/CountryCode'
balance:
$ref: '#/components/schemas/AccountBalance'
type:
$ref: '#/components/schemas/AccountType'
subType:
$ref: '#/components/schemas/AccountSubType'
accountHolder:
$ref: '#/components/schemas/AccountHolderMinimalDetails'
responses:
'403':
description: '**Access denied** - Although your credentials are correct, your access to this section of the API has been disabled or limited. Subsequent requests to this endpoint will not be processed.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error403Response'
'404':
description: '**Not found** - The resource that you are requesting cannot be found.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error404Response'
'401':
description: '**Unauthorized** - Your credentials were invalid. It may be that the token you''ve used has expired. Try re-authenticating with valid or updated credentials and retry this request.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error401Response'
'406':
description: '**Media-type not acceptable** - API is not able to generate a response in the format defined in the Accept HTTP request header.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error406Response'
'405':
description: '**Method not supported** - HTTP method is not supported for this URL.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error405Response'
'422':
description: '**Unprocessable** - Request''s payload validation fails.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error422Response'
'409':
description: '**Conflict** - Modification of a resource is not possible, because current state of it does not allow it. Or `Idempotency-Key` was already used.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error409Response'
'500':
description: '**Internal server error** - Something went wrong and request cannot be processed due to server error. Message will contain trace ID and timestamp, which allows to investigate what went wrong.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error500Response'
'400':
description: '**Bad request** - Request you sent is invalid or malformed. Response will contain a description of the actual problem.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error400Response'
'415':
description: '**Unsupported media-type** - Request contains data in an unsupported content type.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error415Response'
parameters:
PageParam:
name: page
in: query
description: Page index for pagination.
schema:
type: integer
minimum: 1
default: 1
LimitParam:
name: limit
in: query
description: Number of items to return per page (max 100).
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 25
IdempotencyKey:
name: Idempotency-Key
in: header
description: It helps preventing duplicates in your `POST` requests. It is recommend using a **UUID** for the key, however you may use any other unique identifier you choose.
required: true
schema:
type: string
maxLength: 160
example: 85136c79cbf9fe36bb9d05d0639c70c265c18d37
XVoltApiVersion:
name: X-Volt-Api-Version
in: header
description: Version of the API used. Currently, version `1` is the only version.
required: true
schema:
type: integer
example: 1
enum:
- 1
headers:
PaginationPageCount:
description: Total number of available pages.
schema:
type: integer
example: 6
PaginationLimit:
description: Number of items per page.
schema:
type: integer
example: 25
PaginationTotalItems:
description: The absolute count of items matching the query.
schema:
type: integer
example: 150
PaginationPage:
description: The current page number.
schema:
type: integer
example: 1
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT