Skip to main content

Webhooks

Webhooks allow external systems to notify OLIVE when events happen.

VULT Cash-In Webhook

POST /webhooks/vult/cashin

Request

FieldTypeDescription
card_serialstringNFC card serial
phone_numberstringSubscriber phone (optional)
amountint64Amount to credit (> 0)

Response

FieldDescription
successtrue/false
transaction_idTransaction ID
messageStatus message
new_balanceUpdated balance

HMAC Verification

Header: X-Webhook-Signature
signature = HMAC-SHA256(request_body, shared_secret)

Validation Steps

  1. Check signature header present
  2. Verify HMAC matches
  3. Find card by serial
  4. Verify card status is assigned
  5. Verify subscriber is active
  6. Match phone (if provided)

Error Responses

ErrorStatusMessage
No signature401”Missing webhook signature”
Invalid signature401”Invalid webhook signature”
Card not found400”Card not found”
Card not assigned400”Card not linked”
Wrong phone400”Phone mismatch”

API Keys

Partners authenticate with API keys:
FieldDescription
key_prefixFirst 8 chars (visible)
key_hashSHA256 hash of full key
hmac_secretPer-client HMAC secret
scopesAllowed permissions (array)
statusactive or revoked
rate_limitRequests/minute (default 1000)
ip_whitelistAllowed IPs (array)

VULT Transfers Table

Records funding from VULT:
FieldTypeDescription
vult_txn_idTEXTVULT transaction ID
olive_subscriber_idTEXTSubscriber FK
vult_wallet_idVARCHAR(50)VULT account
amountBIGINTAmount (> 0)
statusVARCHAR(20)Default ‘Completed’