Skip to main content

Platform Request Schema

Overview

PlatformRequest is sent Platform → AdMesh (Operator). It carries:
  • User context (locale, placement, device, geography, identity)
  • Platform-declared intent (explicit, for publisher consent gating)
  • Runtime context (session, turn, query, optional messages)
  • Auction parameters (pricing model, floor, currency)
This payload is platform-asserted, not operator-interpreted. The operator validates it, checks publisher consent (e.g. aip.json editorial_domains vs extensions.aip.intent), and—if allowed—generates a ContextRequest for brand agents. Do not blur PlatformRequest with ContextRequest; they are distinct messages.

UCP structure

The PlatformRequest uses the UCP (User Context Protocol) envelope with nested objects: producer, context, identity, extensions.
FieldTypeDescription
spec_versionstringUCP specification version (e.g. “1.0.0”)
message_idstringUnique identifier for this auction request
timestampstringISO 8601 timestamp when the platform generated the request
producerobjectProducer of the request (the AI platform/host)
contextobjectContext (language, publisher, placement, device, geography)
identityobjectIdentity (namespace, value_hash, confidence)
extensionsobjectVendor-namespaced data; AIP uses extensions.aip

Producer object

FieldTypeDescription
agent_idstringIdentifier of the AI platform sending this request
agent_rolestringMust be "platform". The platform is the AI host, not the content publisher. Reserve "publisher" for content owners only.
softwarestringSoftware name (e.g. “chatgpt”)
software_versionstringSoftware version or model identifier (e.g. “4.3-mini”)

Context object

FieldTypeDescription
languagestringUser locale in BCP 47 format (e.g. “en-US”)
publisherstringPublisher identifier (same as producer.agent_id in this context)
placement.ad_unitstringPlatform surface: “conversation”, “chat”, “voice”, etc.
device.platformstringDevice platform: “web”, “mobile”, etc.
device.form_factorstring”mobile”, “desktop”, “tablet”
device.ua_hashstringOptional user agent hash
geography.countrystringUser country code (ISO 3166-1 alpha-2, e.g. “US”)

Identity object

FieldTypeDescription
namespacestringIdentity namespace (e.g. “platform_user”)
value_hashstringAnonymous hashed user ID
confidencenumberConfidence level for identity (0.0 to 1.0)

Extensions: extensions.aip

AIP-specific data lives under extensions.aip and is split into three sub-blocks so consent logic never touches monetization:
BlockRequiredPurpose
intentYesPlatform-declared intent for publisher consent gating. Must be explicit and structured so the operator can match against publisher aip.json editorial_domains.
runtimeYesSession and query context; used for operator enrichment and ContextRequest generation.
auctionNoMonetization parameters (pricing model, floor, currency).

extensions.aip.intent

Intent must be explicit so it can be enforced against publisher editorial_domains. Do not infer intent only from query_text or messages.
FieldTypeDescription
domainstringEditorial domain (e.g. “business”, “technology”). Matched against publisher aip.json editorial_domains.
subdomainstringFiner-grained subdomain (e.g. “crm”, “ai”).
confidencenumberConfidence in this intent classification (0.0–1.0).

extensions.aip.runtime

FieldTypeDescription
session_idstringConversation or interaction session ID
turn_indexintegerTurn index in the conversation
query_textstringUser’s raw query text
messagesarrayOptional short conversation history (last N turns)
latency_budget_msintegerOptional latency budget from platform (ms)

extensions.aip.auction

Monetization is kept separate from intent so consent logic never touches auction logic.
FieldTypeDescription
pricing_modelstringPreferred pricing model: “CPX”, “CPC”, “CPA”
cpx_floornumberMinimum CPX (USD) required by the platform for this auction
currencystringCurrency for pricing (ISO 4217, e.g. “USD”)

Example

{
  "spec_version": "1.0.0",
  "message_id": "req_92fA1",
  "timestamp": "2025-11-14T18:22:00Z",

  "producer": {
    "agent_id": "openai_chat",
    "agent_role": "platform",
    "software": "chatgpt",
    "software_version": "4.3-mini"
  },

  "context": {
    "language": "en-US",
    "publisher": "openai_chat",
    "placement": { "ad_unit": "conversation" },
    "device": {
      "platform": "web",
      "form_factor": "desktop",
      "ua_hash": "ua_hash_xyz"
    },
    "geography": { "country": "US" }
  },

  "identity": {
    "namespace": "platform_user",
    "value_hash": "user_hash_abc123",
    "confidence": 1.0
  },

  "extensions": {
    "aip": {
      "intent": {
        "domain": "business",
        "subdomain": "crm",
        "confidence": 0.91
      },
      "runtime": {
        "session_id": "sess_001",
        "turn_index": 3,
        "query_text": "best CRM for small teams",
        "messages": [
          { "role": "user", "content": "best CRM tools?" },
          { "role": "assistant", "content": "HubSpot, Zoho, Salesforce…" }
        ],
        "latency_budget_ms": 500
      },
      "auction": {
        "pricing_model": "CPX",
        "cpx_floor": 0.05,
        "currency": "USD"
      }
    }
  }
}

Validation rules

  • spec_version must be “1.0.0” for UCP v1.0.
  • message_id must be a unique string identifier.
  • producer.agent_role must be "platform" (not “publisher”).
  • extensions.aip must contain intent and runtime; auction is optional.
  • extensions.aip.intent must have domain, subdomain, and confidence for consent matching.
  • context.language must match ^[a-z]{2}-[A-Z]{2}$ (BCP 47).
  • context.geography.country must match ^[A-Z]{2}$ (ISO 3166-1 alpha-2).
  • timestamp must be RFC 3339 / ISO 8601.
  • identity.confidence must be between 0.0 and 1.0.