Skip to main content

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 HTTP POST 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: https://api.hyparrow.cloud/api/v1Webhook settings endpoints are authenticated with your API key pair:
Point your webhook URL at a sandbox listener and configure it from 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.
webhookUrl must be a valid URL. An invalid value returns 400.

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.
Generating a new secret replaces any previous one. Update your verification code immediately so you don’t reject incoming deliveries.

Verifying the signature

When a secret is set, every delivery includes an X-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.
Compute the HMAC over the raw, unparsed body. Re-serializing the parsed JSON can change byte ordering or whitespace and produce a different signature.

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.
The payload your endpoint receives looks like:
If no webhook URL is configured, this returns 400 No webhook URL configured.

Example event payload

All events share the same envelope: a top-level event name, a Unix timestamp, and a data object. Here is a subscription.payment.completed event, delivered when a subscription renewal is paid:
Other events you may receive include 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.
A delivery’s 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.