Skip to content

Webhooks

Hubble to Partner Callbacks/Webhooks

Authentication

Each webhook request includes a X-Verify header containing an HMAC-SHA256 signature of the payload, encoded in Base64.

Signature Verification

Partners must verify the signature using the shared secret key to confirm authenticity. The signature is generated using the following logic:

private fun generateSignature(payload: String, secret: String): String {
val algorithm = "HmacSHA256"
val secretKeySpec = SecretKeySpec(secret.toByteArray(), algorithm)
val mac = Mac.getInstance(algorithm).apply { init(secretKeySpec) }
val signatureBytes = mac.doFinal(payload.toByteArray())
return Base64.getEncoder().encodeToString(signatureBytes)
}

IP Whitelisting (Optional)

Partners can whitelist Hubble’s production IP addresses for additional security:

Production IPs:

  • 35.200.156.199
  • 34.47.147.244
  • 34.14.138.52

Add these IPs to your firewall or security group rules to allow incoming webhook requests from Hubble.


1. Brand Updated

  • Description: Webhook to intimate the client for changes in brand properties.
  • Payload
{
"id": "brand_id",
"denominationType": "FIXED/FLEXIBLE",
"status": "ACTIVE/INACTIVE",
"denominations": [100, 1000, 5000],
"amountRestrictions": {
"minOrderAmount": 100,
"maxOrderAmount": 5000,
"minVoucherAmount": 100,
"maxVoucherAmount": 5000,
"maxVouchersPerOrder": 5,
"maxVouchersPerDenomination": 1,
"maxDenominationsPerOrder": 1
}
}

Note: The fields minAmount and maxAmount in the amountRestrictions object are deprecated. Please use minOrderAmount and maxOrderAmount instead.

2. Wallet Low Balance Notification

  • Description: Webhook to alert for low wallet balance. Threshold can be configured.
  • Payload:
{
"balance": 50,
"threshold": 100
}

3. Order Reached Terminal State

  • Description: If an order goes into PROCESSING state during generation, once it reaches a terminal state - SUCCESS / FAILED - hubble gives an intimation via webhook on the configured endpoint.
  • Payload:
{
"id": "order_id",
"status": "SUCCESS/FAILED/PROCESSING/REVERSED"
}

4. Brand’s discount update

  • Description: This notifies everytime subvention changes for a brand.
  • Payload:
{
"brandId": "01HFV6NGBFGATYAKZ3AKASJVM9",
"subventionPercentage": 8,
"validFrom": "2025-12-23",
"validTo": "2026-02-28" //optional
}