Ozow Hub
POST Ozow sendsyour notification URL
Build with AI 1 package

A build package is every page for one task, with the API operations they use. Copy the prompt into a coding assistant, or hand it the package itself: slim links to each page, full inlines all of them in one document.

  • Send a payoutEverything needed to pay money out to a customer's bank account or voucher with the Payouts API, including how to exercise the failure paths before going live.
    View package

Sent to the notification URLWebhook A URL of yours that Ozow calls when something happens, rather than you polling to find out. The call carries no credential of yours and arrives at a public URL, so authenticate it before acting on it: a hash field on the Payments API, a Svix signature on One API. once a payoutPayout Money sent from a merchant to a bank account. Unlike a refund, a payout is not tied to a payment anyone made you, so you can pay anyone with a bank account. Payouts draw on your float rather than on your incoming payments, and they are not self-service: they need approval from Ozow and testing in staging first. reaches a final status.

The URL comes from the NotifyUrl field on the payout request, or from the site configuration in the merchant admin site. Without one, no notification is sent.

Verify the hashCheck field before acting on the contents. A notification is an unauthenticated POST to a URL that anyone can call.

The same payout can be notified more than once. Ozow works to avoid duplicates and cannot guarantee their absence, so your handler must be idempotentIdempotency A request is idempotent when sending it twice has the same effect as sending it once. It matters most where a retry after a timeout could otherwise take a payment twice.IETF draft: a repeated notification for a payout you have already processed must not credit or debit anyone a second time.

Authentication

Ozow sends no credential with this call, so this check is the only thing standing between a real delivery and a stranger’s. Verify the hashCheck field before acting on the contents: your notification URL is public, and anyone can post to it.

Payload

