Transfer Money

Initiating a Payment

The Initiate outflow payment endpoint allows you to transfer funds from your balance to a beneficiary or recipient. Currently the API only supports the same currency transfer. For example, transferring funds from your GBP balance to a GBP beneficiary’s bank account.

When initiating an outflow payment, you must provide a unique reference. The reference is used to identify the transaction and prevent duplicate payments. Make sure the reference is unique, and consistently used across your system.

The following status applies to our outflow payments

StatusDescriptionWebhook Event
submittedAn outflow payment remains in this state until it's picked up for review (in_review status) or submitted to the bank (processing status)Not Applicable
processingAn outflow payment status changes to processing after the payment has been submitted to the destination institutionNot Applicable
in_reviewIn this state, you may need to provide additional information requested by HarpFi as part of the transaction risk assessment. This would be communicated via emailNot Applicable
cancelledAn outflow payment status is cancelled when the payment is cancelled for internal reasons or per request of the customer (the business)payment.outflow.cancelled
failedAn outflow payment status is failed when it could not be processed after submitting to the destination institution. The status description field captures the details and reason for failurepayment.outflow.failed
successfulAn outflow payment status becomes successful after it has successfully been processed by the destination institutionpayment.outflow.success
reversedAn outflow payment can be reversed after initially being successful. This usually happens as a result of a bank glitch or issues with the destination bank, accountpayment.outflow.reversed

Request Body

POSThttps://api.harpfi.com/v1/payments/outflows

Request Body Specification

Field KeyTypeLengthDescriptionRequired
referencestring50A unique reference identifier for the payment transactionYes
destinationAmountnumber-The amount to be transferred to the beneficiaryYes
destinationCurrencystring3ISO 4217 currency code for the destination amount (e.g. "USD")Yes
purposeCodestring20Payment purpose code. Required for certain countries due to regulatory requirements-
descriptionstring100Description of the paymentNo
statementDescriptorstring50Text that appears on the beneficiary's bank statementNo
senderobject-Information about the payment sender. Do not include if your business is the senderNo
sender.typestring20Type of sender. Must be business_entityYes
sender.referencestring50Reference identifier for the sender entityYes
beneficiaryobject-Information about the payment beneficiaryYes
beneficiary.referencestring50Reference identifier for the beneficiaryYes
beneficiary.relationshipstring20Relationship between sender and beneficiary; This must be one of the slugs from the relationships list (e.g. "contractor", "vendor")No
paymentDocumentsArray5file identifier of payment documents, invoices, and evidence uploaded using the upload file APINo
webhookUrlstring500URL to receive webhook notifications for this paymentNo
JSON
{
    "reference": "d8bf770ab6b7b429a7fa948efuc298572955758010",
    "destinationAmount": 100.25,
    "destinationCurrency": "USD",
    "purposeCode": "employee",
    "description": "Payment for September",
    "statementDescriptor": "Monthly salary",
    "sender": {
        "type": "business_entity",
        "reference": "m8a62ka51b773fd78215cd7a975fd7"
    },
     "beneficiary": {
        "reference": "a6b3d491125cd7a79751b773fd7821",
        "relationship": "employee"
    },
    "paymentDocuments": [{
        "fileIdentifier": "1762919288294JMl64mnLjXKoEEROi4wD.jpg"
    }],
    "webhookUrl": "https://fake.randomestuff.org"
}

Response Body

JSON
{
    "success": true,
    "message": "Payment successfully initiated",
    "data": {
        "status": "submitted",
        "reference": "d8bf770ab6b7b429a7fa948efuc298572955758010",
        "id": "TPO_8wMSvIhlVnhc"
    }
}

Payment Purpose

When initiating an outflow payment, you can supply an optional payment purpose code.

This information is required if you need to make payment to certain countries due to regulatory requirements.

Countries Requiring Payment Purpose Codes

The following countries require a payment purpose code to be submitted with the transaction:

  • Bahrain (BH)
  • China (CN)
  • India (IN)
  • Malaysia (MY)
  • United Arab Emirates (AE)

Request

GEThttps://api.harpfi.com/v1/payments/outflows/misc/payment-purpose

Response

JSON
{
    "success": true,
    "message": "Payment purpose retrieved successfully",
    "data": {
        "AE": [
            {
            "code": "ACM",
            "description": "Agency Commission"
            },
            {
            "code": "AES",
            "description": "Advance payment against EOS"
            },
            {
            "code": "AFA",
            "description": "Receipts or payments from personal residents bank account or deposits abroad"
            },
            {
            "code": "AFL",
            "description": "Receipts or payments from personal non-resident bank account in the UAE"
            },
            ...
        ]
    }
}


Beneficiary Relationship

When initiating an outflow payment, you may need to provide the relationship between the sender and the beneficiary. A list of supported relationships can be retrieved with the API below

Request

GEThttps://api.harpfi.com/v1/payments/outflows/misc/beneficiary-relationships

Response

JSON
{
    "success": true,
    "message": "Beneficiary relationships retrieved successfully",
    "data": [
        {
            "name": "Employee",
            "slug": "employee"
        },
        {
            "name": "Contractor",
            "slug": "contractor"
        },
        {
            "name": "Vendor",
            "slug": "vendor"
        },
        {
            "name": "Transferring to Subsidiary",
            "slug": "subsidiary"
        },
        {
            "name": "Other",
            "slug": "other"
        },
        ...
    ]
}

Get Payment Details

This API allows you to fetch the details for an outflow payment. To fetch details for an outflow payment, use the reference that was passed when initiating the payment.

Request

GEThttps://api.harpfi.com/v1/payments/outflows/:reference

Response

JSON
{
    "success": true,
    "message": "Payment details retrieved successfully",
    "data": {
        "id": "TPO_xJ8dTp8OOrUg",
        "reference": "d8bf770ab6b7b429a7fa948e-unique",
        "status": "submitted",
        "statusReason": null,
        "sourceCurrency": "USD",
        "sourceAmount": "110.00",
        "destinationAmount": "100.00",
        "destinationCurrency": "USD",
        "feeAmount": "10.00",
        "feeCurrency": "USD",
        "creationDate": "2025-10-21T14:05:54.000Z",
        "completionDate": "2025-10-21T15:00:54.000Z"
    }
}