Stannp · AsyncAPI Specification
Stannp Webhooks
Version
View Spec
View on GitHub
Direct MailPostcardsLettersPrintPhysical MailMarketing AutomationCampaignsAddress VerificationSMSWebhookMailing ListsFulfillmentAsyncAPIEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://www.stannp.com/us/direct-mail-api/webhooks
also: https://www.stannp.com/stannp-api-llm.md
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: >-
Stannp publishes NO AsyncAPI document. Probed /asyncapi.yaml and the
/.well-known/ surface on www.stannp.com, api-eu1.stannp.com and
api-us1.stannp.com on 2026-08-13 — nothing served. This artifact is the
webhook catalog captured verbatim from Stannp's own webhook reference; no
AsyncAPI is fabricated here.
surface: webhooks
transport: HTTP POST to a subscriber-configured URL
management: >-
Webhooks are created and managed in the Stannp account settings UI. There is
no documented API operation to create, list or delete a webhook subscription —
the event surface is configured by a human, not by an agent.
subscription_limits:
note: Webhook allowance is a plan entitlement, not a rate limit.
by_plan:
Free: 0
Starter: 0
Growth: 2
Premium: 4
Enterprise: unlimited
source: https://www.stannp.com/us/detailed-pricing
registration_handshake:
description: >-
On creation Stannp sends a validation POST to the target URL and requires an
HTTP 200 response. If 200 is not returned, the webhook is not created.
payload:
webhook_id: 0
event: test_url
created: 'YYYY-MM-DD HH:MM:SS'
retries: 0
envelope:
description: >-
Every delivery carries the same four scalar fields plus ONE array whose key
name varies by event type. The array is always present even for a single
object.
fields:
- name: webhook_id
type: integer
description: The subscription that produced this delivery.
- name: event
type: string
description: The event type name.
- name: created
type: string
description: Delivery timestamp, "YYYY-MM-DD HH:MM:SS".
- name: retries
type: integer
description: Current retry attempt number for this delivery.
- name: <event key>
type: array
description: >-
`mailpieces`, `campaigns` or `events` depending on the event type. A
consumer must key off `event` to know which array to read.
events:
- name: mailpiece_status
array_key: mailpieces
payload_object: Mailpiece
payload_object_ref: data-model/stannp-data-model.yml
description: Fires when a mailpiece status changes.
statuses:
- printing
- dispatched
- cancelled
- local_delivery
- delivered
- returned
example:
webhook_id: 1234
event: mailpiece_status
created: '2024-01-15 10:30:00'
retries: 0
mailpieces:
- '[mailpiece object]'
- name: campaign_status
array_key: campaigns
payload_object: Campaign
payload_object_ref: data-model/stannp-data-model.yml
description: Fires when a campaign status changes.
statuses:
- printing
- dispatched
- cancelled
example:
webhook_id: 1234
event: campaign_status
created: '2024-01-15 10:30:00'
retries: 0
campaigns:
- '[campaign object]'
- name: recipient_events
array_key: events
payload_object: RecipientEvent
description: >-
Fires when a new recipient event is recorded — including events the caller
itself posts through /v1/recipientEvents/create, which closes the
engagement loop back to the subscriber.
related_operation: openapi/stannp-events-api-openapi.yml#createRecipientEvent
example:
webhook_id: 1234
event: recipient_events
created: '2024-01-15 10:30:00'
retries: 0
events:
- '[event object]'
security:
signed: true
header: X-Stannp-Signature
algorithm: HMAC-SHA256
signed_payload: the raw request body
secret: set by the subscriber when creating the webhook
verification: >-
Recompute the HMAC-SHA256 digest of the raw body against the stored secret
and compare with the X-Stannp-Signature header. Stannp explicitly instructs
using a constant-time comparator (it cites PHP's `hash_equals()`) rather
than `==`.
timestamp_in_signature: false
replay_protection: >-
Not documented. The signature covers the body only; `created` is inside the
body but Stannp documents no freshness window, so a consumer should
de-duplicate on the object IDs in the array.
delivery:
chunking:
threshold: 50
description: >-
An event affecting more than 50 objects is split across multiple webhook
calls of up to 50 objects each. A consumer must not assume one delivery
equals one logical event.
retries:
attempts: 3
backoff: fixed 30 seconds between attempts
counter_field: retries
auto_pause:
threshold: 5 failures within 24 hours
effect: >-
The subscription is automatically paused and must be manually
re-subscribed through the Stannp platform. There is no API to resume it,
so a sustained endpoint outage silently ends event delivery.
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/stannp-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.