Skip to main content

Documentation Index

Fetch the complete documentation index at: https://agenticadvertisingorg-changeset-release-main.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

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 for the full contract.
End an SI session. Either the host or brand agent can initiate termination, with different reasons indicating how the session concluded.

Request

FieldTypeRequiredDescription
session_idstringYesSession ID to terminate
reasonstringYesWhy the session is ending
termination_contextobjectNoAdditional context for the termination

Termination Reasons

ReasonMeaningTypical Initiator
handoff_transactionUser wants to complete a purchaseBrand agent (via pending_handoff)
handoff_completeConversation naturally concludedBrand agent
user_exitUser explicitly ended the conversationHost
session_timeoutInactivity timeout reachedHost
host_terminatedHost ended for policy/error reasonsHost

Termination Context Object

Additional details vary by reason: For handoff_transaction:
{
  "intent": { /* purchase intent from handoff */ },
  "context_for_checkout": { /* ACP context */ }
}
For user_exit:
{
  "user_signal": "changed_topic",
  "partial_context": { /* what was discussed */ }
}
For session_timeout:
{
  "last_activity": "2026-01-18T10:30:00Z",
  "timeout_seconds": 300
}

Response

FieldTypeDescription
session_idstringConfirms which session was terminated
terminatedbooleanAlways true on success
acp_handoffobjectPresent for transaction handoffs
follow_upobjectOptional actions for future engagement

ACP Handoff Object

For transaction terminations, includes data needed for ACP checkout:
FieldTypeDescription
checkout_urluriBrand’s ACP checkout endpoint. Hosts MUST validate this is HTTPS.
checkout_tokenstringOpaque token to pass to the checkout endpoint
payloadobjectRich checkout context (product details, applied offers, pricing). Alternative to checkout_token for structured data.
expires_atdatetimeWhen this handoff data expires

Follow-Up Object

Suggestions for future engagement:
FieldTypeDescription
suggested_actionstringWhat the host might do next
dataobjectRelevant data for the action
messagestringOptional message to display

Examples

Transaction Handoff

After receiving pending_handoff with type: "transaction": Request:
{
  "session_id": "sess_abc123",
  "reason": "handoff_transaction",
  "termination_context": {
    "intent": {
      "action": "purchase",
      "product": {
        "type": "flight",
        "flight_number": "DL628"
      }
    }
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true,
  "acp_handoff": {
    "checkout_url": "https://delta.com/acp/checkout",
    "payload": {
      "session_id": "sess_abc123",
      "flight": "DL628",
      "passenger": {
        "email": "jane@example.com",
        "name": "Jane Smith"
      },
      "applied_offers": ["delta_chatgpt_3313"],
      "price": {
        "amount": 199,
        "currency": "USD"
      }
    },
    "expires_at": "2026-01-18T11:00:00Z"
  }
}

Conversation Complete (No Purchase)

When the conversation naturally ends without a transaction: Request:
{
  "session_id": "sess_abc123",
  "reason": "handoff_complete"
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true,
  "follow_up": {
    "suggested_action": "save_for_later",
    "data": {
      "flights_discussed": ["DL628", "DL632"],
      "destination": "BOS",
      "travel_date": "2026-01-27"
    },
    "message": "Let me know if you'd like to revisit Boston flights later!"
  }
}

User Exit

When the user changes topic or explicitly leaves: Request:
{
  "session_id": "sess_abc123",
  "reason": "user_exit",
  "termination_context": {
    "user_signal": "changed_topic",
    "partial_context": {
      "flights_viewed": ["DL628"],
      "last_topic": "seat selection"
    }
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true,
  "follow_up": {
    "suggested_action": "remind_later",
    "data": {
      "incomplete_booking": {
        "flight": "DL628",
        "step": "seat_selection"
      }
    }
  }
}

Session Timeout

When the session times out due to inactivity: Request:
{
  "session_id": "sess_abc123",
  "reason": "session_timeout",
  "termination_context": {
    "last_activity": "2026-01-18T10:25:00Z",
    "timeout_seconds": 300
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true
}

Host Terminated

When the host ends the session for policy or error reasons: Request:
{
  "session_id": "sess_abc123",
  "reason": "host_terminated",
  "termination_context": {
    "cause": "user_left_app"
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true
}

ACP Integration Flow

When the reason is handoff_transaction:
  1. Host receives acp_handoff in the termination response
  2. Host initiates ACP checkout using the provided checkout_url and checkout_token or payload
  3. ACP handles the transaction while maintaining the user’s trust with the host
  4. Brand is not the merchant of record - ACP handles payment

Key Points

  1. Always terminate sessions - Even if the conversation seems done, call terminate to clean up resources and get follow-up suggestions.
  2. ACP handoff data has expiration - The expires_at field indicates how long the checkout context is valid.
  3. Follow-up enables re-engagement - Even non-transaction terminations can include suggestions for future engagement.
  4. Host maintains trust - Transactions go through ACP, keeping the user’s relationship with the host intact.