Overview
Webhooks let Hyparrow push events to your server in real time instead of you polling the API. When something happens — a subscription renewal is paid, a customer transaction completes — Hyparrow sends an HTTPPOST with a JSON payload to the URL you configure.
Each webhook request carries these headers:
Deliveries are retried automatically on failure with a backoff of 1m, 5m, 30m, 2h, 24h — up to
5 attempts. Your endpoint should return a
2xx status to acknowledge receipt.
Base URL: Point your webhook URL at a sandbox listener and configure it from
https://api.hyparrow.cloud/api/v1Webhook settings endpoints are authenticated with your API key pair:https://sandbox.hyparrow.cloud/api/v1 with pk_test_ keys to safely exercise deliveries.Configure your webhook URL
POST /webhooks/settings sets the URL Hyparrow delivers events to. You may also pass an optional
allowedIps list to restrict which source IPs your endpoint accepts.
1
Set your URL
POST your HTTPS endpoint to
/webhooks/settings.2
Generate a signing secret
Call
/webhooks/settings/secret so deliveries are signed.3
Verify the signature on every request
Recompute the HMAC over the raw body and compare it to
X-Hyparrow-Signature.4
Send a test event
Use
/webhooks/settings/test to confirm end-to-end delivery.View current settings
GET /webhooks/settings returns your configured URL, allowed IPs, whether a secret is set (with a
masked preview), and your customer-email preference.
Generate a signing secret
POST /webhooks/settings/secret generates a new signing secret and stores it. The full secret is
returned only once — store it securely.
Verifying the signature
When a secret is set, every delivery includes anX-Hyparrow-Signature header. It is an
HMAC-SHA512 of the raw request body, keyed with your webhook secret and hex-encoded.
To verify, recompute the HMAC over the exact bytes you received and compare it to the header using
a constant-time comparison. Reject the request if they differ.
Send a test webhook
POST /webhooks/settings/test delivers a sample event to your configured URL so you can validate
your endpoint and signature handling.
Example event payload
All events share the same envelope: a top-levelevent name, a Unix timestamp, and a data
object. Here is a subscription.payment.completed event, delivered when a subscription renewal is
paid:
checkout.payment.completed (a checkout-link payment landed)
and customer.transaction.completed (a customer transaction settled). All follow the same
event / timestamp / data envelope, so write your handler to switch on the event field.
Customer email preference
PUT /webhooks/settings/customer-emails controls whether Hyparrow sends transactional emails
(invoice receipts, subscription notices) directly to your end customers. Set
handleCustomerEmails to false if you prefer to own all customer communication yourself.
The
handleCustomerEmails field is required and must be a boolean. Omitting it returns 400; an
explicit false is accepted and disables customer-facing emails.Delivery history
GET /webhooks/events returns recent delivery attempts so you can audit what was sent and whether
it succeeded. Useful both for debugging and as a polling fallback.
status is one of pending (awaiting a retry), delivered (a 2xx was returned),
or failed (exhausted all attempts). Inspect lastError and httpStatus to diagnose failures.
