Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/modulr-customers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
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 Specification
openapi: 3.2.0
info:
title: Modulr Customers API
description: Modulr API
license:
name: © Modulr Finance
url: https://www.modulrfinance.com
version: '1.0'
servers:
- url: https://api-sandbox.modulrfinance.com/api-sandbox-token
security:
- modulo_security: []
tags:
- name: Customers
description: Operations on Customers
paths:
/customers/{customerId}:
get:
tags:
- Customers
summary: Retrieve a specific customer using a unique customer reference
description: 'Retrieve a specific customer using a unique customer reference. This identifier can be found in the response obtained after creating a new customer, it starts by C, e.g: C0000000'
operationId: getCustomer
parameters:
- name: customerId
in: path
description: ID of customer to fetch
required: true
style: simple
explode: false
schema:
type: string
- name: statuses
in: query
description: Customer statuses allowed when fetching the customer
required: false
style: form
explode: true
schema:
type: array
default:
- ACTIVE
items:
type: string
enum:
- ACTIVE
- CLOSED
- BLOCKED
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/account.Customer'
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/account.MessageResponse'
security:
- HMAC: []
- TOKEN: []
put:
tags:
- Customers
summary: Edit a specific customer using a unique customer reference
description: " Currently editable fields:\n <ol>\n <li>For all customer types: <b>externalReference</b> can be edited</li>\n <li>For all customers not requiring manual or in-house KYC verification: <b>industryCode</b>, <b>registeredAddress</b>, <b>tcsVersions</b> and <b>regNumber</b> can additionally be edited. Of those:\n <ul>\n <li>For all other customer types: <b>name</b> and <b>tradingAddress</b> can additionally be edited</li>\n <li>For all types other than PCM_BUSINESS: the <b>associate</b> can additionally be edited</li>\n </ul>\n </li>\n <li> For <b>vulnerabilityReason</b> you must supply a list and to delete a list you must supply an empty list in request, not supplying a list will result in no change</li>\n </ol>\n"
operationId: editCustomer
parameters:
- name: customerId
in: path
description: ID of customer to be edited
required: true
style: simple
explode: false
schema:
type: string
example: C0000000
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/account.UpdateCustomerRequest'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/account.Customer'
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/account.MessageResponse'
security:
- HMAC: []
- TOKEN: []
patch:
tags:
- Customers
summary: Edit a customer
description: 'Edit details of a particular customer using its ID as a reference. Current editable fields: complianceData'
operationId: patchCustomer
parameters:
- name: customerId
in: path
required: true
style: simple
explode: false
schema:
type: string
requestBody:
content:
application/json-patch+json:
schema:
type: array
items:
oneOf:
- $ref: '#/components/schemas/account.Add'
- $ref: '#/components/schemas/account.Copy'
- $ref: '#/components/schemas/account.Move'
- $ref: '#/components/schemas/account.Remove'
- $ref: '#/components/schemas/account.Replace'
- $ref: '#/components/schemas/account.Test'
required: true
responses:
'200':
description: Successfully updated the existing customer
content:
application/json:
schema:
$ref: '#/components/schemas/account.Customer'
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/account.MessageResponse'
security:
- HMAC: []
- TOKEN: []
/customers:
get:
tags:
- Customers
summary: Retrieve customers using filters
description: Either using unique references, such as customer ID, or filter parameters, such as verification status, get details of any customers found.
operationId: getCustomers
parameters:
- name: id
in: query
description: ID of Customer(s) to fetch
required: false
style: form
explode: true
schema:
$ref: '#/components/schemas/account.id'
- name: delegateId
in: query
required: false
style: form
explode: true
schema:
$ref: '#/components/schemas/account.delegateId'
- name: q
in: query
description: Query parameter. ID, name or external reference of customer to search for
required: false
style: form
explode: true
schema:
type: string
description: Query parameter. ID, name or external reference of customer to search for
- name: type
in: query
description: 'Type to filter, can be one of:
1. LLC -> limited company
2. PLC -> publicly listed company
3. SOLETRADER -> sole trader
4. OPARTNRSHP -> ordinary partnership
5. LPARTNRSHP -> limited partnership
6. LLP -> limited liability partnership
7. INDIVIDUAL -> individual consumer
8. PCM_INDIVIDUAL -> partner clearing model individual consumer
9. PCM_BUSINESS -> partner clearing model business consumer'
required: false
style: form
explode: true
schema:
type: string
description: 'Type to filter, can be one of:
1. LLC -> limited company
2. PLC -> publicly listed company
3. SOLETRADER -> sole trader
4. OPARTNRSHP -> ordinary partnership
5. LPARTNRSHP -> limited partnership
6. LLP -> limited liability partnership
7. INDIVIDUAL -> individual consumer
8. PCM_INDIVIDUAL -> partner clearing model individual consumer
9. PCM_BUSINESS -> partner clearing model business consumer'
enum:
- LLC
- PLC
- SOLETRADER
- OPARTNRSHP
- LPARTNRSHP
- LLP
- INDIVIDUAL
- PCM_INDIVIDUAL
- PCM_BUSINESS
- TRUST
- PREQUALIFIED
- name: verificationStatus
in: query
description: 'Verification Status to filter, can be one of:
1. UNVERIFIED -> no verification checks have been completed
2. VERIFIED -> verification checks completed satisfactorily
3. EXVERIFIED -> verification completed externally
4. REFERRED -> verification is pending manual review
5. DECLINED -> verification is complete with a negative result
6. REVIEWED -> verification check has been reviewed'
required: false
style: form
explode: true
schema:
type: string
description: 'Verification Status to filter, can be one of:
1. UNVERIFIED -> no verification checks have been completed
2. VERIFIED -> verification checks completed satisfactorily
3. EXVERIFIED -> verification completed externally
4. REFERRED -> verification is pending manual review
5. DECLINED -> verification is complete with a negative result
6. REVIEWED -> verification check has been reviewed'
enum:
- UNVERIFIED
- VERIFIED
- EXVERIFIED
- REFERRED
- DECLINED
- REVIEWED
- name: fromCreatedDate
in: query
description: Customers created after and on this date. Format is 'yyyy-MM-dd'T'HH:mm:ssZ' where Z is UTC offset. e.g 2017-01-28T01:01:01+0000
required: false
style: form
explode: true
schema:
type: string
description: Customers created after and on this date. Format is 'yyyy-MM-dd'T'HH:mm:ssZ' where Z is UTC offset. e.g 2017-01-28T01:01:01+0000
- name: toCreatedDate
in: query
description: Customers created before and on this date. Format is 'yyyy-MM-dd'T'HH:mm:ssZ' where Z is UTC offset. e.g 2017-01-28T01:01:01+0000
required: false
style: form
explode: true
schema:
type: string
description: Customers created before and on this date. Format is 'yyyy-MM-dd'T'HH:mm:ssZ' where Z is UTC offset. e.g 2017-01-28T01:01:01+0000
- name: page
in: query
description: Page to fetch (0 indexed)
required: false
style: form
explode: true
schema:
type: integer
format: int32
description: Page to fetch (0 indexed)
minimum: 0
- name: size
in: query
description: Size of Page to fetch
required: false
style: form
explode: true
schema:
type: integer
format: int32
description: Size of Page to fetch
exclusiveMinimum: 0
maximum: 500
- name: sortField
in: query
description: Sort by field. Sorted by createdDate if not present
required: false
style: form
explode: true
schema:
type: string
description: Sort by field. Sorted by createdDate if not present
pattern: (name|createdDate|id)
- name: sortOrder
in: query
description: 'Sorting order:
1. asc -> ascendant
2. desc -> descendant'
required: false
style: form
explode: true
schema:
type: string
description: 'Sorting order:
1. asc -> ascendant
2. desc -> descendant'
pattern: (asc|desc)
- name: externalRef
in: query
description: A list of external references to filter
required: false
deprecated: true
style: form
explode: true
schema:
$ref: '#/components/schemas/account.externalRef'
- name: externalReference
in: query
description: A list of external references to filter
required: false
style: form
explode: true
schema:
$ref: '#/components/schemas/account.externalReference'
example: externalReference[0].type
- name: name.type
in: query
description: 'WORD_MATCH - using word boundaries,
WORD_MATCH_ALPHANUMERIC - using word boundaries, but replaces non-alphanumeric characters in the search with a word boundary match,
PREFIX - same case prefix,
SUFFIX - same case suffix,
CONTAINS - same case contains
EXACT - same case exact
'
required: false
style: form
explode: true
schema:
type: string
description: 'WORD_MATCH - using word boundaries,
WORD_MATCH_ALPHANUMERIC - using word boundaries, but replaces non-alphanumeric characters in the search with a word boundary match,
PREFIX - same case prefix,
SUFFIX - same case suffix,
CONTAINS - same case contains
EXACT - same case exact
'
enum:
- WORD_MATCH
- WORD_MATCH_ALPHANUMERIC
- PREFIX
- SUFFIX
- CONTAINS
- EXACT
- name: name.value
in: query
required: false
style: form
explode: true
schema:
type: string
minLength: 1
- name: companyRegNumber
in: query
description: Customer registration number
required: false
style: form
explode: true
schema:
type: string
description: Customer registration number
- name: legalEntity
in: query
description: Customer legal entity
required: false
style: form
explode: true
schema:
type: string
description: Customer legal entity
enum:
- GB
- NL
- IE
- name: contractCounterparty
in: query
description: The Modulr business unit with which the customer has contracted
required: false
style: form
explode: true
schema:
type: string
description: Business unit the customer contracts with
enum:
- MFBV
- MFSL
- MUS
- name: addressLines
in: query
description: 'Set of the address lines. If specified, they must be present in the address line 1 or in the address line 2.
Search results by number may include numbers with any suffix'
required: false
style: form
explode: true
schema:
$ref: '#/components/schemas/account.addressLines'
- name: postCode
in: query
required: false
style: form
explode: true
schema:
type: string
- name: postTown
in: query
required: false
style: form
explode: true
schema:
type: string
- name: country
in: query
required: false
style: form
explode: true
schema:
type: string
- name: associateSearchCriteria.firstNameInitial
in: query
description: Person's first name initial
required: false
style: form
explode: true
schema:
type: string
description: Person's first name initial
maxLength: 1
minLength: 1
- name: associateSearchCriteria.lastName.type
in: query
description: 'WORD_MATCH - using word boundaries,
WORD_MATCH_ALPHANUMERIC - using word boundaries, but replaces non-alphanumeric characters in the search with a word boundary match,
PREFIX - same case prefix,
SUFFIX - same case suffix,
CONTAINS - same case contains
EXACT - same case exact
'
required: false
style: form
explode: true
schema:
type: string
description: 'WORD_MATCH - using word boundaries,
WORD_MATCH_ALPHANUMERIC - using word boundaries, but replaces non-alphanumeric characters in the search with a word boundary match,
PREFIX - same case prefix,
SUFFIX - same case suffix,
CONTAINS - same case contains
EXACT - same case exact
'
enum:
- WORD_MATCH
- WORD_MATCH_ALPHANUMERIC
- PREFIX
- SUFFIX
- CONTAINS
- EXACT
- name: associateSearchCriteria.lastName.value
in: query
required: false
style: form
explode: true
schema:
type: string
minLength: 1
- name: associateSearchCriteria.lastNamePrefix
in: query
description: Person's prefix
required: false
style: form
explode: true
schema:
type: string
description: Person's prefix
- name: associateSearchCriteria.dateOfBirth
in: query
description: 'Person''s date of birth '
required: false
style: form
explode: true
schema:
type: string
format: date
description: 'Person''s date of birth '
- name: associateSearchCriteria.additionalIdentifier.type
in: query
description: Type of additional personal identifier
required: false
style: form
explode: true
schema:
type: string
description: Type of additional personal identifier
enum:
- BSN
- name: associateSearchCriteria.additionalIdentifier.value
in: query
description: Personal identifier value
required: false
style: form
explode: true
schema:
type: string
description: Personal identifier value
minLength: 1
- name: associateTypes
in: query
description: 'List of types to filter, can be one of:
1. DIRECTOR -> director
2. PARTNER -> partner
3. CSECRETARY -> company secretary
4. SOLETRADER -> sole trader
5. BENE_OWNER -> beneficial owner
6. C_INTEREST -> controlling interest
7. INDIVIDUAL -> individual
8. PCM_INDIVIDUAL -> pcm individual
9. SIGNATORY -> signatory
9. TRUST_SETTLOR -> trust settlor
9. TRUST_BENEFICIARY -> trust beneficiary
10. TRUST_TRUSTEE -> trust trustee'
required: false
style: form
explode: true
schema:
$ref: '#/components/schemas/account.associateTypes'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/account.CustomerPageResponse'
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/account.MessageResponse'
security:
- HMAC: []
- TOKEN: []
post:
tags:
- Customers
summary: Create a new customer
description: 'This endpoint allows you to create a new customer. Creating a customer is a complex process with several dependencies, e.g: Directors, type of customer, legal specifications. For further information, please visit ''Creating a customer and account'' entry on our API documentation'
operationId: createCustomer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.CreateCustomerRequest'
required: true
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.Customer'
'400':
description: Validation errors
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/onboarding.MessageResponse'
security:
- HMAC: []
- TOKEN: []
/keys/applications/{applicationId}:
post:
tags:
- Customers
summary: Create a secure Customer Verification SDK Session
description: Creates a short-lived access key that authorises a Customer Verification session for the specified application.
operationId: createSdkKey
parameters:
- name: applicationId
in: path
required: true
style: simple
explode: false
schema:
type: string
responses:
'201':
description: Created
content:
'*/*':
schema:
$ref: '#/components/schemas/onboarding.ApplicationSdkKeyResponse'
'400':
description: Validation error
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/onboarding.MessageResponse'
'403':
description: Forbidden
content:
'*/*':
schema:
$ref: '#/components/schemas/onboarding.ApplicationSdkKeyResponse'
security:
- HMAC: []
- TOKEN: []
/applications:
post:
tags:
- Customers
summary: Create a New Onboarding Application
description: Creates a new application with a unique identifier with a status of NEW.
operationId: createApplication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.CreateApplicationRequest'
required: true
responses:
'201':
description: Created
content:
'*/*':
schema:
$ref: '#/components/schemas/onboarding.CreateApplicationResponse'
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/onboarding.MessageResponse'
'403':
description: Forbidden
content:
'*/*':
schema:
$ref: '#/components/schemas/onboarding.CreateApplicationResponse'
security:
- HMAC: []
- TOKEN: []
/applications/{applicationId}/verify:
post:
tags:
- Customers
summary: Submit an application for verification
description: Submits an application for initial KYB/KYC review once all required data is provided.
operationId: verifyApplication
parameters:
- name: applicationId
in: path
required: true
style: simple
explode: false
schema:
type: string
responses:
'200':
description: OK
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/onboarding.MessageResponse'
'403':
description: Forbidden
security:
- HMAC: []
- TOKEN: []
/applications/{applicationId}/submissions:
post:
tags:
- Customers
summary: Submit a business application for verification
description: Initiates KYB verification for a business application and returns a submission reference.
operationId: submitApplication
parameters:
- name: applicationId
in: path
required: true
style: simple
explode: false
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.SubmitApplicationResponse'
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/onboarding.MessageResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.SubmitApplicationResponse'
security:
- HMAC: []
- TOKEN: []
/applications/{applicationId}/finalisations:
post:
tags:
- Customers
summary: Mark application as closed for modification
description: Confirms all business and associate details have been submitted. The application will be processed for verification.
operationId: finaliseApplication
parameters:
- name: applicationId
in: path
required: true
style: simple
explode: false
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.FinaliseApplicationResponse'
'400':
description: Bad Request
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/onboarding.MessageResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.FinaliseApplicationResponse'
'404':
description: Application not found
content:
application/json:
schema:
$ref: '#/components/schemas/onboarding.FinaliseApplicationResponse'
security:
- HMAC: []
- TOKEN: []
/applications/{applicationId}/associates/{associateId}/submissions:
post:
tags:
- Customers
summary: Submit an associate for verification
description: Submits an associate for KYB verification and returns a submission reference.
operationId: submitAssociateForVerification
parameters:
- name: applicationId
in: path
required: true
style: simple
explode: false
schema:
type: string
- name: associateId
in: path
required: true
style: simple
explode: false
schema:
type: string
responses:
'200':
description: Submission successful
content:
'*/*':
schema:
$ref: '#/components/schemas/onboarding.SubmitAssociateResponse'
'400':
description: Validation error - invalid application or associate
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/onboarding.MessageResponse'
'403':
description: Forbidden - insufficient permissions
content:
'*/*':
schema:
$ref: '#/components/schemas/onboarding.SubmitAssociateResponse'
security:
- HMAC: []
- TOKEN: []
/customers/{customerId}/compliance/tax-identifiers:
put:
tags:
- Customers
summary: Create or update a customer’s tax identifiers
description: Creates or updates a customer’s tax identifiers, please provide list of countries where applicable
operationId: updateTaxIdentifiersByCustomerId
parameters:
- name: customerId
in: path
description: ID of customer
required: true
style: simple
explode: false
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/customercompliance.TaxIdentifiersRequest'
required: true
responses:
'204':
description: OK
'400':
description: Invalid Parameters
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/customercompliance.MessageResponse'
'403':
description: Incorrect permissions
security:
- HMAC: []
- TOKEN: []
/customers/{customerId}/compliance/identification-info:
put:
tags:
- Customers
summary: Create or update customer identification information
description: Creates or updates customer identification information, such as national or legal entity identifiers
operationId: updateCustomerIdentificationInfosByCustomerId
parameters:
- name: customerId
in: path
description: ID of customer
required: true
style: simple
explode: false
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/customercompliance.CustomerIdentificationInformationRequest'
required: true
responses:
'204':
description: No Content
'400':
description: Invalid Parameters
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/customercompliance.MessageResponse'
'403':
description: Incorrect permissions
security:
- HMAC: []
- TOKEN: []
/customers/{customerId}/compliance/associates/{associateId}/tax-residencies:
put:
tags:
- Customers
summary: Create or update the list of countries where an associate is considered tax-resident
description: Creates or updates the list of countries where an associate is considered tax-resident, supporting compliance with CRS/FATCA and local tax rules
operationId: updateTaxResidenciesForAssociate
parameters:
- name: customerId
in: path
description: ID of customer
required: true
style: simple
explode: false
schema:
type: string
- name: associateId
in: path
description: ID of associate
required: true
style: simple
explode: false
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/customercompliance.TaxResidenciesRequest'
required: true
responses:
'204':
description: OK
'400':
description: Invalid Parameters
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/customercompliance.MessageResponse'
'403':
description: Incorrect permissions
security:
- HMAC: []
- TOKEN: []
/customers/{customerId}/compliance/associates/{associateId}/tax-identifiers:
put:
tags:
- Customers
summary: Create or update tax identifiers for an associate
description: Creates or updates an associate’s tax identifiers, specific types are available for Spain, France and Netherlands, use type TIN for all other country codes
operationId: updateTaxIdentifiersForAssociate
parameters:
- name: customerId
in: path
description: ID of customer
required: true
style: simple
explode: false
schema:
type: string
- name: associateId
in: path
description: ID of associate
required: true
style: simple
explode: false
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/customercompliance.TaxIdentifiersRequest'
required: true
responses:
'204':
description: OK
'400':
description: Invalid Parameters
content:
'*/*':
schema:
type: array
items:
$ref: '#/components/schemas/customercompliance.MessageResponse'
'403':
description: Incorrect permissions
security:
- HMAC: []
- TOKEN: []
/customers/{customerId}/compliance/associates/{associateId}/personal-info:
put:
tags:
- Customers
summary: Create or update an associate’s personal details
description: Creates or updates an associate’s personal details, such as birth data, nationality, and sex
operationId: updatePersonalInformationForAssociate
parameters:
- name: customerId
in: path
description: ID of customer
required: true
style: simple
explode: false
schema:
type: string
- name: associateId
in: path
description: ID of associate
required: true
style: simple
explode: false
schema:
type: string
requestBody:
content:
application/js
# --- truncated at 32 KB (182 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/modulr/refs/heads/main/openapi/modulr-customers-api-openapi.yml