> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wegive.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Checkout Session Payloads

> Complete created and completed session envelopes, identifiers, attribution, and examples.

Actions 8 and 9 send session-created and session-completed notifications. Both use the same session UUID, with separate delivery identifiers.

<Note>
  Completion means a transaction or recurring plan was attached to the session. It does not establish payment success. If the donor leaves before the receipt/session update, completion can be missing. See [Webhook trigger details](/external/onboarding/webhooks#trigger-details-that-affect-reporting).
</Note>

## Envelope keys

| Key | Type / meaning |
| - | - |
| `event` | `checkout_session.created` or `checkout_session.completed`. |
| `id` | Delivery UUID string; identical to `X-WeGive-Delivery`, reused for retries of this subscription’s event. |
| `occurred_at` | UTC ISO-8601 string. Creation uses session creation time; completion uses the time the completion delivery is constructed. |
| `data` | Session/context object below. |

## Every data key

| Path | Type / meaning / availability |
| - | - |
| `data.checkout_session` | Object, present in both events. |
| `data.checkout_session.uuid` | Session UUID string. Primary browser/server join key. |
| `data.checkout_session.id` | Numeric internal session ID; distinct from the UUID and delivery ID. |
| `data.checkout_session.created_at` | UTC ISO-8601 creation timestamp/null. |
| `data.checkout_session.single_page` | Boolean. |
| `data.checkout_session.iframe` | Boolean. |
| `data.checkout_session.checkout_test_id` | A/B test ID/null. |
| `data.checkout` | Checkout object, or null if no related checkout. |
| `data.checkout.id` | Checkout ID. |
| `data.checkout.name` | Checkout name. |
| `data.checkout.slug` | Checkout slug. |
| `data.checkout.payment_processor` | Resolved processor connection key, not merely the raw checkout setting. Resolves checkout/brand/organization defaults; not a processor transaction ID. |
| `data.brand` | `{id, name}` for the session’s organization brand, or null. |
| `data.brand.id` | WeGive brand ID. |
| `data.brand.name` | Brand name. |
| `data.campaign` | `{id, name}` for the WeGive campaign, or null. |
| `data.campaign.id` | WeGive campaign ID; not automatically a Salesforce Campaign ID. |
| `data.campaign.name` | Campaign name. |
| `data.campaign_event_id` | Related campaign event ID/null. |
| `data.fundraiser_id` | Related fundraiser ID/null. |
| `data.utm` | Object with the six keys below. |
| `data.utm.utm_source` | String/null. |
| `data.utm.utm_medium` | String/null. |
| `data.utm.utm_campaign` | String/null; attribution value, distinct from `data.campaign.id`. |
| `data.utm.utm_term` | String/null. |
| `data.utm.utm_content` | String/null. |
| `data.utm.utm_id` | String/null. |
| `data.tracking_url` | Stored checkout page URL/null; anchor stripped, truncated to 5,000 bytes. Query parameters are retained. |
| `data.donor_id` | Known donor ID/null; creation can be anonymous. |
| `data.organization_id` | Subscribed organization ID. |
| `data.transaction_id` | Present when the session is converted; transaction ID or null for a plan-only completion. Normally omitted on creation. |
| `data.scheduled_donation_id` | Present when converted; plan ID or null for a one-time transaction. Normally omitted on creation. |
| `data.completed_at` | Present when converted; session’s update timestamp in UTC ISO-8601 form/null. Normally omitted on creation. |

Conditional conversion fields depend on whether either attached record ID is present, not merely the event-name string. In the normal created journey neither is attached, so all three conversion keys are absent. The completed event includes all three and can have a null transaction ID or null plan ID.

The effective UTM set comes from resolved request attribution when available, otherwise the stored URL; sources are selected as a whole set rather than merged field-by-field. Stored UTM values are truncated to 255 bytes. There is no `channel`, visit-expiry time, revenue, transaction status, currency, confirmation reference, Salesforce ID, or donor contact profile in these session payloads.

## Created example — complete body

```json theme={null}
{
  "event": "checkout_session.created",
  "id": "d1256a4e-c2bb-4b70-9f64-cc5131b8cb02",
  "occurred_at": "2026-10-12T18:00:00Z",
  "data": {
    "checkout_session": {
      "uuid": "f01362a3-7d80-44b6-a91a-37dfa1be3283",
      "id": 9001,
      "created_at": "2026-10-12T18:00:00Z",
      "single_page": true,
      "iframe": false,
      "checkout_test_id": null
    },
    "checkout": {
      "id": 12,
      "name": "Give Now",
      "slug": "give-now",
      "payment_processor": "orbital"
    },
    "brand": {
      "id": 1,
      "name": "Example Brand"
    },
    "campaign": {
      "id": 51,
      "name": "Example Campaign"
    },
    "campaign_event_id": null,
    "fundraiser_id": null,
    "utm": {
      "utm_source": "app",
      "utm_medium": null,
      "utm_campaign": "example-drive",
      "utm_term": null,
      "utm_content": null,
      "utm_id": null
    },
    "tracking_url": "https://give.example.org/give-now?utm_source=app&utm_campaign=example-drive",
    "donor_id": null,
    "organization_id": 42
  }
}
```

## Completed example — complete body

This example uses the same session UUID and a different delivery UUID. Its transaction ID is a join key, not proof of success.

```json theme={null}
{
  "event": "checkout_session.completed",
  "id": "76d721c6-f9ea-4a70-8be2-1c3902c7cbae",
  "occurred_at": "2026-10-12T18:02:00Z",
  "data": {
    "checkout_session": {
      "uuid": "f01362a3-7d80-44b6-a91a-37dfa1be3283",
      "id": 9001,
      "created_at": "2026-10-12T18:00:00Z",
      "single_page": true,
      "iframe": false,
      "checkout_test_id": null
    },
    "checkout": {
      "id": 12,
      "name": "Give Now",
      "slug": "give-now",
      "payment_processor": "orbital"
    },
    "brand": {
      "id": 1,
      "name": "Example Brand"
    },
    "campaign": {
      "id": 51,
      "name": "Example Campaign"
    },
    "campaign_event_id": null,
    "fundraiser_id": null,
    "utm": {
      "utm_source": "app",
      "utm_medium": null,
      "utm_campaign": "example-drive",
      "utm_term": null,
      "utm_content": null,
      "utm_id": null
    },
    "tracking_url": "https://give.example.org/give-now?utm_source=app&utm_campaign=example-drive",
    "donor_id": 1201,
    "organization_id": 42,
    "transaction_id": 42001,
    "scheduled_donation_id": null,
    "completed_at": "2026-10-12T18:02:00Z"
  }
}
```

For a deferred recurring plan, the completion fields can instead be `transaction_id: null`, `scheduled_donation_id: 8101`, plus `completed_at`. Do not count that as collected revenue.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.