Leepa Africa API

Sections

Theme switcher

Webhook Payloads


We send five different event types:

  • Recurrence Signup
  • Payment
  • Failed Payment
  • Subscription Cancellation
  • Wallet Transfer

Recurrence Signup

When a customer agrees to make recurring payments, the webhook sends the following data. Note that other than the first_payment_id, there is no information about the first payment made. Payment information is sent as a separate payment event.

JSON
{ "type": "recurrence_signup", "merchant_id": "mrch_10d3ed3c-2471-4573-ac66-ec7e3b414e80", "origin_id": "161", "origin": "subscriptions", "name": "asdasd", "amount": 0.0985, "agreement_id": "agre_115608f9-662c-4ae4-aa6f-3928f99df15b", "frequency": "Every", "interval": "Day", "duration": "Until Cancelled", "start_date": "2025-08-18T08:37:59.858585Z", "next_process_date": "2025-08-19T08:38:00Z", "first_payment_id": "paym_6f7a1c13-706c-4df3-a566-6a8ced58ccfc", "user": { "first_name": "Test", "last_name": "Test", "email": "test@gmail.com", "subscriber_id": "1d5faea9-306c-488d-b2f9-b00b2e8cd414" }, "metadata": { "some": "metadata" } }

Fields:

  • type: "recurrence_signup" (Type of action being executed).
  • merchant_id: Unique identifier for the merchant.
  • origin_id: Unique identifier for the recurrence signup's origin.
  • origin: Source of the payment. Values: “purchase_sessions” or “subscriptions”.
  • name: Name of the recurring payments.
  • amount: The amount received each time a recurring payment is made.
  • agreement_id: The id of the agreement that can be used to retrieve agreement details.
  • frequency: How often the customer is billed. Values: “Every”, “Every Other”, “Every Third”, “Every Fourth”, “Every Fifth”, “Every Sixth”, or “Every Seventh”.
  • interval: The time period for the billing cycle. Values: “Day”, “Week”, “Month”, or “Year".
  • duration: The number of billing cycles. Either a number (e.g., “1”, “525600”, etc.) or “Until Cancelled”. There is no limit to the number. Data type: string.
  • start_date: Date the user agreed to the recurring payments.
  • next_process_date: The next date customer will be billed.
  • first_payment_id: The payment_id of the first payment made for this billing agreement.
  • user: Information about the customer.
    • first_name: The customer's first name.
    • last_name: The customer's last name.
    • email: The customer's email.
    • subscriber_id: A unique identifier for the customer.
  • metadata: Miscellaneous information (if any) about payment. Data type: object.

Payment

When a customer makes a successful payment, the webhook sends the following data:

JSON
{ "type": "payment", "merchant_id": "mrch_10d3ed3c-2471-4573-ac66-ec7e3b414e80", "origin_id": "161", "origin": "subscriptions", "name": "asdasd", "currency": "USDC", "amount": 0.1, "metadata": null, "payment_date": "2025-08-18T08:37:59.229191Z", "status": "completed", "transaction_details": { "transaction_id": 343, "transaction_hash": "0x15c4308c3f55e7ef13d062e0784ec30181a400a2ac92bfac849443c486d33963", "chain_id": 84532 }, "user": { "first_name": "asd", "last_name": "asd", "email": "asd@gmail.com", "subscriber_id": "1d5faea9-306c-488d-b2f9-b00b2e8cd414" }, "payment_id": "paym_6f7a1c13-706c-4df3-a566-6a8ced58ccfc",
"agreement_id": "agre_0a5578b2-b76b-4d8c-b568-4ec7442a21dc" }

Fields:

  • type: "payment" (Type of action being executed)
  • merchant_id: Unique identifier for the merchant.
  • origin_id: Unique identifier for the payment's origin.
  • origin: Source of the payment. Values: “purchase_sessions” or “subscriptions”.
  • name: Name of the purchase item.
  • currency: Symbol for the currency used to make the payment (e.g., “USDC”, “USDT”).
  • amount: The amount the customer paid, excluding fees.
  • metadata: Miscellaneous information (if any) about the payment. Data type: object.
  • status: Status of the payment, i.e., “completed.” Data type: string.
  • payment_id: The id of the payment object. Can be used to get full transaction details of a payment.
  • transaction_details: Information about the transaction. Data type: object.
    • transaction_id: ID for the transaction.
    • transaction_hash: Blockchain transaction hash.
    • chain_id: Chain ID for the network in which the payment was made.
  • user: Information about the customer. Data type: object.
    • first_name: The customer's first name.
    • last_name: The customer's last name.
    • email: The customer's email.
    • subscriber_id: A unique identifier for the customer.

Failed Payment

When a customer makes a payment attempt and fails, the webhook sends the following data:

