Available events
Portal.io fires webhooks for the following event types:
In addition, Portal.io supports the following Zapier trigger events, which fire on the same underlying data changes:
Subscribing to webhooks
Create a webhook subscription by callingPOST /public/webhook/subscribe with your endpoint URL and the events you want to receive.
subscriptionId— use this to update or delete the subscription latersecretKey— use this to verify that incoming webhook requests are genuinely from Portal.io (see Verifying webhook signatures)url,description,enabled, andevents
Managing subscriptions
What your endpoint receives
When an event fires, Portal.io sends an HTTP POST to your endpoint with:Content-Type: application/json- An
X-Webhook-Signatureheader for verification (see below) - A JSON body describing the event
Verifying webhook signatures
Every webhook request includes anX-Webhook-Signature header so you can confirm the request came from Portal.io and has not been tampered with.
Header format:
t— Unix timestamp of when the webhook was generatedv1— HMAC-SHA256 signature
t is 1710000000 and the request body is {"id":10025,"number":4123,...}, the signed message is:
1
Read the raw request body
Use the raw bytes exactly as received — do not parse or normalize the JSON before verifying.
2
Extract the signature header values
Parse
X-Webhook-Signature to extract t and v1.3
Rebuild the signed message
Concatenate
t, a literal ., and the raw request body.4
Compute the expected signature
Run
HMAC_SHA256(secretKey, signedMessage) using your subscription’s secretKey.5
Compare and validate
Compare your computed value with
v1. Reject the request if they do not match, or if t is more than 5 minutes old.