Snap · AsyncAPI Specification
Snap Lead Gen Webhooks
Version
View Spec
View on GitHub
CompanyAdvertisingMarketingSocial MediaAugmented RealityCameraAuthenticationIdentityConversionsAttributionSDKsAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://developers.snap.com/api/marketing-api/Ads-API/lead-generation-ads
spec_type: webhook-catalog
asyncapi_published: false
api: Snapchat Marketing API — Lead Generation
summary: >-
Snap publishes no AsyncAPI document for any product. It does document one real
outbound event surface: lead-generation webhooks. When an advertiser registers
a webhook integration against a lead-gen form, Snap POSTs a lead payload to the
registered URL in real time for every lead submitted through that form, signed
with an HMAC secret Snap returns at registration time. This file is the
captured webhook catalog, not a generated AsyncAPI — nothing here is invented.
transport: https
direction: outbound
delivery: "Snap POSTs to the advertiser-registered webhook_url on every lead submission."
cardinality: "One webhook integration per lead generation form."
security:
scheme: hmac
secret_field: hmacSecret
issued_by: "Returned by Snap in the create-integration response."
purpose: "Verify the authenticity of webhook events."
note: >-
Snap documents that an HMAC secret is provided and is used to verify
authenticity, but does not publish the signature header name, the digest
algorithm, or the canonical string that is signed. A consumer cannot
implement verification from the public docs alone.
management_api:
base_url: https://adsapi.snapchat.com/v1
auth: "OAuth 2.0 Bearer (see authentication/snap-authentication.yml)"
required_role: Organization Admin
operations:
- name: Create a webhook integration
method: POST
path: /v1/lead_gen/integrations/public_webhook
body:
webhook_integrations:
- form_id: "ID of the lead generation form"
webhook_url: "URL Snap will POST lead events to"
returns: [integrationId, formId, adAccountId, webhookUrl, partnerType, hmacSecret]
- name: Send test lead data
method: GET
path: /v1/lead_gen/integrations/{integration_id}/test
description: >-
Triggers a fixed dummy lead payload to the registered webhook URL as an
end-to-end delivery test. See sandbox/snap-sandbox.yml.
- name: List webhook integrations for a form
method: GET
path: /v1/lead_gen/forms/{form_id}/integrations
query:
partner_type: PUBLIC_WEBHOOK
events:
- name: lead.submitted
published_name: null
note: >-
Snap does not name or type its webhook event; the payload carries no event
type discriminator. There is exactly one event shape, emitted whenever a
lead is submitted through the form. `lead.submitted` is our label for it
and is marked as such rather than presented as Snap's.
partner_type: PUBLIC_WEBHOOK
payload:
content_type: application/json
always_present:
- {field: form_id, type: string}
- {field: form_name, type: string}
- {field: ad_account_id, type: string}
- {field: campaign_id, type: string}
- {field: campaign_name, type: string}
- {field: ad_id, type: string}
- {field: ad_name, type: string}
- {field: ad_squad_id, type: string}
- {field: ad_squad_name, type: string}
- {field: lead_id, type: string}
- {field: create_time, type: string, format: "millisecond UNIX timestamp"}
conditional:
- {field: first_name, type: string}
- {field: last_name, type: string}
- {field: email, type: string}
- {field: phone_number, type: string}
- {field: postal_code, type: string}
- {field: address_line_1, type: string}
- {field: address_line_2, type: string}
- {field: address_level_1, type: string}
- {field: address_level_2, type: string}
- {field: birthday, type: string}
- {field: job_title, type: string}
- {field: company_name, type: string}
- {field: custom_field_1, type: string}
- {field: custom_field_2, type: string}
- {field: custom_field_3, type: string}
- {field: custom_field_4, type: string}
- {field: custom_field_5, type: string}
- {field: custom_field_6, type: string}
- {field: custom_field_7, type: string}
- {field: custom_field_8, type: string}
- {field: consent_1, type: string}
- {field: consent_2, type: string}
- {field: lead_preferred_status, type: string, enum: [LEAD_PREFERRED, LEAD_NOT_PREFERRED], applies_to: "forms using Preferred Choice Options"}
conditional_note: >-
Conditional fields appear only when the advertiser configured them on the
form, so a consumer must treat every non-always-present field as optional.
reliability:
retries: undocumented
ordering: undocumented
at_least_once: undocumented
replay: undocumented
note: >-
Snap publishes no retry schedule, delivery guarantee, ordering guarantee or
replay mechanism for lead webhooks. The only recovery path documented is
polling the lead-gen read endpoints.
pii:
present: true
note: >-
The payload carries plaintext PII (name, email, phone, address, birthday)
for consenting leads. It is NOT hashed, unlike the Conversions API user_data
fields which require SHA-256 hashed em/ph.
other_event_surfaces:
- surface: Conversions API
direction: inbound
note: >-
CAPI is an inbound event INGESTION API (the caller POSTs events to Snap),
not an outbound event surface. It is captured as OpenAPI, not here.
- surface: Snap Pixel
direction: browser-to-Snap
note: Client-side event collection; see components/snap-components.yml.
x-evidence:
- fetched: '2026-08-13'
url: https://developers.snap.com/api/marketing-api/Ads-API/lead-generation-ads.md
http_status: 200