> ## Documentation Index
> Fetch the complete documentation index at: https://agenticadvertisingorg-feature-feedback.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# si_initiate_session

> si_initiate_session is the AdCP task that starts a Sponsored Intelligence session. Pass user intent, consented identity, and host capabilities to a brand agent and receive a personalized response.

<Note>
  **Experimental.** Sponsored Intelligence (`si_get_offering`, `si_initiate_session`, `si_send_message`, `si_terminate_session`) is part of AdCP 3.0 as an experimental surface — it may change between 3.x releases with at least 6 weeks' notice. Sellers implementing any of these tasks MUST declare `sponsored_intelligence.core` in `experimental_features`. See [experimental status](/docs/reference/experimental-status) for the full contract.
</Note>

Start a conversational session with a brand agent. The host platform invokes this task when a user expresses interest in engaging with a brand.

## Request

| Field                       | Type   | Required | Description                                                                                                                                                   |
| --------------------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `intent`                    | string | Yes      | Natural language description of user intent — the conversation handoff from the host                                                                          |
| `identity`                  | object | Yes      | User identity with consent status                                                                                                                             |
| `media_buy_id`              | string | No       | AdCP media buy ID if triggered by advertising                                                                                                                 |
| `placement`                 | string | No       | Where the session was triggered (e.g., "chatgpt\_search")                                                                                                     |
| `offering_id`               | string | No       | Brand-specific offering reference to apply                                                                                                                    |
| `supported_capabilities`    | object | No       | What the host platform supports                                                                                                                               |
| `offering_token`            | string | No       | Token from `si_get_offering` for correlation                                                                                                                  |
| `sponsored_context_receipt` | object | No       | Host receipt for sponsored context accepted before session initiation                                                                                         |
| `context`                   | object | No       | Opaque correlation data echoed unchanged in the response (see [application context](/docs/building/integration/context-sessions#application-context-context)) |

### Offering Token

If a host performed a [`si_get_offering`](./si_get_offering) lookup before initiating, include the token for **session continuity**:

```json theme={null}
{
  "offering_token": "offering_abc123xyz"
}
```

The token lets the brand agent know exactly what products were shown to the user (and in what order). This enables natural conversation flow:

* User sees: "Nike Pegasus (\$89), Air Max (\$129), Vomero (\$139)"
* User says: "Tell me more about the middle one"
* Brand agent resolves "middle one" → Air Max via the token's stored context

### Sponsored Context Receipt

If the host accepted or explicitly rejected sponsored context from a pre-session lookup, include `sponsored_context_receipt` to make the host's boundary decision visible to the brand/seller:

```json theme={null}
{
  "offering_token": "offering_abc123xyz",
  "sponsored_context_receipt": {
    "sponsored_context": {
      "paying_principal": {
        "brand": { "domain": "acme-running.example" },
        "display_name": "Acme Running"
      },
      "context_use": "comparison_set",
      "disclosure_obligation": {
        "required": true,
        "label_text": "Sponsored results from Acme Running"
      }
    },
    "host_receipt": {
      "status": "accepted",
      "accepted_context_use": "comparison_set",
      "received_at": "2025-01-19T10:00:02Z",
      "host_surface": "assistant_comparison",
      "disclosure_commitment": {
        "status": "accepted",
        "label_text": "Sponsored results from Acme Running"
      }
    }
  }
}
```

The receipt records whether the host accepted or rejected the sponsored context. For accepted receipts, it records what the host committed to honor. It does not assert that AdCP can inspect hidden model reasoning.

| Receipt field                        | Description                                                                                           |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| `sponsored_context`                  | Sender declaration being acknowledged: paying principal, declared use mode, and disclosure obligation |
| `host_receipt.status`                | `accepted` when the host honored the declaration; `rejected` when it did not use the context          |
| `host_receipt.accepted_context_use`  | Required for accepted receipts; must match the declaration's `context_use`                            |
| `host_receipt.disclosure_commitment` | Required for accepted receipts; records the host's disclosure commitment                              |
| `host_receipt.rejection_reason`      | Optional explanation when the host rejects the sponsored context                                      |

An accepted receipt cannot down-scope the use mode or decline a required disclosure. A host that cannot honor either condition rejects the sponsored context instead. Rejected receipts must omit `accepted_context_use` and `disclosure_commitment`.

### Identity Object

When `consent_granted` is `true`:

| Field                         | Type    | Required | Description                     |
| ----------------------------- | ------- | -------- | ------------------------------- |
| `consent_granted`             | boolean | Yes      | Must be `true`                  |
| `consent_timestamp`           | string  | Yes      | ISO 8601 timestamp of consent   |
| `consent_scope`               | array   | Yes      | Fields the user agreed to share |
| `privacy_policy_acknowledged` | object  | No       | Brand policy user accepted      |
| `user`                        | object  | Yes      | User's PII                      |

When `consent_granted` is `false`:

| Field                  | Type    | Required | Description                          |
| ---------------------- | ------- | -------- | ------------------------------------ |
| `consent_granted`      | boolean | Yes      | Must be `false`                      |
| `anonymous_session_id` | string  | Yes      | Unique ID for this anonymous session |

### Supported Capabilities Object

Declares what the host platform can render:

```json theme={null}
{
  "modalities": {
    "conversational": true,
    "voice": { "providers": ["elevenlabs", "openai"] },
    "video": false,
    "avatar": false
  },
  "components": {
    "standard": ["text", "link", "image", "product_card", "carousel", "action_button"],
    "extensions": {
      "chatgpt_apps_sdk": "1.0"
    }
  },
  "commerce": {
    "acp_checkout": true
  }
}
```

## Response

| Field                     | Type   | Description                                                                 |
| ------------------------- | ------ | --------------------------------------------------------------------------- |
| `session_id`              | string | Unique identifier for this session                                          |
| `response`                | object | Brand agent's initial response                                              |
| `negotiated_capabilities` | object | Intersection of brand and host capabilities                                 |
| `sponsored_context`       | object | Sponsored-context declaration for sponsored context in the initial response |

### Response Object

| Field         | Type   | Description                    |
| ------------- | ------ | ------------------------------ |
| `message`     | string | Text response from brand agent |
| `ui_elements` | array  | Visual components to render    |

## Example

### Request

```json theme={null}
{
  "$schema": "/schemas/sponsored-intelligence/si-initiate-session-request.json",
  "idempotency_key": "f6a7b8c9-d0e1-4234-f567-234567890123",
  "intent": "User wants to fly to Boston next Tuesday morning on flight 632 at 6 AM.",
  "media_buy_id": "delta_q1_premium_upgrade",
  "placement": "chatgpt_search",
  "offering_id": "delta_chatgpt_3313",
  "identity": {
    "consent_granted": true,
    "consent_timestamp": "2026-01-18T10:30:00Z",
    "consent_scope": ["name", "email"],
    "privacy_policy_acknowledged": {
      "brand_policy_url": "https://delta.com/privacy",
      "brand_policy_version": "2026-01"
    },
    "user": {
      "email": "jane@example.com",
      "name": "Jane Smith",
      "locale": "en-US"
    }
  },
  "supported_capabilities": {
    "modalities": {
      "conversational": true,
      "voice": true
    },
    "components": {
      "standard": ["text", "link", "image", "product_card", "carousel", "action_button"]
    },
    "commerce": {
      "acp_checkout": true
    }
  }
}
```

### Response

```json theme={null}
{
  "$schema": "/schemas/sponsored-intelligence/si-initiate-session-response.json",
  "status": "completed",
  "session_id": "sess_abc123",
  "session_status": "active",
  "response": {
    "message": "Hi Jane! I found DL632 departing at 6:15 AM next Tuesday. Great news—as a SkyMiles Gold member, you qualify for our free Premium Economy upgrade on this flight.",
    "ui_elements": [
      {
        "type": "product_card",
        "data": {
          "title": "DL632 to Boston - Tue Jan 27",
          "subtitle": "6:15 AM → 9:42 AM (3h 27m)",
          "price": "$199",
          "badge": "Free Premium Economy Upgrade",
          "image_url": "https://delta.com/images/premium-economy.jpg",
          "cta": { "label": "Book with Upgrade", "action": "checkout" }
        }
      }
    ]
  },
  "negotiated_capabilities": {
    "modalities": {
      "conversational": true,
      "voice": true
    },
    "components": {
      "standard": ["text", "link", "image", "product_card", "carousel", "action_button"]
    },
    "commerce": {
      "acp_checkout": true
    }
  }
}
```

## Key Points

1. **`intent` is the conversation handoff** - The host tells the brand agent what the user needs in natural language. The brand agent responds naturally, continuing the conversation. `context` is a separate, optional field: an opaque object (e.g., `{"trace_id": "abc-123"}`) that the brand agent echoes back unchanged — used by the buyer for correlation, never parsed by the brand agent.

2. **Brand looks up loyalty data** - If Jane's email is recognized, Delta retrieves her SkyMiles status automatically. Hosts don't store loyalty numbers.

3. **offering\_id is brand-specific** - The brand interprets this reference to apply promotions, discounts, or loyalty rewards. Hosts pass it through without needing to understand offering semantics.

4. **Capability negotiation** - The response includes `negotiated_capabilities` showing what features this session can use (intersection of brand and host capabilities).

5. **Sponsored context receipt** - When a session follows a sponsored preflight lookup, `sponsored_context_receipt` records the host's accepted use mode and disclosure commitment. This is a boundary acceptance record, not a claim about hidden model reasoning.

6. **Clear PII with explicit consent** - When `consent_granted` is true, actual email/name are passed (not hashed). This is a direct, consented handoff.