JSON
{ "type": "payment", "merchant_id": "mrch_92313b-1291-43c5-941d-9349d82fc33e", "origin_id": "8", "origin": "subscriptions", "name": "Willy Wonka's Wonka Bar", "currency": "USDC", "amount": 1, "metadata": { "some": "metadata" }, "payment_date": "2025-05-28T17:20:03.766627-07:00", "status": "completed", "transaction_details": { "transaction_id": 29, "transaction_hash": "0x20887c4a415fdf19486364c02c550107da5c79147891e2264f1ef281383599fd", "chain_id": 80002 }, "user": { "first_name": "John", "last_name": "Doe", "email": "john_doe@company.net", "subscriber_id": "22b5ff13-e846-40cc-80fa-9e0261f8fd42" },
}
}
  • type: "failed_payment" (Type of action being executed)
  • merchant_id: Unique identifier for the merchant.
  • origin_id: Unique identifier for the payment's origin.
  • origin: Source of the payment. Values: “purchase_sessions” or “subscriptions”.
  • name: Name of the purchased item.
  • currency: Symbol for the currency used to make the payment (e.g., “USDC”, “USDT”).
  • amount: The amount the customer paid, excluding fees.
  • metadata: Miscellaneous information (if any) about the payment. Data type: object.
  • status: Status of the payment, i.e., “failed.”
  • transaction_details: Information about the transaction. Data type: object.
    • transaction_id: Unique identifier for the transaction.
    • transaction_hash: Blockchain transaction hash. Values: a hex value, or empty string.
    • chain_id: Chain ID for the network in which the payment was made.
  • user: Information about the customer. Data type: object.
    • first_name: The customer's first name.
    • last_name: The customer's last name.
    • email: The customer's email.
    • subscriber_id: A unique identifier for the customer.

Subscription Cancellation

When a subscriber cancels a subscription, the webhook sends the following data:

JSON
{ "type": "cancellation", "merchant_id": "mrch_92313b-1291-43c5-941d-9349d82fc33e", "origin": "purchase_sessions", "name": "Willy Wonka's Candy Subscription Package", "amount": 1, "metadata": { "some": "metadata" }, "agreement_id": "agre_78e289d9-bbb0-4930-be9a-2edd6822e1ff", "frequency": "Every", "interval": "Minute", "duration": "Until Cancelled", "start_date": "2025-05-28T16:22:49.47113-07:00", "cancellation_date": "2025-05-28T16:49:16.502493-07:00", "active_until": "2025-05-28T16:49:25.398975Z", "user": { "first_name": "John", "last_name": "Doe", "email": "john_doe@company.net", "subscriber_id": "22b5ff13-e846-40cc-80fa-9e0261f8fd42" } }

Fields:

  • type: "cancellation" (Type of action being executed).
  • merchant_id: Unique identifier for the merchant.
  • origin: Source of the payment. Values: “purchase_sessions” or “subscriptions”.
  • name: Name of the purchase item.
  • amount: The amount paid with each billing cycle.
  • metadata: Miscellaneous information (if any) about the payment. Data type: object.
  • agreement_id: Unique identifier for the original agreement created at sign-up.
  • frequency: How often the customer is billed. Values: “Every”, “Every Other”, “Every Third”, “Every Fourth”, “Every Fifth”, “Every Sixth”, or “Every Seventh”.
  • interval: The time period for the billing cycle. Values: “Day”, “Week”, “Month”, or “Year".
  • duration: The number of billing cycles. Either a number (e.g., “1”, “525600”, etc.) or “Until Cancelled”. There is no limit to the number. Data type: string.
  • start_date: Date the user agreed to the recurring payments.
  • cancellation_date: Date the user cancelled the agreement for recurring payments.
  • active_until: Date the last billing cycle will end.
  • user: Information about the customer. Data type: object.
    • first_name: The customer's first name.
    • last_name: The customer's last name.
    • email: The customer's email.
    • subscriber_id: A unique identifier for the customer.

Wallet Transfers

When you execute a wallet to wallet transfer from your merchant wallet, the following payload is sent to the webhook

JSON
{ "type": "transfer", "merchant_id": "mrch_053daf5f-7de6-491e-8096-5c8a8612f334", "amount_in_usd": "0.985000", "hash": "0x0924b6a3cc49d2ba216452358271533bc8190826b6cae395747be86b91a6ea98", "transfer_id": "7", "wallet_id": "wa-tffvk-1nj19-1qqbt0j5ieophqg", "network": "PolygonAmoy", "from_address": "0xd0cbe3ab3a241f6c4d5f2c0e2bfe37ec03fe7f04", "to_address": "0x1C337aBF69aB1DC1F9388e97bBd4AAD57059D8Eb", "status": "success", "status_confirmed_at": "2025-08-15T11:43:19.641041+02:00" }

Fields:

  • type: "transfer" (Type of action being executed). Indicates that this payload is for a wallet-to-wallet transfer.
  • merchant_id: Unique identifier for the merchant initiating the transfer.
  • amount_in_usd: Amount being transferred, denominated in USD. Data type: string.
  • hash: Unique transaction hash on the blockchain, used to verify and track the transfer.
  • transfer_id: Unique identifier for this specific transfer within the platform's system.
  • wallet_id: Unique identifier for the wallet within the platform's system that initiated the transfer.
  • network: Blockchain network on which the transfer occurs. Example: “Polygon”.
  • from_address: Blockchain address of the sender wallet.
  • to_ddress: Blockchain address of the receiver wallet.
  • status: Status of the transfer. Common values: "success", "pending", "failed".
  • status_confirmed_at: Timestamp when the transfer status was confirmed. Format: ISO 8601 with timezone.

Retry Mechanism

If the webhook fails to deliver the data, it will retry up to 5 times, with each retry occurring every 5-10 minutes.

Was this section helpful?

What made this section unhelpful for you?

On this page
  • Webhook Payloads