Currencycloud Accounts API
Create, search and update your Currencycloud account and any associated sub-accounts. Also provides you with the ability to use your own reference IDs for easy reconciliation with your internal systems.
Create, search and update your Currencycloud account and any associated sub-accounts. Also provides you with the ability to use your own reference IDs for easy reconciliation with your internal systems.
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/currencycloud-accounts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.0.3
info:
title: api-onboarding Account Usage Accounts API
version: v1
description: Create, search and update your Currencycloud account and any associated sub-accounts. Also provides you with the ability to use your own reference IDs for easy reconciliation with your internal systems.
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: Accounts
description: Create, search and update your Currencycloud account and any associated sub-accounts. Also provides you with the ability to use your own reference IDs for easy reconciliation with your internal systems.
paths:
/accounts/create:
post:
tags:
- Accounts
x-api-group: manage
summary: Create Account
description: Creates a new sub-account. Returns the new account entity on success.
operationId: CreateAccount
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: X-Auth-Token
in: header
required: true
type: string
description: Authentication token
minLength: 32
- name: account_name
in: formData
required: true
type: string
description: Account name.
pattern: \S+
minLength: 1
maxLength: 150
- name: legal_entity_type
in: formData
required: true
type: string
enum:
- company
- individual
description: Legal entity.
- name: street
in: formData
required: true
type: string
description: First line of address.
maxLength: 150
- name: city
in: formData
required: true
type: string
description: City
maxLength: 100
- name: postal_code
in: formData
required: false
type: string
description: Postal code. Required for sub-accounts on our outsourced KYC model, also required where country code = "US", "CA" or "MX".
maxLength: 20
- name: country
in: formData
required: true
type: string
description: Two-letter ISO country code.
format: iso3166-1-alpha-2
pattern: ^[A-Z]{2}$
- name: brand
in: formData
required: false
type: string
description: The value of this field is used for white labeling the Currencycloud user interface. If nothing is specified then the account will inherit the house account's brand.
minLength: 1
maxLength: 255
- name: your_reference
in: formData
required: false
type: string
description: User-generated reference code.
minLength: 1
maxLength: 255
- name: status
in: formData
required: false
type: string
enum:
- disabled
- enabled
default: enabled
description: Account status.
- name: state_or_province
in: formData
required: false
type: string
description: State or province two-letter ISO 3166 code. Only applicable to some countries, required where country code = "US", "CA" or "MX".
maxLength: 100
- name: spread_table
in: formData
required: false
type: string
default: flat_0.00
description: The name of the spread table assigned to the account. This is needed if they intend to apply markup.
maxLength: 100
- name: api_trading
in: formData
required: false
type: boolean
description: Allow the account to make trades via the Currencycloud API.
- name: online_trading
in: formData
required: false
type: boolean
description: Allow the account to make trades via Currencycloud Direct.
- name: phone_trading
in: formData
required: false
type: boolean
description: Allow the account to make trades via phone.
- name: identification_type
in: formData
required: false
type: string
enum:
- none
- others
- asylum_registration_card
- citizenship_papers
- consular_id
- credential_de_elector
- drivers_license
- drivers_license_canadian
- employer_identification_number
- existing_credit_card_details
- green_card
- immigration_status_document
- indigenous_card
- international_driving_licence
- matricula_consular
- municipality_identity_card
- national_health_insurance_card
- national_id
- national_identity_card
- passport
- passport_card
- postal_identity_card
- private_operators_card
- professional_qualification_card
- proof_of_citizenship
- registro_federal_de_contribuyentes
- residence_permit
- residence_status_document
- service_id_card
- social_insurance_number
- social_security_card
- social_security_number
- tax_id
- visa
- voter_id
- work_permit
- incorporation_number
description: A legal document that verifies the identity of the account owner. Required for individual sub-accounts on our outsourced KYC model, optional otherwise.
- name: identification_value
in: formData
required: false
type: string
description: Unique reference code for the identification document, such as a passport number. Required if "identification_type" is provided.
minLength: 1
maxLength: 255
- name: terms_and_conditions_accepted
in: formData
required: false
type: boolean
description: Acceptance of the terms and conditions. Required for sub-accounts that are on our Outsourced KYC model, optional otherwise.
- name: industry_type
in: formData
required: false
maxLength: 255
type: string
description: The industry the account operates in. Required if "linked_account_id" is present. Required if extended compliance fields are present.
- name: business_website_url
in: formData
required: false
type: string
maxLength: 400
description: A fully qualified URL (including scheme) indicating a marketplace homepage, a link to a government page concerning the company or the literal string 'no_website_available'. Required if extended compliance fields are present.
- name: identification_expiration
in: formData
required: false
type: string
format: date
description: 'The expiration date for the identification information provided. Format YYYY-MM-DD. Part of extended compliance for "legal_entity_type: individual" accounts.'
- name: identification_issuer
in: formData
maxLength: 255
required: false
type: string
description: 'ISO country code indicating the issuer of the identification information provided. Part of extended compliance for "legal_entity_type: individual" accounts.'
- name: country_of_citizenship
in: formData
required: false
type: string
description: 'ISO country code indicating the citizenship of the individual the account belongs to. Provide the longest held citizenship for individuals with multiple. Part of extended compliance for "legal_entity_type: individual" accounts.'
- name: country_of_incorporation
in: formData
required: false
type: string
maxLength: 2
minLength: 2
description: 'Two-letter ISO country code indicating the country the company is incorpated in. Part of extended compliance for "legal_entity_type: company" accounts.'
- name: date_of_incorporation
in: formData
required: false
type: string
format: date
description: 'Date of the company''s incorporation. Part of extended compliance for "legal_entity_type: company" accounts.'
- name: legal_entity_sub_type
in: formData
required: false
type: string
description: 'The type of company this account represents. Part of extended compliance for "legal_entity_type: company" accounts.'
enum:
- sole_trader
- limited_liability_company
- public_limited_company
- limited_liability_partnership
- unincorporated_partnership
- unregistered_charity
- registered_charity
- trust
- company_with_nominee_shareholders_or_shares_in_bearer_form
- scottish_limited_partnership
- other
- name: trading_address_street
in: formData
required: false
type: string
maxLength: 150
description: 'The street portion of the company''s trading address. Part of extended compliance for "legal_entity_type: company" accounts.'
- name: trading_address_city
in: formData
required: false
type: string
description: 'The city portion of the company''s trading address. Part of extended compliance for "legal_entity_type: company" accounts.'
- name: trading_address_state
in: formData
required: false
type: string
maxLength: 100
description: 'The state portion of the company''s trading address. Part of extended compliance for "legal_entity_type: company" accounts.'
- name: trading_address_postalcode
in: formData
required: false
type: string
maxLength: 20
description: 'The postal code portion of the company''s trading address. Part of extended compliance for "legal_entity_type: company" accounts.'
- name: trading_address_country
in: formData
required: false
maxLength: 2
minLength: 2
type: string
description: 'Two-letter ISO country code representing the country portion of the company''s trading address. Part of extended compliance for accounts with "legal_entity_type: company".'
- name: tax_identification
in: formData
required: false
type: string
maxLength: 100
description: 'Tax identification number for the company. Part of extended compliance for accounts with "legal_entity_type: company". Required for companies based in "US" or "AU".'
- name: national_identification
in: formData
required: false
type: string
maxLength: 100
description: 'National identification (e.g SSN for U.S. individuals). Part of extended compliance for "legal_entity_type: individual" accounts. Required for "US" based companies.'
- name: customer_risk
in: formData
required: false
type: string
description: 'The risk classification for this account''s expected behaviour. Part of extended compliance for "legal_entity_type: individual | company" accounts.'
enum:
- LOW
- MEDIUM
- HIGH
- name: expected_monthly_activity_volume
in: formData
required: false
type: number
description: 'The expected number of money moving actions this account will conduct monthly. Part of extended compliance for "legal_entity_type: individual | company" accounts.'
- name: expected_monthly_activity_value
in: formData
required: false
type: number
description: 'The expected sum value of money moving actions this account will conduct monthly. The currency basis of the value is submitted as part of "expected_transaction_currencies". Part of extended compliance for "legal_entity_type: individual | company" accounts.'
- name: expected_transaction_currencies[]
in: formData
required: false
description: 'An array holding a single ISO currency code for the expected currency this account will mainly transact in. Part of extended compliance for "legal_entity_type: individual | company" accounts.'
type: array
items:
type: string
- name: expected_transaction_countries[]
in: formData
required: false
type: array
description: Array of two-letter ISO-3166 country codes indicating the countries this account is expected to transact to and from.
items:
type: string
minLength: 2
maxLength: 2
responses:
'200':
description: Success.
schema:
$ref: '#/definitions/Account'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'400':
description: Client error.
x-errors:
- code: account_name_is_too_short
category: account_name
message: account_name can not be shorter than 1 character(s)
params: '{ "minlength" => 1 }'
- code: account_name_is_too_long
category: account_name
message: account_name can not be longer than 150 character(s)
params: '{ "maxlength" => 150 }'
- code: account_name_is_required
category: account_name
message: account_name is required
params: ''
- code: brand_is_too_short
category: brand
message: brand can not be shorter than 1 character(s)
params: '{ "minlength" => 1 }'
- code: brand_is_too_long
category: brand
message: brand can not be longer than 255 character(s)
params: '{ "maxlength" => 255 }'
- code: brand_not_found
category: brand
message: Brand non_existing_brand wasn't found
params: '{ "brand" => "non_existing_brand" }'
- code: brand_account_not_broker
category: brand
message: Account doesn't have broker permissions
params: '{ "brand" => "wrong_brand" }'
- code: your_reference_is_too_long
category: your_reference
message: your_reference can not be longer than 25 character(s)
params: '{ "maxlength" => 25 }'
- code: status_not_in_range
category: status
message: 'status should be in range: enabled, disabled'
params: '{ "range" => "enabled, disabled" }'
- code: legal_entity_type_not_in_range
category: legal_entity_type
message: 'legal_entity_type should be in range: individual, company'
params: '{ "range" => "individual, company" }'
- code: legal_entity_type_is_required
category: legal_entity_type
message: Legal entity type is required
params: ''
- code: street_is_too_long
category: street
message: street can not be longer than 150 character(s)
params: '{ "maxlength" => 150 }'
- code: street_is_required
category: street
message: Street is required
params: ''
- code: city_is_too_long
category: city
message: city can not be longer than 100 character(s)
params: '{ "maxlength" => 100 }'
- code: city_is_required
category: city
message: City is required.
params: ''
- code: postal_code_is_too_long
category: postal_code
message: postal_code can not be longer than 20 character(s)
params: '{ "maxlength" => 20 }'
- code: postal_code_is_required
category: postal_code
message: Postal code is required.
params: ''
- code: state_or_province_is_too_long
category: state_or_province
message: state_or_province can not be longer than 100 character(s)
params: '{ "maxlength" => 100 }'
- code: country_is_in_invalid_format
category: country
message: country is not a valid ISO 3166-1 Alpha-2 country code
params: '{ "maxlength" => 2 }'
- code: country_is_required
category: country
message: Country is required
params: ''
- code: spread_table_is_too_long
category: spread_table
message: spread_table can not be longer than 100 character(s)
params: '{ "maxlength" => 100 }'
- code: identification_type_is_missing
category: identification_type
message: identification_type is missing
params: ''
- code: identification_type_is_invalid
category: identification_type
message: identification_type is invalid
params: ''
- code: identification_value_is_missing
category: identification_value
message: identification_value is missing
params: ''
- code: identification_value_is_invalid
category: identification_value
message: identification_value is invalid
params: ''
- code: state_or_province_is_required
category: state_or_province
message: State or province is required for US, CA and MX
params: ''
- code: terms_and_conditions_accepted_is_required
category: terms_and_conditions_accepted
message: Terms and conditions accepted is required
params: ''
- code: invalid_extra_parameters
category: base
message: Invalid extra parameters extra_parameter
params: '{ "parameters" => "extra_parameter" }'
schema:
$ref: '#/definitions/CreateAccountError'
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.
/accounts/{id}:
get:
tags:
- Accounts
x-api-group: manage
summary: Get Account
description: Gets an account or sub-account owned by the authenticated user.
operationId: GetAccount
produces:
- application/json
parameters:
- name: X-Auth-Token
in: header
required: true
type: string
description: Authentication token
- name: id
in: path
required: true
type: string
description: Account UUID, returned by the create account endpoint.
- name: on_behalf_of
in: query
required: false
type: string
description: A contact UUID for the sub-account you're acting on behalf of.
responses:
'200':
description: Success.
schema:
$ref: '#/definitions/Account'
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: id
message: id should be in UUID format
params: ''
- code: account_not_found
category: id
message: Account was not found for this id
params: ''
- code: on_behalf_of_self
category: on_behalf_of
message: You cannot act on behalf of your own contact
params: ''
- code: contact_not_found
category: on_behalf_of
message: Contact was not found for this id
params: ''
schema:
$ref: '#/definitions/GetAccountError'
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.
post:
tags:
- Accounts
x-api-group: manage
summary: Update Account
description: Updates a sub-account owned by the authenticated user. The updated account entity is returned on success.
operationId: UpdateAccount
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: X-Auth-Token
in: header
required: true
type: string
description: Authentication token
- name: id
in: path
required: true
type: string
description: Account UUID, returned by the create account endpoint.
- name: account_name
in: formData
required: false
type: string
description: Account name.
- name: legal_entity_type
in: formData
required: false
type: string
enum:
- company
- individual
description: Legal entity.
- name: brand
in: formData
required: false
type: string
description: The value of this field is used for white labeling the Currencycloud user interface.
- name: your_reference
in: formData
required: false
type: string
description: User-generated reference code.
- name: status
in: formData
required: false
type: string
enum:
- disabled
- enabled
default: enabled
description: Status of the account.
- name: street
in: formData
required: false
type: string
description: First line of address.
- name: city
in: formData
required: false
type: string
description: City name
- name: state_or_province
in: formData
required: false
type: string
description: State or province two-letter ISO 3166 code. Only applicable to some countries.
- name: postal_code
in: formData
required: false
type: string
description: Postal code.
- name: country
in: formData
required: false
type: string
description: Two-letter ISO country code.
- name: spread_table
in: formData
required: false
type: string
default: fxcg_rfx_default
description: The name of the spread table assigned to the account.
- name: api_trading
in: formData
required: false
type: boolean
default: true
description: Whether trading via the Currencycloud API is to be enabled on the account.
- name: online_trading
in: formData
required: false
type: boolean
default: true
description: Enable online trading on the account.
- name: phone_trading
in: formData
required: false
default: true
type: boolean
description: Enable phone trading on the account.
- name: identification_type
in: formData
required: false
type: string
enum:
- none
- others
- asylum_registration_card
- citizenship_papers
- consular_id
- credential_de_elector
- drivers_license
- drivers_license_canadian
- employer_identification_number
- existing_credit_card_details
- green_card
- immigration_status_document
- indigenous_card
- international_driving_licence
- matricula_consular
- municipality_identity_card
- national_health_insurance_card
- national_id
- national_identity_card
- passport
- passport_card
- postal_identity_card
- private_operators_card
- professional_qualification_card
- proof_of_citizenship
- registro_federal_de_contribuyentes
- residence_permit
- residence_status_document
- service_id_card
- social_insurance_number
- social_security_card
- social_security_number
- tax_id
- visa
- voter_id
- work_permit
- incorporation_number
description: A legal document that verifies the identity of the account owner.
- name: identification_value
in: formData
required: false
type: string
description: A unique reference code for the identification document, such as a passport number.
maxLength: 255
- name: terms_and_conditions_accepted
in: formData
required: false
type: boolean
description: Acceptance of the terms and conditions.
- name: identification_expiration
in: formData
required: false
type: string
format: date
description: 'The expiration date for the identification information provided. Format YYYY-MM-DD. Part of extended compliance for "legal_entity_type: individual" accounts.'
- name: identification_issuer
in: formData
required: false
type: string
maxLength: 255
description: 'ISO country code indicating the issuer of the identification information provided. Part of extended compliance for "legal_entity_type: individual" accounts.'
- name: legal_entity_sub_type
in: formData
required: false
type: string
description: 'The type of company this account represents. Part of extended compliance for "legal_entity_type: company" accounts'
enum:
- sole_trader
- limited_liability_company
- public_limited_company
- limited_liability_partnership
- unincorporated_partnership
- unregistered_charity
- registered_charity
- trust
- company_with_nominee_shareholders_or_shares_in_bearer_form
- scottish_limited_partnership
- other
responses:
'200':
description: Success.
schema:
$ref: '#/definitions/Account'
headers:
X-Request-Id:
type: string
description: A unique reference for the request.
'400':
description: Client error.
x-errors:
- code: at_least_one_parameter
category: base
message: 'At least one parameter should be present: account_name, brand, your_reference, status, street, city, state_or_province, postal_code, country, spread_table, legal_entity_type, identification_type, identification_value, api_trading, online_trading, phone_trading or terms_and_conditions_accepted.'
params: '{ account_name, brand, your_reference, status, street, city, state_or_province, postal_code, country, spread_table, legal_entity_type, identification_type, identification_value, api_trading, online_trading, phone_trading, terms_and_conditions_accepted }'
- code: id_is_not_valid_uuid
category: id
message: id should be in UUID format
params: ''
- code: account_name_is_too_short
category: account_name
message: account_name can not be shorter than 1 character(s)
params: '{ "minlength" => 1}'
- code: account_name_is_too_long
category: account_name
message: account_name can not be longer than 150 character(s)
params: '{ "maxlength" => 150 }'
- code: account_name_is_in_invalid_format
category: account_name
message: account_name is in invalid format
params: ''
- code: brand_is_too_long
category: brand
message: brand can not be longer than 255 character(s)
params: '{ "maxlength" => 255 }'
- code: brand_not_found
category: brand
message: Brand non_existing_brand wasn't found
params: '{ "brand" => "non_existing_brand" }'
- code: brand_account_not_broker
category: brand
message: Account doesn't have broker permissions
params: '{ "brand" => "wrong_brand" }'
- code: permission_denied
category: permissions
message: Permission denied
params: ''
- code: your_reference_is_too_long
category: your_reference
message: your_reference can not be longer than 25 character(s)
params: '{ "maxlength" => 25 }'
- code: legal_entity_type_not_in_range
category: legal_entity_type
message: 'legal_entity_type shoul
# --- truncated at 32 KB (107 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/currencycloud/refs/heads/main/openapi/currencycloud-accounts-api-openapi.yml