Pirsch · AsyncAPI Specification
Pirsch Webhooks
Version
View Spec
View on GitHub
AnalyticsWeb AnalyticsPrivacyGDPRCookie-FreePage ViewsSessionsEventConversion GoalsFunnelsTraffic SourcesAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://docs.pirsch.io/advanced/webhooks
docs: https://docs.pirsch.io/advanced/webhooks
asyncapi_published: false
asyncapi_note: >-
Pirsch publishes no AsyncAPI document. This artifact is the webhook catalog
read from the documentation, not a generated AsyncAPI — fabricating a spec for
a provider that does not ship one would misrepresent the surface. Wire
type: Webhooks, not type: AsyncAPI.
description: >-
Pirsch's only event surface is an outbound webhook that fires when a named
custom event is tracked on a domain. There is no event stream, no message
broker, no server-sent events and no subscription API.
transport:
protocol: HTTPS
method: POST
content_type: application/json
endpoint: caller-supplied HTTPS URL, configured per webhook
https_required: true
configuration:
where: dashboard Integration settings, or the Webhooks API
api:
list: GET /api/v1/webhook?domain_id=<id>
upsert: POST /api/v1/webhook
delete: DELETE /api/v1/webhook?id=<id>
operations: [listWebhooks, createOrUpdateWebhook, deleteWebhook]
spec: openapi/pirsch-webhooks-api-openapi.yml
fields:
- {name: domain_id, required: true, description: Domain the webhook belongs to}
- {name: event, required: true, description: The custom event name that triggers the webhook}
- {name: endpoint, required: true, description: HTTPS URL to POST to}
- {name: description, required: false}
- {name: active, required: false, description: Whether the webhook is currently enabled}
events:
- name: '<custom event name>'
trigger: >-
Fires when a custom event with the configured name is tracked on the
domain, whether via POST /api/v1/event, the pa.js script, or an HTML meta
tag.
payload_example: |
{
"event_name": "purchase",
"event_duration": 42,
"event_meta": {
"amount": "199.99",
"currency": "USD"
}
}
payload_fields:
- {name: event_name, type: string, description: The name of the custom event}
- {name: event_duration, type: number, description: Event duration in seconds}
- {name: event_meta, type: object, description: Flat key/value map — both key and value are strings}
note: >-
There is no fixed event catalog. The event names are whatever the customer
chooses to track, so the set is per-account rather than per-provider. That
is why no enumerable channel list is recorded here.
delivery:
expected_response: HTTP 200-299
failure_behavior: >-
A response outside 200-299 fails silently — Pirsch does not retry the
delivery.
auto_disable_after: 100 consecutive failures
reenable: edit and save the webhook configuration in the dashboard
notification: Pirsch emails the account when a webhook is failing.
security:
signature_header: null
shared_secret: false
timestamp: false
replay_protection: false
assessment: >-
Unsigned. Pirsch sends no signature header, no shared secret and no
timestamp, so a receiver has no way to verify that a POST came from Pirsch.
The only defence available to an integrator is treating the endpoint URL
itself as a secret (an unguessable path) and validating the payload shape.
Recorded because an agent building on this surface must not assume webhook
authenticity.
related:
short_links: >-
Short links accept a webhook_id / webhook_endpoint, so a short-link
redirect can also drive a webhook — see
openapi/pirsch-short-links-api-openapi.yml.