OptinMonster · AsyncAPI Specification
Optinmonster Webhooks
Version
View Spec
View on GitHub
CompanyLead GenerationMarketingConversion OptimizationEmail MarketingPopupsWordPressWebhooksSaaSMarketing AutomationAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-12'
method: searched
source: >-
https://optinmonster.com/docs/how-to-connect-optinmonster-with-a-webhook/ ;
https://optinmonster.com/integrations/webhooks/
format: webhook-catalog
asyncapi: false
note: >-
OptinMonster publishes NO AsyncAPI document, so none is written here — an AsyncAPI is not
fabricated from prose. What it does publish is a single documented outbound webhook, captured
below as a webhook catalog with the payload keys quoted from the vendor's own documentation.
The surface is deliberately narrow: exactly one event (campaign form submission), one
destination URL configured per campaign, JSON since 2023-11-30, and no authentication. There is
no event bus, no streaming endpoint, no subscription API, and no event catalog beyond this.
transport:
protocol: https
method: POST
content_type: application/json
since: '2023-11-30'
note: >-
Payloads were form-encoded before 2023-11-30 and are JSON after. The documentation gives the
cutover date explicitly.
security:
authentication: none
signature: none
shared_secret: false
mtls: false
ip_allowlist: not published
vendor_statement: 'At this time we do not support Authentication for Webhook.'
note: >-
Deliveries are unauthenticated and unsigned. A receiver cannot verify that a POST originated
from OptinMonster, which means any endpoint accepting these must treat the payload as
untrusted and rely on URL secrecy alone. This is the single most consequential gap in the
event surface.
delivery:
retries: not published
backoff: not published
ordering: not published
at_least_once: not published
timeout: not published
note: No delivery guarantee, retry policy, or timeout is documented.
headers:
- name: X-OptinMonster-Webhook-Version
description: Version of the webhook payload contract carried on each delivery.
documented: true
events:
- name: campaign.submission
description: >-
Fires when a visitor submits an OptinMonster campaign form (opt-in). This is the only event
OptinMonster emits over webhooks.
trigger: campaign form submission
configured_per: campaign
payload:
lead:
description: Core subscriber information captured by the form.
fields:
- email
- firstName
- lastName
- phone
- ipAddress
- referrer
- timestamp
- privacyConsent
lead_options:
description: Routing/annotation options configured on the campaign.
fields:
- list
- tags
- data
optional: true
campaign:
description: Identity of the campaign that produced the submission.
fields:
- id
- title
meta:
description: Custom form field values, keyed by field id.
fields: []
dynamic_keys: true
smart_tags:
description: Behavioral and contextual values resolved at submission time.
fields:
- day
- month
- year
- date
- page_url
- time_on_site
- coupon_code
note: >-
Field names quoted from the vendor documentation. The `meta` object is keyed by the numeric
custom-field id rather than by field name, so a receiver must resolve ids against the campaign
definition to interpret it.
response_contract:
description: >-
Unusually, the webhook is bidirectional — the receiver's response can steer the campaign the
visitor is looking at.
fields:
- name: om_error_message
direction: receiver-to-optinmonster
description: >-
A custom error message returned by the receiving endpoint, which OptinMonster surfaces to the
visitor in the campaign. Turns the webhook into a synchronous validation hook.
- name: om_response_data
direction: receiver-to-optinmonster
description: Arbitrary data returned by the receiver for OptinMonster to carry forward.
note: >-
Because the receiver can block a submission with om_error_message, webhook latency and
availability sit on the visitor's conversion path.
configuration:
where: OptinMonster campaign integration settings
docs: https://optinmonster.com/docs/how-to-connect-optinmonster-with-a-webhook/
marketing: https://optinmonster.com/integrations/webhooks/
subscription_api: false
note: >-
Webhook endpoints are configured in the app UI per campaign. There is no API to create, list,
or rotate webhook subscriptions — `GET /v2/webhooks` returns error code 1002 (method not
allowed), i.e. no readable webhook resource is exposed.
other_event_surfaces:
- name: JavaScript Events API
kind: client-side
description: >-
Roughly sixty `om.*` DOM events fired in the visitor's browser by the embed script — campaign
lifecycle, display-rule evaluation, form validation, conversion success/error, analytics
impressions and conversions. This is a real event surface but it is in-page only; it is not a
server-side subscription and cannot be consumed off-host.
docs: https://optinmonster.com/docs/optinmonster-javascript-events-api/
see: components/optinmonster-components.yml
counts:
webhook_events: 1
asyncapi_documents: 0
client_side_events: 60
gaps:
- No AsyncAPI or any machine-readable event schema.
- No authentication and no signature on webhook deliveries.
- No retry, backoff, ordering, or delivery guarantee documented.
- No webhook management API — subscriptions are UI-only.
- Only one event; no lifecycle, campaign-change, or account events.