Create recipients
Create a recipient (beneficiary) so that you can create an order. A recipient represents an account that you're making a payment to.
How it works
To create a recipient, you need to validate and confirm their bank account details.
When validating recipient details, we'll verify the format of account and bank identifiers. Where services are available to verify recipient details, we run additional checks. For example, the Confirmation of Payee service in the UK checks the recipient name and account details match.
Once a recipient's details have been validated, you'll confirm the recipient's details. Confirming a validated recipient transitions them to an AUTHORISED state. This means funds can be sent to this recipient.
For more information about the type of details to provide depending on the country that you're sending money to, see About preferred recipient details.
Validate a recipient
Use this request to validate a recipient's bank details before you confirm adding them to your account. Specify the recipient's account details including currency, their bank's details including identifiers and country, and payment purpose codes where relevant. For further details on routing information requirements view the payment purpose codes guide.
This endpoint also performs a check on the details of the account for enrolled recipients. Note that details are only checked in production. In sandbox, the validation object in the response will contain mock data.
Request
curl -i -X POST \
'https://api.equalsmoney.com/v2/recipients/validate?accountId=F12345' \
-H 'Authorization: ApiKey YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"accountIdentifier": "5555555",
"bankIdentifier": "123456",
"name": "John Frank",
"displayName": "Electrician",
"type": "individual",
"defaultReference": "Paying my savings account",
"currencyCode": "EUR",
"intermediaryBankIdentifier": "QBLCCCCV",
"paymentPurposeCode": "BKF",
"defaultPurpose": "Funding my own account",
"subscribedEmails": [
{
"name": "John",
"email": "example@email.com"
}
],
"address": {
"countryCode": "GB",
"address": "123 Main St",
"city": "London",
"postcode": "SW1A 1AA"
}
"bankAddress": {
"bankName": "Brilliant Bank",
"fullBankName": "Brilliant Bank Plc",
"address": "1 Churchill Place, London, E14 5HP",
"city": "London",
"postcode": "E14 5HP",
"countryCode": "GB"
}
}'
curl -i -X POST \
'https: //api.equalsmoney.com/v2/recipients/validate?accountId=F12345' \
-H 'Authorization: ApiKey YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"accountIdentifier": "string",
"bankIdentifier": "string",
"name": "string",
"displayName": "string",
"type": "string",
"defaultReference": "string",
"currencyCode": "string",
"intermediaryBankIdentifier": "string",
"paymentPurposeCode": "string",
"defaultPurpose": "string",
"subscribedEmails": [ // array
{
"name": "string",
"email": "string"
}
],
"address": { //object
"countryCode": "string",
"address": "string",
"city": "string",
"postcode": "string"
},
"bankAddress": { //object
"bankName": "string",
"fullBankName": "string",
"address": "string",
"city": "string",
"postcode": "string",
"countryCode": "string"
}
}'
Query parameters
Parameter | Description |
---|---|
accountId string required |
The ID of the account that you're working with. Allowable values: An existing accountId |
Request body schema
Parameter | Description |
---|---|
accountIdentifier string required |
This represents the identifier of the recipient's account, such as an Account Number or IBAN. Example: 55555555 |
bankIdentifier string required |
This represents the identifier of the recipient's bank, such as an a Sort Code, BIC or Routing Number. Example: 123456 |
name string required |
The name of the recipient. Example: John Frank |
displayName string required |
Display name for the payee. Example: Electrician |
type string required |
The type of account, either individual ,business or charity . |
defaultReference string required |
This is the default reference which will be attached to payments made to the recipient if no reference is defined at the point of making a payment. Where reference is used to form part of an account identifier, this field can be used to form part of an Account details check. Example: Paying my savings account |
currencyCode string required |
The currency code of which the recipient will receive payments in, ISO-4217 format. Example: EUR |
intermediaryBankIdentifier string |
Identifier for intermediary bank. Example: QBLCCCCV |
paymentPurposeCode string |
This represents a pre defined purpose for the Payment, more details on payment purpose codes guide. Example: BKF |
defaultPurpose string |
Further free text description for the purpose of the payment Example: Funding my own account |
subscribedEmails array |
This defines the Email addresses who will be sent notifications of payments to this recipient. This array requires a name and an email as input. |
address object required |
The recipient address object. |
address.countryCode string required |
Country code for the recipient's address. Example: GB |
address.address string required |
Street address of the recipient. Example: 123 Main St |
address.city string required |
City of the recipient's address. Example: London |
address.postcode string required |
Postal code of the recipient's address. Example: SW1A 1AA |
bankAddress object required |
The recipient's bank address object. |
bankAddress.bankName string required |
Bank name of the recipient's bank. Example: Brilliant Bank |
bankAddress.fullBankName string required |
Full bank name of the recipient's bank. Example: Brilliant Bank PLC |
bankAddress.address string required |
Street address of the recipient's bank. Example: 123 Main St |
bankAddress.city string required |
City of the recipient's bank address. Example: London |
bankAddress.postcode string required |
Postal code of the recipient's bank address. Example: SW1A 1AA |
bankAddress.countryCode string required |
Country code for the recipient's bank address. Example: GB |
Response
If your request is successful, you will receive a 200 OK
response with the following structure:
{
"id": "123",
"accountId": "F60600",
"status": "unverified",
"type": "individual",
"name": "John Frank",
"displayName": "Electrician",
"subscribedEmails": [
{
"name": "John",
"email": "example@email.com"
}
],
"currencyCode": "EUR",
"accountIdentifier": "GB95SPPV23188424911122",
"bankIdentifier": "SPPVGB2LXXX",
"intermediaryBankIdentifier": "QBLCCCCV",
"paymentPurposeCode": "BKF",
"defaultPurpose": "Funding my own account",
"defaultReference": "Paying my savings account",
"verificationMethod": "sms_otp",
"address": {
"countryCode": "GB",
"address": "123 Main St",
"city": "London",
"postcode": "SW1A 1AA"
},
"bankAddress": {
"bankName": "Big Bank",
"fullBankName": "Big Bank Plc",
"countryCode": "GB",
"address": "456 High St",
"city": "London",
"postcode": "SW1A 1BB"
},
"validation": {
"nameMatch": false,
"reason": "String is a close match to the account name",
"reasonCode": "N200",
"actualName": "John Frans",
"displayMessage": "The name provided is a close match to the account name.",
},
"dateLastPaid": "string",
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string",
"archivedAt": "string"
}
{
"id": "string",
"accountId": "string",
"status": "string",
"type": "string",
"name": "string",
"displayName": "string",
"subscribedEmails": [
{
"name": "string",
"email": "string"
}
],
"currencyCode": "string",
"accountIdentifier": "string",
"bankIdentifier": "string",
"intermediaryBankIdentifier": "string",
"paymentPurposeCode": "string",
"defaultPurpose": "string",
"defaultReference": "string",
"verificationMethod": "string",
"address": {
"countryCode": "string",
"address": "string",
"city": "string",
"postcode": "string"
},
"bankAddress": {
"bankName": "string",
"fullBankName": "string",
"countryCode": "string",
"address": "string",
"city": "string",
"postcode": "string"
},
"validation": {
"nameMatch": boolean,
"reason": "string",
"reasonCode": "string",
"actualName": "string",
"displayMessage": "string",
},
"dateLastPaid": "string",
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string",
"archivedAt": "string"
}
Reason codes
Reason code categories for matching:
- N0xx : General match.
- N1xx : Account not supported or opt out scenarios.
- N2xx : Account details issues (e.g., incorrect number, invalid reference, no name match or close name match).
- N3xx : External factors (e.g. account switched).
- N5xx : External factors (e.g. downstream server side error).
Equals Reason Code | Reason Message | Long Description | Account Name Returned? |
---|---|---|---|
N000 | Match | Account details match. | No |
N100 | Account Not Supported. | The account is not supported for service by the responder. | No |
N101 | Opted Out Of Service. | The payee has opted out of service. | No |
N102 | Sort Code Not Supported. | The sort code provided is not supported at the endpoint. | No |
N103 | Currency Not Supported. | The currency provided does not require account details validation. | No |
N104 | Market Not Supported. | The Market is currently not supported. | No |
N200 | Close Match. | The account name closely matches the records but is not exact. | Yes |
N201 | Account Name Does Not Match. | The account name provided does not match the records. | No |
N202 | Incorrect Account Number. | The account number provided does not exist. | No |
N203 | Invalid Customer Reference. | The secondary reference data does not correspond to an account. | No |
N204 | Account Type Does Not Match Business. | The account type provided does not match the records. | No |
N205 | Account Type Does Not Match Individual. | The account type provided does not match the records. | No |
N206 | Business Account Type Does Not Match, Account Name Close. | The account type provided does not match the records, and the name is close-matched. | Yes |
N207 | Individual Account Type Does Not Match, Account Name Close. | The account type provided does not match the records, and the name is close-matched. | Yes |
N300 | Account Switched. | The account has been switched to another provider. | No |
N400 | Recipient predates mandatory validation. | Recipient created before account details validation was available and hasn't undergone current checks. | No |
N500 | Server side error. | There has been a downstream server side error. | No |
Testing Confirmation of Payee (UK Service)
This table lists the predefined test accounts that should be used to execute specific Confirmation of Payee test scenarios in the sandbox. Each account is configured for a different purpose, such as simulating successful matches, close matches, no matches, or invalid configurations. Where the Reference column is N/A, the reference field should be empty in order for the test scenario to work as expected. We will populate the empty reference with the name of the product you are working on.
Test Scenario | Name | accountIdentifier | bankIdentifier | Type | Reference |
---|---|---|---|---|---|
Matched response testing | Mr Lance Henry | 33264517 | 302414 | Individual | N/A |
Business matched response | May West Ltd | 44264517 | 302414 | Business | N/A |
Individual close match testing | Mrs Close Match | 34264517 | 302414 | Individual | N/A |
Business close match testing | Close Match LT | 30264517 | 302414 | Business | N/A |
Incorrect account number Test | Mr Lance Henry | 99999999 | 302414 | Individual | N/A |
Unsupported account type | Max Holding | 55124568 | 302414 | Individual | N/A |
Switched account status | Matrix Limited | 69124578 | 302414 | Business | N/A |
Different bankIdentifier testing | Mrs Penny Jones | 59124578 | 302415 | Individual | N/A |
Common Name Testing | Mr John Smith | 79924579 | 302414 | Individual | N/A |
Individual SRD testing | Mr Zunaid Malik | 44424578 | 302417 | Individual | HOM98765 |
Business SRD testing | Acme Limited | 43424578 | 302416 | Business | ILA-12345 |
Individual SRD invalid testing | Mr Forest Gump | 65724578 | 302418 | Individual | ILA-65432 |
Business SRD invalid testing | Green Trust Limited | 19124578 | 302414 | Business | A-302414 |
Individual SRD mismatch | Mr Srd Close | 29124578 | 302414 | Individual | A-29124578 |
Business SRD mismatch | Srd Close LTD | 39124578 | 302414 | Business | A-39124578 |
Confirm a recipient
Request
Use this request to confirm a validated recipient, which will create them on the specified account. If account details verification is required and fails during the validation step, this must be presented to the customer before confirming the recipient.
curl -i -X POST \
'https://api.equalsmoney.com/v2/recipients/8lqccfgmo/confirm?accountId=F12345' \
-H 'Authorization: ApiKey YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"verificationMethod": "sms_otp",
}'
curl -i -X POST \
'https://api.equalsmoney.com/v2/recipients/{recipientId}/confirm?accountId={accountId}' \
-H 'Authorization: ApiKey YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"verificationMethod": "string",
}'
Query parameters
Parameter | Description |
---|---|
accountId string required |
The ID of the account that you're creating a recipient for. Allowable values: An existing accountId |
recipientId string required |
The ID of the recipient. Allowable values: An existing recipientId |
Request body schema
Parameter | Description |
---|---|
verificationMethod string required |
The method used for verifying the recipient. Allowable values: sms_otp , phone , email , biometrics , other |
Response
Upon a successful request, you will receive a 201 Created
response, confirming that the recipient creation process has been completed. If you've set up webhooks, you'll receive a RecipientCreated
event when this happens.
{
"id": "8lqccfgmo",
"accountId": "F60600",
"status": "AUTHORISED",
"type": "individual",
"name": "John Frank",
"displayName": "Electrician",
"subscribedEmails": [
{
"name": "John",
"email": "example@email.com"
}
],
"currencyCode": "EUR",
"accountIdentifier": "GB95SPPV23188424911122",
"bankIdentifier": "SPPVGB2LXXX",
"intermediaryBankIdentifier": "QBLCCCCV",
"paymentPurposeCode": "BKF",
"defaultReference": "Paying my savings account",
"defaultPurpose": "Funding my own account",
"verificationMethod": "sms_otp",
"address": {
"countryCode": "GB",
"address": "123 Main St",
"city": "London",
"postcode": "SW1A 1AA"
},
"bankAddress": {
"bankName": "Big Bank",
"fullBankName": "Big Bank Plc",
"countryCode": "GB",
"address": "456 High St",
"city": "London",
"postcode": "SW1A 1BB"
},
"validation": {
"nameMatch": false,
"reason": "not checked",
"reasonCode": "N101",
"actualName": "John Frans",
"displayMessage": "Opted out of check",
},
"dateLastPaid": "string",
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string",
"archivedAt": "string"
}
{
"id": "string",
"accountId": "string",
"status": "string",
"type": "string",
"name": "string",
"displayName": "string",
"subscribedEmails": [
{
"name": "string",
"email": "string"
}
],
"currencyCode": "string",
"accountIdentifier": "string",
"bankIdentifier": "string",
"intermediaryBankIdentifier": "string",
"paymentPurposeCode": "string",
"defaultPurpose": "string",
"defaultReference": "string",
"verificationMethod": "string",
"address": {
"countryCode": "string",
"address": "string",
"city": "string",
"postcode": "string"
},
"bankAddress": {
"bankName": "string",
"fullBankName": "string",
"countryCode": "string",
"address": "string",
"city": "string",
"postcode": "string"
},
"validation": {
"nameMatch": boolean,
"reason": "string",
"reasonCode": "string",
"actualName": "string",
"displayMessage": "string",
},
"dateLastPaid": "string",
"createdBy": "string",
"createdAt": "string",
"updatedBy": "string",
"updatedAt": "string",
"archivedAt": "string"
}
What's next?
Now that you've created a recipient, you're ready to create a currency quote.