Tapcart · AsyncAPI Specification
Tapcart Webhooks
Version
View Spec
View on GitHub
CompanyMobileCommerceShopifyEcommerceMobile AppsPush NotificationsAnalyticsWebhooksDeveloper ToolsAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-05'
method: searched
source:
- https://dev.tapcart.com/reference/clickstream
- https://dev.tapcart.com/reference/insights-stream-setup-guide
spec_type: none
description: >-
Tapcart publishes NO AsyncAPI document. It does publish a real, fully
documented event surface — two webhook products — so this artifact captures
the webhook catalog rather than fabricating a spec. The current surface is
the Clickstream Webhook, self-service configurable from the Tapcart dashboard
with per-event-type opt-in. The older Mobile Event Webhook is explicitly
deprecated in favour of clickstream and requires emailing Tapcart to
subscribe.
webhooks:
- name: Clickstream Webhook
status: current
docs: https://dev.tapcart.com/reference/clickstream
doc_updated_at: '2026-06-29T17:11:23.000Z'
delivery: HTTP POST to a merchant-configured HTTPS endpoint
configuration: >-
Tapcart dashboard, Settings > Webhooks. Globally enable/disable, set the
HTTPS endpoint, and select all or a subset of event types to control data
volume.
envelope:
fields:
- {name: event, type: string, description: The event type name.}
- {name: data, type: object, description: Event-specific payload; structure varies by event type.}
- {name: properties, type: object, description: Device, locale and session context present on every event.}
- {name: mp_metadata, type: object, description: "Analytics identifiers: mp_event_id (globally unique, use for deduplication) and mp_session_id (the app session)."}
headers:
- {name: appid, description: Tapcart app identifier.}
- {name: eventtype, description: The event type name, for pre-parse filtering.}
- {name: deviceid, description: Device identifier.}
- {name: eventid, description: Event identifier.}
deduplication: mp_metadata.mp_event_id
events:
- {name: applicationInstalled, description: App installed for the first time}
- {name: applicationOpened, description: App opened / brought to foreground}
- {name: cartAdd, description: Item added to the Shopify cart}
- {name: cartRemove, description: Item removed from the Shopify cart}
- {name: cartUpdated, description: Cart state changed (quantity update, discount applied, etc.)}
- {name: checkoutCreated, description: Shopper tapped the checkout button}
- {name: collectionViewed, description: Shopper opened a product collection}
- {name: loggedIn, description: Shopper logged in}
- {name: loggedOut, description: Shopper logged out}
- {name: pageView, description: Shopper viewed a screen}
- {name: search, description: Shopper submitted a search query}
- {name: productViewed, description: Shopper opened a product detail page}
- {name: purchaseCompleted, description: Shopper completed a purchase / placed an order}
- {name: pushOpened, description: Shopper opened a push notification}
- {name: wishlistItemAdded, description: Shopper added an item to a Tapcart wishlist}
- name: Mobile Event Webhook
status: deprecated
deprecation_note: >-
"Mobile events have been deprecated in favor of clickstream events and
will eventually be removed." Tapcart directs consumers to migrate to
clickstream webhooks, which carry a richer dataset, more event types, and
are self-service configurable.
docs: https://dev.tapcart.com/reference/insights-stream-setup-guide
doc_updated_at: '2026-04-28T20:01:29.000Z'
delivery: HTTP POST to a merchant-supplied HTTPS endpoint
configuration: >-
Not self-service. The merchant emails their endpoint URL to
developertools@tapcart.co and Tapcart subscribes them to a dedicated
topic.
guaranteed_fields:
- {name: event_type, type: string, description: "The name of the event (e.g. AppOpened, ProductViewed)."}
- {name: event_id, type: string, description: Unique identifier for the event.}
- {name: app_id, type: string, description: Unique merchant identifier.}
- {name: device_id, type: string, description: Unique device identifier.}
- {name: timestamp, type: number, description: Event timestamp in epoch milliseconds.}
- {name: device_properties, type: object, description: Device information.}
- {name: app_properties, type: object, description: App configuration data.}
- {name: shopify_properties, type: object, description: Shopify user data.}
consumer_response_codes:
- {code: 200, meaning: Successful request}
- {code: 400, meaning: Invalid request}
- {code: 401, meaning: Unauthorized request}
- {code: 403, meaning: Forbidden}
- {code: 422, meaning: Custom errors}
- {code: 429, meaning: Throttling errors}
- {code: "500-511", meaning: Server errors}
retry_policy: >-
On a 400 or 500 response Tapcart retries the event for 5 minutes; if it
still fails to process, Tapcart stops retrying. No dead-letter surface is
documented.
gaps:
- No AsyncAPI (or CloudEvents) document is published for either webhook.
- >-
No payload signing, shared secret, or verification header is documented on
either webhook — the clickstream headers (appid, eventtype, deviceid,
eventid) are descriptive, not authenticating. A consumer cannot
cryptographically verify that a POST came from Tapcart.
- >-
The clickstream docs publish no retry/backoff policy; only the deprecated
mobile event webhook documents one (5 minutes, then drop).