application/json

  • payoutId string uuid

    Ozow's unique reference for the payoutPayout Money sent from a merchant to a bank account. Unlike a refund, a payout is not tied to a payment anyone made you, so you can pay anyone with a bank account. Payouts draw on your float rather than on your incoming payments, and they are not self-service: they need approval from Ozow and testing in staging first..

  • siteCode string required

    A unique code for the site currently in use. A site codeSite code The unique code for a site registered under a merchant. A site is a place to transact: a website, or a branch of a store. A merchant can have several, and each transaction names the one it belongs to, so sending the wrong code files the payment against the wrong place. is generated when adding a site in the Ozow merchant admin section. [Please contact support for SiteCode - support@ozow.com]

    max length50
  • merchantReference string required

    The merchant's reference for the transaction.

    max length20
  • customerMerchantReference string required

    The reference that will be prepopulated in the "their reference" field in the customers online banking site. This will be the payoutPayout Money sent from a merchant to a bank account. Unlike a refund, a payout is not tied to a payment anyone made you, so you can pay anyone with a bank account. Payouts draw on your float rather than on your incoming payments, and they are not self-service: they need approval from Ozow and testing in staging first. reference that appears on the merchant’s bank statement and can be used for recon purposes.

    max length20pattern^[A-Za-z0-9 -]+
  • payoutStatus PayoutStatus required

    PayoutPayout Money sent from a merchant to a bank account. Unlike a refund, a payout is not tied to a payment anyone made you, so you can pay anyone with a bank account. Payouts draw on your float rather than on your incoming payments, and they are not self-service: they need approval from Ozow and testing in staging first. status.

    Fields of PayoutStatus
    • status integer int32 required

      The payoutPayout Money sent from a merchant to a bank account. Unlike a refund, a payout is not tied to a payment anyone made you, so you can pay anyone with a bank account. Payouts draw on your float rather than on your incoming payments, and they are not self-service: they need approval from Ozow and testing in staging first. status.

      1: Payout Received. The payout has been received.

      2: Verification. The payout is being verified.

      3: Payout Submitted For Processing. The payout is being processed.

      4: Payout Processing Error. There was an error with the payout.

      5: Payout Completed. The payout has been completed.

      6: Payout Pending Investigation. The payout is being investigated.

      7: Payout Pending Cancellation. Cancellation has been requested and is not yet settled.

      90: Payout Returned. The payout could not be paid into the recipient account.

      99: Payout Cancelled. The payout was cancelled.

      values12345679099min0
    • subStatus integer required

      The payoutPayout Money sent from a merchant to a bank account. Unlike a refund, a payout is not tied to a payment anyone made you, so you can pay anyone with a bank account. Payouts draw on your float rather than on your incoming payments, and they are not self-service: they need approval from Ozow and testing in staging first. sub status. Possible values are:

      100: Payout_Unclassified – No sub status.

      101: Payout_ValidationFailed – Request validation failed and error description will be in the ErrorMessage field.

      201: Verification_Pending – Awaiting webook verification.

      202: Verification_Failed – The verification webhookWebhook A URL of yours that Ozow calls when something happens, rather than you polling to find out. The call carries no credential of yours and arrives at a public URL, so authenticate it before acting on it: a hash field on the Payments API, a Svix signature on One API. returned a failed.

      203: Verification_Success – Successful payout verification via webhook.

      204: Verification_Error – Unable to reach the verification webhook.

      205: Verification_AccountNumberDecryptionFailed – Decryption of the account number failed using the key received via webhook.

      301: SubmittedForProcessing_PayoutAddedToBatch – The payout has been added to the payout batch.

      302: SubmittedForProcessing_PayoutSubmittedToBank – The payout batch has been processed and submitted to the bank.

      303: SubmittedForProcessing_PayoutSubmittedToPpi – Payout submitted for processing.

      401: PayoutProcessingError_PayoutRejected – The payout has been rejected by the bank.

      402: PayoutProcessingError_PayoutCancelled – The payout has been cancelled.

      403: PayoutProcessingError_Insufficient_Balance – Insufficient balance.

      404: PayoutProcessingError_PayoutInternalError.

      405: PayoutProcessingError_InvalidAccountNumber – The payout has an invalid account number.

      601: PayoutPendingInvestigation_AmountMismatch – The payout failed due to mismatch in amounts.

      9001: PayoutReturned_Unpaid – Rejected by destination bank.

      9901: Cancellation_AddedToBatch – Cancellation request added to batch for processing.

      9902: Cancellation_SubmittedToBank – Cancellation request has been submitted to the bank.

      9903: Cancellation_RejectedByBank – Cancellation request has been rejected by the bank.

      9904 - Cancellation_AccountNumberValidationFailed – CDV account number validation failed.

      min0
    • errorMessage string

      Error message generated when validating the request.

      max length250
    Open PayoutStatus on its own page
  • hashCheck string required

    SHA512SHA-512 A hashing algorithm. Ozow uses it to sign the values in a request or a notification so you can tell that they arrived unaltered and came from us. Hashing is one-way: the hash cannot be turned back into what produced it.Wikipedia hash used to ensure that certain fields in the message have not been altered after the hash was generated. Check the generate hash section in the documentation for more details on how to generate the hash.

Verify the hash

Ozow sends no credential with this call, so hashCheck is the only thing that tells you the notification came from Ozow. Recompute it and compare before you act on anything else in the body.

  1. Concatenate the fields in the table below, in that order. A field with no value contributes an empty string rather than being skipped.
  2. Append your API key.
  3. For a voucher payout, append the voucher pin after your API key.
  4. Convert the whole string, your API key included, to lowercase.
  5. Take the SHA512 of it and write the digest as hexadecimal.
  6. Compare that against hashCheck, ignoring case.
PositionField
1payoutId
2siteCode
3merchantReference
4customerMerchantReference
5payoutStatus.status
6payoutStatus.subStatus
7Your API key
8voucherPin, for a voucher payout only

Hash calculator builds this string field by field, so you can compare it against the one your code produces.

Your response

200 Acknowledged. Return this once you have stored the notification.

No body.

Guides