OhentPay
API Reference

Webhooks

Webhooks

Fetch webhooks list

GET
/webhooks
AuthorizationBearer <token>

In: header

Query Parameters

endpoint_id?string

Filter by Endpoint ID

from_datetime?string

Filter by start datetime - ISO8601

Formatdatetime
to_datetime?string

Filter by end datetime - ISO8601

Formatdatetime

Response Body

curl -X GET "https://api.ohentpay.com/webhooks?endpoint_id=88fe6e8a-cd7b-11e9-821e-4180c1a9232a&from_datetime=2020-12-21T15%3A52%3A01%2B00%3A00&to_datetime=2021-12-31T15%3A52%3A01%2B00%3A00"
[
  {
    "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
    "endpoint_id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
    "event": "transaction.initiated",
    "created": "2019-09-02T13:16:47+01:00",
    "data": {
      "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
      "amount": 1000,
      "fees": 0,
      "currency": "EUR",
      "to_currency": "GBP",
      "balance_id": "88fe6e8a-bd3b-11e9-821e-4180c1a9232a",
      "virtual_account_id": "9d4b1522-4c4e-11e9-900f-2d9954c22966",
      "order_id": "9d4b15224c4e11e9900f2d9954c22966",
      "payment_reference": "bwN23dZWLRU6E65gJRfJ",
      "status": "initiated",
      "failure_reason": "Beneficiary Bank not available",
      "transaction_type": "payment",
      "payment_method": "balance",
      "recipient": {
        "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
        "country": "GB",
        "default_reference": "Invoice",
        "alias": "John's Savings",
        "type": "personal",
        "created": "2019-09-02T13:16:47+01:00",
        "bank_account": {
          "account_name": "John Doe",
          "sort_code": "040004",
          "account_number": "12345678",
          "bank_name": "Monzo Bank Limited",
          "currency": "GBP"
        }
      },
      "exchange_rate": {
        "rate": 1093239,
        "single_rate": 469
      },
      "reference": "For invoice",
      "created": "2019-09-02T13:16:47+01:00"
    },
    "response_code": 200,
    "retry_count": 0
  }
]

Introduction

We can post webhook events that notify your application any time an event happens on your account. All webhook notifications are signed with the signature key generated when the webhook was created. Webhook data is sent as JSON in the POST request body

Webhooks are also asynchronous, their order is not guaranteed, and idempotency might lead to a duplicate notification of the same webhook event. So you must not rely exclusively to sent webhooks for data reconciliation. You should rather use the API.

The webhook event will contain a timestamp of when the notification was generated. This can be used to match for event order, check the timestamp against the last received update and discard it if it is older

Note: Only secure URLs are allowed, and SSL certificate must be valid. If you're testing on localhost, you can use a service like ngrok to open access to the internet or pipedream to log received webhooks.

Acknowledgement

On receipt of a webhook notification, you must respond with a HTTP status code of 2xx. All other response will indicate to us of a failure and will be retried. We will ignore any other information returned in the request header/body and only act on the HTTP status code

We will attempt to redeliver the message every hour on the hour for 24 hours, after that we will discard the message permanently. We will also include a retry count information in the request header X-OhentPay-Retry-Count

Best practices

After setting up your webhook, click the ping button to make sure it works. This will send an instant notification to the endpoint.

On receipt of a notification, you should queue the message in an internal storage and/or immediately acknowledge receipt before continuing processing. We have a 10 seconds timeout for a request to complete and we may further reduce this number in the future.

You should verify the signature sent to make sure the message was truly sent by us.

Verifying webhook signature

We generate a Signature Key every time you create a new webhook, and all notifications sent to you will be signed with this key. The signature HMAC is computed with the SHA512 hash algorithm. The computed signature will be passed through the request header X-OhentPay-Signature. The Signature Key, as all other keys, is secret and must only be shared with relevant authorised personnel.

Example:

define('OHENTPAY_WEBHOOK_SIGNATURE_KEY', 'SECRETKEY');

// Example JSON payload
$payload = file_get_contents('php://input');

// Compute the HMAC using the SHA-512 hash algorithm
$signature = hash_hmac('SHA512', $payload, OHENTPAY_WEBHOOK_SIGNATURE_KEY)

$headers = getallheaders();

// Verify signature
if($headers['X-OhentPay-Signature'] === $signature){
    http_response_code(200);
}

