Currencycloud Transfers API
Search, retrieve and create a transfer of funds between your Currencycloud account and associated sub-accounts.
Search, retrieve and create a transfer of funds between your Currencycloud account and associated sub-accounts.
openapi: 3.0.3
info:
title: api-onboarding Account Usage Transfers API
version: v1
description: Search, retrieve and create a transfer of funds between your Currencycloud account and associated sub-accounts.
servers:
- url: /onboarding
description: Relative URL
- url: https://api.currencycloud.com/onboarding
description: Production server (uses live data)
- url: https://devapi.currencycloud.com/onboarding
description: Dev server (uses test data)
tags:
- name: Transfers
description: Search, retrieve and create a transfer of funds between your Currencycloud account and associated sub-accounts.
paths:
/transfers/create:
post:
tags:
- Transfers
x-api-group: pay
summary: Create Transfer
description: Transfers funds from one account to another. No currency conversion is performed, so the sending and receiving accounts must hold money in the same currency.
operationId: CreateTransfer
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: X-Auth-Token
in: header
required: true
type: string
description: Authentication token
minLength: 32
- name: source_account_id
in: formData
required: true
type: string
description: Account UUID of the paying account.
format: uuid
- name: destination_account_id
in: formData
required: true
type: string
description: Account UUID of the receiving account.
format: uuid
- name: currency
in: formData
required: true
type: string
description: Three-letter ISO currency code.
format: iso-4217
pattern: ^[A-Z]{3}$
- name: amount
in: formData
required: true
type: number
description: Amount
pattern: ^\d+(\.\d{1,3})?$
- name: reason
in: formData
required: false
type: string
description: User-generated reason for transfer, freeform text.
minLength: 1
maxLength: 255
- name: unique_request_id
in: formData
required: false
type: string
description: User-generated idempotency key. The value must be 100 characters or fewer.
minLength: 1
maxLength: 255
responses:
'200':
description: Success.
schema:
$ref: '#/definitions/Transfer'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'400':
description: Client error.
x-errors:
- code: account_not_found
category: account_id
message: Account was not found for this id
params: ''
- code: amount_is_too_big
category: amount
message: Amount cannot be greater than 10000000000
params: ''
- code: amount_type_is_wrong
category: amount
message: Amount should be of numeric_greater_than_zero type
params: ''
- code: cash_workflow_unknown
category: account_id
message: Could not retrieve cash workflow for account {account_id}
params: ''
- code: cash_workflow_unknown
category: account_id
message: Could not retrieve cash workflow for account {account_id}
params: ''
- code: cross_hub_transfer_not_permitted
category: unique_request_id
message: The accounts would require a transfer between two hub banks which is not permitted
params: ''
- code: currency_is_in_invalid_format
category: currency
message: '{currency} currency is not a valid ISO 4217 currency code'
params: ''
- code: currency_is_not_supported
category: currency
message: '{currency} currency is restricted'
params: ''
- code: destination_account_disabled
category: null
message: The transfer was not created successfully because the destination account is disabled. Ensure that both source and destination accounts are enabled before making a transfer.
params: ''
- code: destination_account_id_is_not_valid_uuid
category: account_id
message: destination_account_id should be in UUID format
params: ''
- code: destination_bank_account_verified_error
category: account_id
message: Destination bank account is not verified. Ensure that both source and destination bank accounts are verified before making a transfer.
params: ''
- code: duplicate_unique_request_id
category: unique_request_id
message: The unique_request_id provided for this transfer has already been used, please provide a new one to successfully submit this transfer
params: ''
- code: invalid_amount_format
category: amount
message: '{currency} does not support any decimal places'
params: ''
- code: invalid_amount_format
category: amount
message: '{currency} only supports up to 1 decimal place'
params: ''
- code: invalid_amount_format
category: amount
message: '{currency} only supports up to %d decimal places'
params: ''
- code: invalid_extra_parameters
category: invalid_extra_parameters
message: Invalid extra parameters:{parameter}
params: '{ "parameters" => "extra_parameter" }'
- code: not_allowed_currency
category: currency
message: You cannot perform this operation in {currency} currency
params: ''
- code: reason_too_long
category: reason
message: Reason longer than 255 symbols
params: ''
- code: same_source_and_destination_accounts
category: account_id
message: Source and Destination accounts cannot be the same
params: ''
- code: source_account_disabled
category: account_id
message: The transfer was not created successfully because the source account is disabled. Ensure that both source and destination accounts are enabled before making a transfer.
params: ''
- code: source_account_id_is_not_valid_uuid
category: source_account_id
message: source_account_id should be in UUID format
params: ''
- code: source_bank_account_verified_error
category: source_account_id
message: Source bank account is not verified. Ensure that both source and destination bank accounts are verified before making a transfer.
params: ''
- code: transfer_not_permitted
category: account_id
message: The transfer is not permitted between the source and destination accounts defined.
params: ''
- code: unique_request_id_too_long
category: unique_request_id
message: The unique_request_id provided is longer than 100 characters, please provide a shorter one
params: ''
schema:
$ref: '#/definitions/CreateTransferError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'401':
description: Unauthorized.
x-errors:
- code: invalid_supplied_credentials
category: username
message: Authentication failed with the supplied credentials
params: ''
schema:
$ref: '#/definitions/UnauthorizedError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'404':
description: Resource not found.
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'429':
description: Too many requests.
x-errors:
- code: too_many_requests
category: base
message: Too many requests have been made to the api. Please refer to the Developer Center for more information
params: ''
schema:
$ref: '#/definitions/RateLimitError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'500':
description: Internal server error
x-errors:
- code: internal_server_error
category: base
message: Internal server error
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'503':
description: Service is temporary unavailable
x-errors:
- code: service_unavailable
category: base
message: Service is temporarily unavailable
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
default:
description: Unexpected error.
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
/transfers/{id}:
get:
tags:
- Transfers
x-api-group: pay
summary: Get Transfer
description: Returns the money transfer record with the given ID.
operationId: GetTransfer
produces:
- application/json
parameters:
- name: X-Auth-Token
in: header
required: true
type: string
description: Authentication token
minLength: 32
- name: id
in: path
required: true
type: string
description: Transfer UUID, this was returned when the transfer was created.
format: uuid
- name: on_behalf_of
in: query
required: false
type: string
description: A contact UUID for the sub-account you're acting on behalf of.
format: uuid
responses:
'200':
description: Success.
schema:
$ref: '#/definitions/Transfer'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'400':
description: Client error.
x-errors:
- code: id_is_not_valid_uuid
category: null
message: id should be in UUID format
params: ''
- code: invalid_extra_parameters
category: extra_parameter
message: Invalid extra parameters:'{parameter}'
params: '{ "parameters" => "extra_parameter" }'
- code: transfer_not_found
category: null
message: Transfer was not found for this ID
params: ''
schema:
$ref: '#/definitions/GetTransferError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'401':
description: Unauthorized.
x-errors:
- code: invalid_supplied_credentials
category: username
message: Authentication failed with the supplied credentials
params: ''
schema:
$ref: '#/definitions/UnauthorizedError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'404':
description: Resource not found.
schema:
$ref: '#/definitions/NotFoundError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'429':
description: Too many requests.
x-errors:
- code: too_many_requests
category: base
message: Too many requests have been made to the api. Please refer to the Developer Center for more information
params: ''
schema:
$ref: '#/definitions/RateLimitError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'500':
description: Internal server error
x-errors:
- code: internal_server_error
category: base
message: Internal server error
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'503':
description: Service is temporary unavailable
x-errors:
- code: service_unavailable
category: base
message: Service is temporarily unavailable
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
default:
description: Unexpected error.
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
/transfers/find:
get:
tags:
- Transfers
x-api-group: pay
summary: Find Transfers
description: Searches for transfer records that meet the given criteria.
operationId: FindTransfers
produces:
- application/json
parameters:
- name: X-Auth-Token
in: header
required: true
type: string
description: Authentication token
minLength: 32
- name: on_behalf_of
in: query
required: false
type: string
description: A contact UUID for the sub-account you're acting on behalf of.
format: uuid
- name: short_reference
in: query
required: false
type: string
description: Short reference code.
minLength: 1
maxLength: 25
- name: source_account_id
in: query
required: false
type: string
description: Account UUID of the paying account.
format: uuid
- name: destination_account_id
in: query
required: false
type: string
description: Account UUID of the receiving account.
format: uuid
- name: status
in: query
required: false
type: string
enum:
- cancelled
- completed
- pending
description: Transfer status
- name: currency
in: query
required: false
type: string
description: Three-letter ISO currency code.
format: iso-4217
pattern: ^[A-Z]{3}$
- name: amount_from
in: query
required: false
type: number
description: Minimum amount
pattern: ^\d+(\.\d{1,3})?$
- name: amount_to
in: query
required: false
type: number
description: Maximum amount
pattern: ^\d+(\.\d{1,3})?$
- name: created_at_from
in: query
required: false
type: string
format: date-time
description: Any valid ISO 8601 format, no older than two years e.g. "2024-12-31T23:59:59Z".
- name: created_at_to
in: query
required: false
type: string
format: date-time
description: Any valid ISO 8601 format, no older than two years e.g. "2024-12-31T23:59:59Z".
- name: updated_at_from
in: query
required: false
type: string
format: date-time
description: Any valid ISO 8601 format, no older than two years e.g. "2024-12-31T23:59:59Z".
- name: updated_at_to
in: query
required: false
type: string
format: date-time
description: Any valid ISO 8601 format, no older than two years e.g. "2024-12-31T23:59:59Z".
- name: completed_at_from
in: query
required: false
type: string
format: date-time
description: Any valid ISO 8601 format, no older than two years e.g. "2024-12-31T23:59:59Z".
- name: completed_at_to
in: query
required: false
type: string
format: date-time
description: Any valid ISO 8601 format, no older than two years e.g. "2024-12-31T23:59:59Z".
- name: creator_contact_id
in: query
required: false
type: string
description: Contact UUID of transfer instructor.
format: uuid
- name: creator_account_id
in: query
required: false
type: string
description: Account UUID of transfer instructor.
format: uuid
- name: page
in: query
required: false
type: integer
description: Page number
pattern: ^\d+$
- name: per_page
in: query
required: false
type: integer
description: Number of results per page.
pattern: ^\d+$
- name: order
in: query
required: false
type: string
default: created_at
description: The field name to sort by - "created_at", "updated_at" or "completed_at". Defaults to "created_at" if not specified..<br>
enum:
- created_at
- updated_at
- completed_at
minLength: 1
maxLength: 255
- name: order_asc_desc
in: query
required: false
type: string
enum:
- asc
- desc
default: asc
description: Sort records in ascending or descending order.
- name: unique_request_id
in: query
required: false
type: string
description: User-generated idempotency key.
minLength: 1
maxLength: 255
responses:
'200':
description: Success.
schema:
type: object
properties:
transfers:
type: array
items:
$ref: '#/definitions/Transfer'
pagination:
$ref: '#/definitions/Pagination'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'400':
description: Client error.
x-errors:
- code: amount_from_type_is_wrong
category: amount_from
message: amount_from should be of numeric type
params: ''
- code: amount_to_type_is_wrong
category: amount_to
message: amount_to should be of numeric type
params: ''
- code: completed_at_from_is_in_invalid_format
category: completed_at_from
message: completed_at_from should be in ISO 8601 format
params: ''
- code: completed_at_from_is_too_old
category: completed_at_from
message: completed_at_from is set to a date too far back
params: ''
- code: completed_at_to_is_in_invalid_format
category: completed_at_to
message: completed_at_from should be in ISO 8601 format
params: ''
- code: created_at_from_is_in_invalid_format
category: created_at_from
message: created_at_from should be in ISO 8601 format
params: ''
- code: created_at_from_is_too_old
category: created_at_from
message: created_at_from is set to a date too far back
params: ''
- code: created_at_to_is_in_invalid_format
category: created_at_to
message: created_at_from should be in ISO 8601 format
params: ''
- code: destination_account_id_is_not_valid_uuid
category: destination_account_id
message: destination_account_id should be in UUID format
params: ''
- code: invalid_extra_parameters
category: extra_parameter
message: Invalid extra parameters:'{parameter}'
params: '{ "parameters" => "extra_parameter" }'
- code: page_is_too_small
category: page
message: page can not be smaller than 1
params: ''
- code: page_type_is_wrong
category: page
message: page should be of integer type
params: ''
- code: per_page_is_too_big
category: per_page
message: per_page can not be bigger than %i
params: ''
- code: per_page_is_too_small
category: per_page
message: per_page can not be smaller than 1
params: ''
- code: per_page_type_is_wrong
category: per_page
message: per_page should be of integer type
params: ''
- code: source_account_id_is_not_valid_uuid
category: source_account_id
message: source_account_id should be in UUID format
params: ''
- code: status_not_in_range
category: status
message: 'status should be in range: pending, completed, cancelled'
params: ''
- code: updated_at_from_is_in_invalid_format
category: updated_at_from
message: updated_at_from should be in ISO 8601 format
params: ''
- code: updated_at_from_is_too_old
category: updated_at_from
message: updated_at_from is set to a date too far back
params: ''
- code: updated_at_to_is_in_invalid_format
category: updated_at_to
message: updated_at_from should be in ISO 8601 format
params: ''
schema:
$ref: '#/definitions/FindTransfersError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'401':
description: Unauthorized.
x-errors:
- code: invalid_supplied_credentials
category: username
message: Authentication failed with the supplied credentials
params: ''
schema:
$ref: '#/definitions/UnauthorizedError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request
'404':
description: Resource not found.
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'429':
description: Too many requests.
x-errors:
- code: too_many_requests
category: base
message: Too many requests have been made to the api. Please refer to the Developer Center for more information
params: ''
schema:
$ref: '#/definitions/RateLimitError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'500':
description: Internal server error
x-errors:
- code: internal_server_error
category: base
message: Internal server error
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'503':
description: Service is temporary unavailable
x-errors:
- code: service_unavailable
category: base
message: Service is temporarily unavailable
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
default:
description: Unexpected error.
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
/transfers/{id}/cancel:
post:
tags:
- Transfers
x-api-group: pay
summary: Cancel Transfer
description: Requests that a transfer be cancelled.
operationId: CancelTransfer
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: X-Auth-Token
in: header
required: true
type: string
description: Authentication token
minLength: 32
- name: id
in: path
required: true
type: string
description: ID of the transfer to be cancelled.
format: uuid
responses:
'200':
description: Success.
schema:
$ref: '#/definitions/Transfer'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'400':
description: Client error.
x-errors:
- code: id_is_not_valid_uuid
category: account_id
message: id should be in UUID format
params: ''
- code: invalid_extra_parameters
category: invalid_extra_parameters
message: Invalid extra parameters:'{parameter}'
params: '{ "parameters" => "extra_parameter" }'
- code: transfer_cannot_be_cancelled
category: short_reference
message: Transfer {short_reference} cannot be cancelled
params: ''
- code: transfer_is_already_cancelled
category: short_reference
message: Transfer {short_reference} is already cancelled
params: ''
- code: transfer_is_already_completed
category: short_reference
message: Transfer {short_reference} cannot be cancelled since it is already completed
params: ''
- code: transfer_not_found
category: id
message: Transfer was not found for this ID
params: ''
schema:
$ref: '#/definitions/CancelTransferError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'401':
description: Unauthorized.
x-errors:
- code: invalid_supplied_credentials
category: username
message: Authentication failed with the supplied credentials
params: ''
schema:
$ref: '#/definitions/UnauthorizedError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'403':
description: Forbidden.
x-errors:
- code: permission_denied
message: You do not have permission 'transfer_write' to perform this operation
params: ''
schema:
$ref: '#/definitions/ForbiddenError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'404':
description: Resource not found.
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'429':
description: Too many requests.
x-errors:
- code: too_many_requests
category: base
message: Too many requests have been made to the api. Please refer to the Developer Center for more information
params: ''
schema:
$ref: '#/definitions/RateLimitError'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'500':
description: Internal server error
x-errors:
- code: internal_server_error
category: base
message: Internal server error
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'503':
description: Service is temporary unavailable
x-errors:
- code: service_unavailable
category: base
message: Service is temporarily unavailable
params: ''
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
default:
description: Unexpected error.
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
components:
securitySchemes:
AuthToken:
type: apiKey
in: header
name: X-Auth-Token
definitions:
Transfer:
type: object
description: Transfer
properties:
id:
type: string
description: Transfer UUID
short_reference:
type: string
description: Short reference code.
source_account_id:
type: string
description: Account UUID of the paying account.
destination_account_id:
type: string
description: Account UUID of the receiving account.
currency:
type: string
description: Three-letter ISO currency code.
amount:
type: string
description: Transfer amount
status:
type: string
description: Status of the transfer - completed, pending or cancelled.
created_at:
type: string
description: Date/time the transfer was created.
updated_at:
type: string
description: Date/time the transfer was last updated.
completed_at:
type: string
description: Date/time the transfer was completed.
creator_account_id:
type: string
description: Account UUID of transfer instructor.
creator_contact_id:
type: string
description: Contact UUID of transfer instructor.
reason:
type: string
description: Reason for the transfer.
unique_request_id:
type: string
description: The user-generated idempotency key given to the transfer.
example:
id: 993d63bd-e151-11e6-a5af-080027a79e8f
short_reference: BT-20200118-VMSCBS
source_account_id: a7117404-e150-11e6-a5af-080027a79e8f
destination_account_id: 946f2d58-e150-11e6-a5af-080027a79e8f
currency: GBP
amount: '1250.00'
status: completed
created_at: '2023-01-18T14:08:34.000Z'
updated_at: '2023-01-18T14:08:34.000Z'
completed_at: '2023-01-18T14:08:34.000Z'
creator_account_id: 30cb8632-e152-11e6-a5af-080027a79e8f
creator_contact_id: 262e3d2a-e152-11e6-a5af-080027a79e8f
reason: Director's fees for March
unique_request_id: 1234567890abc
RateLimitError:
type: object
description: Too many requests.
required:
- error_code
- error_messages
properties:
error_code:
type: string
description: A high-level error code for the whole request.
error_messages:
type: object
description: Detailed error information for individual input parameters that failed validation. Object keys are the names of the invalid input parameters. Each parameter may have one or more reasons why it failed.
additionalProperties:
type: array
items:
type: object
description: An object that represents one of the reasons why the input parameter failed.
required:
- code
- message
properties:
code:
type: string
description: A unique code that identifies this validation/error.
message:
type: string
description: An explanation of the error in English.
params:
type: object
default: {}
description: Relevant validation rules that failed. This can be used for translations.
example:
minlength: 1
maxlength: 255
UnauthorizedError:
type: object
description: Authorization error.
required:
- error_code
- error_messages
properties:
error_code:
type: st
# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/currencycloud/refs/heads/main/openapi/currencycloud-transfers-api-openapi.yml