Outgoing Transfers
Outgoing Transfers are the transactions that decrease the balance of the related account.
There are two types of outgoing transfers. The transferType field reflects these types:
1. Internal transfers: You can create an internal transfer between IF accounts. When an internal outgoing transfer is created, the IF Platform creates an incoming transfer on the receiver account automatically. incomingTransferId reflects the created incoming transfer.
2. External transfers: External transfers are the transactions submitted to a Service Provider to be sent via an external payment scheme such as SWIFT or SEPA. The transferType field includes the payment scheme for external transfers.
Relation with an Incoming Transfer
The diagram shown below explains when an incomingTransferId of an outgoing transfer will be present to expose the relationship between them.
Outgoing Transfer Schemes
Outgoing transfer schemes may vary depending on the account, country and, in some cases, the bank of the beneficiary’s bank account. The IF Platform offers an API to list all available transfer schemes for the given account and country.
GET /accounts/{{accountId}}/outgoing-transfer-schemes/{{destinationCountry}}
There are two path parameters that this endpoint expects:
- accountId: source account of transfer
- destinationCountry: country of the beneficiary bank account (capital ISO-2 country codes i.e. GB)
{
"workflow": {},
"data": {
"transferSchemes": [
"faster-payments",
"chaps"
]
},
"connect": {},
"metadata": {}
}
Transfer Reasons
There are predefined reasons by country for outgoing transfers. The ID of a selected reason must be provided on creation. Therefore, there is an endpoint for querying available transfer reasons by country.
GET /accounts/{accountId}/transfer-reasons/{{country}}
{
"workflow": {},
"data": {
"transferReasons": [{
"id": "00000000-0000-0000-0000-000000000000",
"description": "Payment for goods and services"
}]
},
"connect": {},
"metadata": {}
}
GET /transfer-reasons/{{country}} - This endpoint is DEPRECATED
{
"workflow": {},
"data": {
"transferReasons": [{
"id": "00000000-0000-0000-0000-000000000000",
"description": "Payment for goods and services"
}]
},
"connect": {},
"metadata": {}
}
Date Metadata
GET /accounts/{{accountId}}/outgoing-transfer-date-metadata/{{transferScope}}/{{transferScheme}}
Each Outgoing Transfer is created for release first available time/date if there is no predefined scheduling set. This endpoint returns the first available date, cutoff time for that date and unavailable dates. This information can, subsequently on creation, be used to create a scheduled outgoing transfer for a future date.
{
"workflow": {},
"data": {
"nextAvailableDate": "2020-01-01",
"nextCutoffDateTime": "2020-01-01T10:00:00",
"unavailableDates": [
"2020-01-04",
"2020-01-05"
]
},
"connect": {},
"metadata": {}
}
Create Outgoing Transfer
POST /outgoing-transfers
The process of creating an Outgoing Transfer is executed using a single workflow. For simplicity, we have called this the Standard Workflow to create an Outgoing Transfer.
This endpoint can be also called in the ‘dry run’ mode. In the ‘dry run’ mode, a Transfer is not actually created, it is merely validated and the associated fee is calculated. Therefore you can call this endpoint to learn about the effects and to gain certainty before creating the transfer. The dryRun parameter is optional and defaults to false.
In addition, the 'transferDate' field is not required for each outgoing transfer request. If this field is not included, the transaction will be scheduled for the next available time/date. This field should only be utilised to schedule the transfer for a specific date.
The contents of the destination field are polymorphic. It depends on whether the desired transaction is internal or external. Examples for both cases:
"scope": "internal",
"scheme": null,
"destination": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
}
"scope": "external",
"scheme": "faster-payments",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
}
1. Client Direct: A Transfer is created on the Service Provider that the relevant source account is connected to.
Dry run example:
{
"workflow": {
"code": "client.direct",
"dryRun": true,
"pricing": {
"sourcingMethod": "explicit",
"enabled": true,
"chargingType": "fee",
"chargingMethod": "on-source"
}
},
"data": {
"outgoingTransfer": {
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"currency": "GBP",
"amount": 100.00,
"scope": "external",
"scheme": "faster-payments",
"description": "API dryRun",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"schemeAttributes": {
"sender-account-number": "",
"trade-order-id": "",
"trade-time": "",
"trade-currency": "",
"trade-amount": "",
"trade-name": "",
"trade-count": "",
"goods-carrier": "",
"service-detail": "",
"service-time": ""
}
},
"pricing": {
"type": "ratio",
"ratio": "0.05",
"boundaryCurrency": "GBP",
"minimumAmount": 12.00,
"maximumAmount": 100000.00
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct",
"dryRun": true,
"pricing": {
"sourcingMethod": "explicit",
"enabled": true,
"chargingType": "fee",
"chargingMethod": "on-source"
}
},
"data": {
"outgoingTransfer": {
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"currency": "GBP",
"amount": 100.00,
"feeCurrency": "GBP",
"feeAmount": 12.00,
"description": "API dryRun",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"originalTransferDate": "2021-04-19",
"rollCount": 0,
"transferCustomReason": null,
"totalAmount": 112.00,
"ownerType": "client",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct",
"dryRun": true,
"pricing": {
"sourcingMethod": "implicit"
}
},
"data": {
"outgoingTransfer": {
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"currency": "GBP",
"amount": 100.00,
"scope": "external",
"scheme": "faster-payments",
"description": "API dryRun",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
}
}
},
"connect": {},
"metadata": {}
}
Create Transfer example:
{
"workflow": {
"code": "client.direct",
"dryRun": false,
"pricing": {
"sourcingMethod": "explicit",
"enabled": true,
"chargingType": "fee",
"chargingMethod": "on-source"
}
},
"data": {
"outgoingTransfer": {
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"currency": "GBP",
"amount": 100,
"scope": "external",
"scheme": "faster-payments",
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"schemeAttributes": {}
},
"pricing": {
"type": "ratio",
"ratio": "0.05",
"boundaryCurrency": "GBP",
"minimumAmount": 12,
"maximumAmount": 100000
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct",
"dryRun": false,
"pricing": {
"sourcingMethod": "explicit",
"enabled": true,
"chargingType": "fee",
"chargingMethod": "on-source"
}
},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "pending",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "not-checked",
"balanceCheckStatus": "not-checked",
"authorizationStatus": "not-required"
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct",
"dryRun": false,
"pricing": {
"sourcingMethod": "explicit",
"enabled": true,
"chargingType": "fee",
"chargingMethod": "on-source"
}
},
"data": {
"outgoingTransfer": {
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"currency": "GBP",
"amount": 100,
"scope": "internal",
"scheme": null,
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"destination": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
}
},
"pricing": {
"type": "fixed",
"amount": "0.50",
"currency": "GBP"
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct",
"dryRun": false,
"pricing": {
"sourcingMethod": "implicit"
}
},
"data": {
"outgoingTransfer": {
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"currency": "GBP",
"amount": 100,
"scope": "external",
"scheme": "faster-payments",
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
}
}
},
"connect": {},
"metadata": {}
}
Scheme Attribute List:
Currency | Description | Attribute Key | Validataion |
---|---|---|---|
KRW | Remitter bank account number | sender-account-num ber | Required |
CNY | Trade order id | trade-order-id | Required for CNY, max 32 chars |
CNY | Trade time | trade-time | Required for CNY, dd/MM/yyyy |
CNY | Trade currency | trade-currency | Required for CNY, 3 letter currency code |
CNY | Trade currency | trade-amount | Required for CNY, amount in 2 precision |
CNY | Trade name | trade-name | Required for CNY, max 128 chars, if transfer reason is "Trade Settlement for Services (CSTRDR)" then there is a list of enumerated values*, otherwise free text |
CNY | Trade count | trade-count | Required for CNY, number |
CNY | Goods carrier | goods-carrier | Required for CNY, required only if transfer reason is "Trade Settlement for Goods (CGODDR)", max 64 chars |
CNY | Service detail | service-detail | Required for CNY, required only if transfer reason is "Trade Settlement for Services (CSTRDR)", max 128 chars |
CNY | Service time | service-time | Required for CNY, required only if transfer reason is "Trade Settlement for Services (CSTRDR)", max 64 chars |
Update Outgoing Transfer
PATCH /outgoing-transfers/{id}
There is single workflow to update outgoing transfers.
1. Direct: using this workflow, certain editable fields of Transfers can be updated.
Currently, status and authorizationStatus can be updated.
{
"workflow": {
"code": "client.direct"
},
"data": {
"outgoingTransfer": {
"status": "cancelled"
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct"
},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "cancelled",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "not-checked"
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct"
},
"data": {
"outgoingTransfer": {
"requirementConfiguration": {
"authorizationStatus": "fulfilled"
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "client.direct"
},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "pending",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "fulfilled"
}
}
},
"connect": {},
"metadata": {}
}
Get an Outgoing Transfer
GET /outgoing-transfers/{id}
{
"workflow": {},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "pending",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"incomingTransferId": null,
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"returned": false,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"beneficiary": {
"fullName": "John Doe",
"identity": {
"type": "individual",
"country": null,
"identifications": null,
"givenName": "John",
"familyName": "Doe",
"birthDate": null
},
"address": {
"country": "GB",
"city": "London",
"street": "1",
"houseNumber": "1",
"refinement": "London St"
},
"account": {
"accountHolderName": null,
"country": "GB",
"currency": "EUR",
"routingCodes": {
"bic": "TESTGB12"
},
"accountNumber": null,
"iban": "GB96TEST71161299304760",
"ledgerNumber": null,
"alias": "EUR account"
},
"title": "John Doe Beneficiary"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "not-checked"
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20240131-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2024-01-31",
"status": "completed",
"currency": "EUR",
"amount": 16.68,
"feeCurrency": "EUR",
"feeAmount": 0.00,
"description": "test",
"incomingTransferId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2024-01-31",
"rollCount": 0,
"returned": false,
"totalAmount": 16.68,
"scope": "internal",
"destination": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "not-required"
},
"beneficiary": {
"fullName": "Merve Testlhv",
"identity": {
"type": "individual",
"country": null,
"identificationNumbers": {
"passport": "000000",
"identity-card": "000000",
"driving-licence": "000000"
},
"identifications": null,
"givenName": "Merve",
"familyName": "Testlhv",
"birthDate": "1993-01-01"
},
"address": null,
"account": {
"accountHolderName": null,
"country": "EE",
"currency": "EUR",
"routingCodes": {
"bic": "LHVBEE22"
},
"accountNumber": null,
"iban": "EE937777000027746655",
"ledgerNumber": null,
"alias": "saving account lhv eur"
},
"title": "Merve Testlhv"
},
"ownerType": "client"
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20240116-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2024-01-16",
"status": "completed",
"currency": "GBP",
"amount": 675.00,
"feeCurrency": "GBP",
"feeAmount": 2.00,
"description": "BeneficiaryTesting",
"incomingTransferId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2024-01-16",
"rollCount": 0,
"returned": true,
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"totalAmount": 677.00,
"scheme": "local",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryId": "00000000-0000-0000-0000-000000000000",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "not-required",
"authorizationStatus": "not-required"
},
"beneficiary": {
"fullName": "Serkan Akagunduz",
"identity": {
"type": "individual",
"country": null,
"identifications": null,
"givenName": "Serkan",
"familyName": "Akagunduz",
"birthDate": "2000-02-09"
},
"address": {
"country": "GB",
"postalCode": "234578",
"city": "London",
"street": "Harry Potter",
"houseNumber": "67"
},
"account": {
"accountHolderName": null,
"country": "GB",
"currency": "GBP",
"routingCodes": {
"sort-code": "040720"
},
"accountNumber": "00000718",
"iban": null,
"ledgerNumber": null,
"alias": "Serkan Akagunduz GBP"
},
"title": "Serkan Akagunduz"
},
"ownerType": "client"
}
},
"connect": {},
"metadata": {}
}
List Outgoing Transfers
GET/outgoing-transfers
Supported query parameters:
parameter | description |
---|---|
metadata.page.number | 0-indexed, default=0 |
metadata.page.size | default=10 |
data.outgoingTransfer.status | one of pending, processing, released, completed, cancelled, failed |
data.outgoingTransfer.transactionNumber | unique transaction number |
data.outgoingTransfer.amountFrom | minimum amount |
data.outgoingTransfer.amountTo | maximum amount |
data.outgoingTransfer.currency | ISO 4217 currency code |
data.outgoingTransfer.clientId | UUID of client |
data.outgoingTransfer.accountId | UUID of account |
data.outgoingTransfer.serviceProvider | |
data.outgoingTransfer.serviceProviderId | |
data.outgoingTransfer.serviceProviderReference | |
data.outgoingTransfer.transferDateFrom | minimum transfer date |
data.outgoingTransfer.transferDateTo | maximum transfer date |
data.outgoingTransfer.description | free text description |
{
"workflow": {},
"data": {
"outgoingTransfers": [
{
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "pending",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "not-checked"
}
}
]
},
"connect": {},
"metadata": {
"page": {
"size": 20,
"number": 0,
"totalElements": 1,
"totalPages": 1
}
}
}
Webhooks
Outgoing transfer webhooks have "outgoing-transfers" in the module field in the webhook container object.
There are eight distinct types of webhook sent for outgoing-transfers as follows:
- outgoing-transfer-created
- outgoing-transfer-compliance-in-review
(only this webhook can have an optional complianceCheck object in payload) - outgoing-transfer-processing
- outgoing-transfer-released
- outgoing-transfer-completed
- outgoing-transfer-cancelled
- outgoing-transfer-failed
- outgoing-transfer-returned : This webhook is sent when the beneficiary is not accepted by the destination bank
These types are exposed in the webhook.type field.
{
"webhook": {
"module": "outgoing-transfers",
"type": "outgoing-transfer-compliance-in-review"
},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "pending",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "not-required"
}
},
"complianceCheck": {
"status": "in-review",
"procedureResults": {
"transaction-monitoring": {
"result": null
}
}
}
},
"connect": {},
"metadata": {}
}
{
"webhook": {
"module": "outgoing-transfers",
"type": "outgoing-transfer-completed"
},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "completed",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "not-required"
}
}
},
"connect": {},
"metadata": {}
}
{
"webhook": {
"module": "outgoing-transfers",
"type": "outgoing-transfer-returned"
},
"data": {
"outgoingTransfer": {
"id": "00000000-0000-0000-0000-000000000000",
"transactionNumber": "20210419-000000",
"clientId": "00000000-0000-0000-0000-000000000000",
"transferDate": "2021-04-19",
"status": "completed",
"currency": "GBP",
"amount": 100,
"feeCurrency": "GBP",
"feeAmount": 12,
"description": "freetext",
"returned": true,
"incomingTransferId": "00000000-0000-0000-0000-000000000000",
"transferReasonId": "00000000-0000-0000-0000-000000000000",
"transferCustomReason": null,
"originalTransferDate": "2021-04-19",
"cutOffDateTime": "2021-04-19T09:00:00",
"rollCount": 0,
"totalAmount": 112,
"ownerType": "client",
"scheme": "sepa",
"scope": "external",
"destination": {
"type": "beneficiary-bank-account",
"beneficiaryBankAccountId": "00000000-0000-0000-0000-000000000000"
},
"source": {
"type": "client-account",
"accountId": "00000000-0000-0000-0000-000000000000"
},
"requirementConfiguration": {
"transferDateStatus": "fulfilled",
"complianceCheckStatus": "fulfilled",
"balanceCheckStatus": "fulfilled",
"authorizationStatus": "not-required"
}
}
},
"connect": {},
"metadata": {}
}
Compliance Check
Outgoing transfers can have compliance checks. Compliance checks can allow or deny the transaction depending on its result. There are two endpoints for compliance checks of outgoing transfers.
Get Compliance Check
GET /outgoing-transfers/{id}/compliance-check
Supported path variable:
id:
ID of outgoing transfer in UUID format
Sample Response:
The response can have multiple procedureResults depending on configurations. The API supports transaction-monitoring procedures. As a result of the procedureResults, procedures can have these result values below:
Acceptable results of transaction-monitoring:
- all-passed
- soft-stop
- hard-stop
- hard-stop-accepted
- hard-stop-rejected
The status of the compliance check can be changed depending on the summarised result of procedure results. status can have these values below:
- in-review
- approved
- rejected
- skipped
{
"workflow": {},
"data": {
"complianceCheck": {
"status": "approved",
"procedureResults": {
"transaction-monitoring": {
"result": "all-passed"
}
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {},
"data": {
"complianceCheck": {
"status": "in-review",
"procedureResults": {
"transaction-monitoring": {
"result": null
}
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {},
"data": {
"complianceCheck": {
"status": "skipped",
"procedureResults": {}
}
},
"connect": {},
"metadata": {}
}
Update Compliance Check
PATCH /outgoing-transfers/{id}/compliance-check
There is a single workflow to update compliance checks of outgoing transfers.
1. Direct: The direct workflow aims to change the result of procedure. The results can be changed only if the configurations are settled to manage compliance checks externally.
Sample Request and Response:
{
"workflow": {
"code": "direct"
},
"data": {
"complianceCheck": {
"procedureResult": { // single procedure to update
"procedure": "transaction-monitoring",
"result": "hard-stop-rejected"
}
}
},
"connect": {},
"metadata": {}
}
{
"workflow": {
"code": "direct"
},
"data": {
"complianceCheck": {
"status": "rejected",
"procedureResults": {
"transaction-monitoring": {
"result": "hard-stop-rejected"
}
}
}
},
"connect": {},
"metadata": {}
}
Updated 3 months ago