Events

This is a list of all the events you can currently subscribe to. We will continue adding to this list as our platform expands and you can always request for more.

EventDescription
pingMay be sent at any time to check if an endpoint is working
recipient.createdA new recipient has been created
recipient.deletedA recipient has been deleted
transaction.initiatedA new transaction has been initiated
transaction.processingA transaction is being processed
transaction.processedA transaction has been processed
transaction.cancelledA transaction has been cancelled
transaction.failedA transaction failed
transaction.refundedA transaction has been refunded
transaction.pendingA transaction has been put on pending
virtualaccount.initiatedA new virtual account has been initiated
virtualaccount.activeA virtual account status is now active
virtualaccount.blockedA virtual account has been blocked
virtualaccount.closedA virtual account has been closed
paymentrequest.initiatedA new payment request has been initiated
paymentrequest.processedA payment request has been processed
paymentrequest.failedA payment request failed
paymentrequest.cancelledA payment request has been cancelled
paymentrequest.settledA payment request has been settled into your balance
POST
/webhooks
AuthorizationBearer <token>

In: header

Response Body

curl -X POST "https://api.ohentpay.com/webhooks"
{
  "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
  "event": "transaction.cancelled",
  "created": "2019-09-02T13:16:47+01:00",
  "data": {
    "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
    "amount": 1000,
    "fees": 0,
    "currency": "EUR",
    "to_currency": "GBP",
    "balance_id": "88fe6e8a-bd3b-11e9-821e-4180c1a9232a",
    "virtual_account_id": "9d4b1522-4c4e-11e9-900f-2d9954c22966",
    "order_id": "9d4b15224c4e11e9900f2d9954c22966",
    "payment_reference": "bwN23dZWLRU6E65gJRfJ",
    "status": "cancelled",
    "failure_reason": "Beneficiary Bank not available",
    "transaction_type": "payment",
    "payment_method": "balance",
    "recipient": {
      "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
      "country": "GB",
      "default_reference": "Invoice",
      "alias": "John's Savings",
      "type": "personal",
      "created": "2019-09-02T13:16:47+01:00",
      "bank_account": {
        "account_name": "John Doe",
        "sort_code": "040004",
        "account_number": "12345678",
        "bank_name": "Monzo Bank Limited",
        "currency": "GBP"
      }
    },
    "exchange_rate": {
      "rate": 1093239,
      "single_rate": 469
    },
    "reference": "For invoice",
    "created": "2019-09-02T13:16:47+01:00"
  }
}

Fetch single webhook

GET
/webhooks/{id}
AuthorizationBearer <token>

In: header

Path Parameters

idstring

Webhook ID

Formatuuid

Response Body

curl -X GET "https://api.ohentpay.com/webhooks/88fe6e8a-cd7b-11e9-821e-4180c1a9232a"
{
  "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
  "endpoint_id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
  "event": "transaction.initiated",
  "created": "2019-09-02T13:16:47+01:00",
  "data": {
    "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
    "amount": 1000,
    "fees": 0,
    "currency": "EUR",
    "to_currency": "GBP",
    "balance_id": "88fe6e8a-bd3b-11e9-821e-4180c1a9232a",
    "virtual_account_id": "9d4b1522-4c4e-11e9-900f-2d9954c22966",
    "order_id": "9d4b15224c4e11e9900f2d9954c22966",
    "payment_reference": "bwN23dZWLRU6E65gJRfJ",
    "status": "initiated",
    "failure_reason": "Beneficiary Bank not available",
    "transaction_type": "payment",
    "payment_method": "balance",
    "recipient": {
      "id": "88fe6e8a-cd7b-11e9-821e-4180c1a9232a",
      "country": "GB",
      "default_reference": "Invoice",
      "alias": "John's Savings",
      "type": "personal",
      "created": "2019-09-02T13:16:47+01:00",
      "bank_account": {
        "account_name": "John Doe",
        "sort_code": "040004",
        "account_number": "12345678",
        "bank_name": "Monzo Bank Limited",
        "currency": "GBP"
      }
    },
    "exchange_rate": {
      "rate": 1093239,
      "single_rate": 469
    },
    "reference": "For invoice",
    "created": "2019-09-02T13:16:47+01:00"
  },
  "response_code": 200,
  "retry_count": 0
}
Empty