Outbound envelope
When a flow fires a webhook action, 2mee POSTs a signed, versioned
envelope to the endpoint you registered. This page is the shape of that
request.
Headers
Section titled “Headers”Standard Webhooks naming — the same headers you verify:
POST https://your-endpoint.example.com/2meeContent-Type: application/jsonwebhook-id: msg_01HZX9...webhook-timestamp: 1718703600webhook-signature: v1,<base64>{ "id": "msg_01HZX9...", "type": "experience.goal.reached", "timestamp": "2026-06-18T10:00:00Z", "accountId": "acc_...", "experienceId": "exp_...", "data": { "clientUserId": "user_8842", "visitorId": "vis_...", "attributes": { "plan": "pro" }, "result": { } }}| Field | Type | Notes |
|---|---|---|
id | string | Stable across retries — your idempotency key. Matches webhook-id. |
type | string | A documented event type. |
timestamp | string (ISO-8601) | When the event occurred, UTC. |
accountId | string | The 2mee account the event belongs to. |
experienceId | string | The experience that produced it. |
data | object | Event-specific payload (see below). |
| Field | Notes |
|---|---|
clientUserId | Your id for the person — present only when 2mee has one (see the no-PII case). |
visitorId | The 2mee visitor id. |
attributes | Attributes carried on the visitor/participant. |
result | Event-type-specific outcome data. |
The no-PII case
Section titled “The no-PII case”A flow that never identifies a person sends a generic completion event — the envelope
omits clientUserId. For a user-agnostic flow the outbound event is itself the re-engagement
mechanism: your own system holds the identity and decides who to contact. See
goals.
Acknowledging
Section titled “Acknowledging”- Reply 2xx to acknowledge. Any 2xx is treated as success.
- 2mee retries on
5xx, timeouts and connection errors; see retries & idempotency. - Reply fast (under a few seconds). Do slow work after acknowledging, keyed on
id.
Verify before trusting
Section titled “Verify before trusting”Always verify the signature and check the timestamp window
before acting on the body. Dedupe on id.
Provider APIs vs. plain webhooks
Section titled “Provider APIs vs. plain webhooks”When the destination is a connected provider (e.g. Segment), the outbound action isn’t a plain
webhook to your URL — it’s a call to that provider’s API, shaped to their format. That’s an
integration action; see Connect Segment. The envelope on
this page is the generic webhook action’s payload.