POST /api/v1/brand-lift-studies/{studyId}/tracking
Run brand lift studies / tracking
Authenticated and advertiser scoped. Cross-tenant resource access returns 404. Product/channel entitlements also apply.
Requires an authenticated human with supplier:authorize permission. Delegated agents cannot perform this operator action.
The request schema is generated from the runtime Zod input validator. Cross-field refinements and state-dependent constraints are additionally enforced by the API.
Request
POST /api/v1/brand-lift-studies/{studyId}/trackingUse the configured API origin. Private requests require a verified Bearer credential; an agent mutation can additionally require exact approval headers. Authentication guide →
| Parameter | Location | Required | Description |
|---|---|---|---|
studyId | path | Yes | |
Idempotency-Key | header | Yes | Retain the same key when retrying the same request. Replay and collision behavior are endpoint-specific; see this operation’s description. |
Parameter schemas
[
{
"name": "studyId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "Idempotency-Key",
"in": "header",
"required": true,
"description": "Retain the same key when retrying the same request. Replay and collision behavior are endpoint-specific; see this operation’s description.",
"schema": {
"type": "string",
"format": "uuid"
}
}
]{
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"expectedRevision": {
"type": "integer",
"exclusiveMinimum": 0
},
"tracking": {
"type": "object",
"properties": {
"providerAccountId": {
"type": "string",
"format": "uuid"
},
"providerStudyId": {
"type": "string",
"format": "uuid"
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
},
"minItems": 1,
"maxItems": 3
},
"placements": {
"type": "array",
"items": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
},
"campaignLineIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
},
"method": {
"type": "string",
"enum": [
"provider-confirmed-s2s",
"provider-approved-pixel",
"provider-approved-data-partner",
"sandbox-fixture"
]
},
"installationEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"supplierAcceptanceEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
}
},
"required": [
"channel",
"campaignLineIds",
"method",
"installationEvidence",
"supplierAcceptanceEvidence"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 100
},
"provenance": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"operator-attested",
"sandbox-fixture"
]
},
"assertedBy": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"assertedAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"source",
"assertedBy",
"assertedAt"
],
"additionalProperties": false
},
"installedAt": {
"type": "string",
"format": "date-time"
},
"validUntil": {
"type": "string",
"format": "date-time"
},
"privacy": {
"type": "object",
"properties": {
"lawfulBasis": {
"type": "string",
"const": "consent"
},
"purpose": {
"type": "string",
"const": "brand-lift-measurement"
},
"noticeEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"consentEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"processingTermsEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"obtainedAt": {
"type": "string",
"format": "date-time"
},
"expiresAt": {
"type": "string",
"format": "date-time"
},
"includesMeasurementSharing": {
"type": "boolean",
"const": true
},
"includesIp": {
"type": "boolean"
}
},
"required": [
"lawfulBasis",
"purpose",
"noticeEvidence",
"consentEvidence",
"processingTermsEvidence",
"obtainedAt",
"expiresAt",
"includesMeasurementSharing",
"includesIp"
],
"additionalProperties": false
}
},
"required": [
"providerAccountId",
"providerStudyId",
"channels",
"placements",
"provenance",
"installedAt",
"validUntil",
"privacy"
],
"additionalProperties": false
}
},
"required": [
"expectedRevision",
"tracking"
],
"additionalProperties": false
}
}
}
}Responses
Reference schemas resolve through the downloadable OpenAPI components. The specification marks unmodeled success payloads; an unrestricted payload is not a promise that arbitrary fields exist.
400Invalid request or unsupported fields
{
"description": "Invalid request or unsupported fields",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}401Missing or invalid authentication
{
"description": "Missing or invalid authentication",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}403Permission or product scope refused
{
"description": "Permission or product scope refused",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}404Route or tenant-scoped resource not found
{
"description": "Route or tenant-scoped resource not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}409State, revision, approval, funding or idempotency conflict
{
"description": "State, revision, approval, funding or idempotency conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}422Supplier configuration, capability or upstream refusal
{
"description": "Supplier configuration, capability or upstream refusal",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}429Rate limit reached; wait before retrying
{
"description": "Rate limit reached; wait before retrying",
"headers": {
"x-ratelimit-limit": {
"description": "Maximum requests permitted in the current rate-limit window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-remaining": {
"description": "Requests remaining in the current window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-reset": {
"description": "Seconds until the current rate-limit window resets.",
"schema": {
"type": "integer"
}
},
"retry-after": {
"description": "Minimum seconds to wait before retrying.",
"schema": {
"type": "integer"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}500Internal error; inspect state before retrying a mutation
{
"description": "Internal error; inspect state before retrying a mutation",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}503Dependency or authentication verifier unavailable
{
"description": "Dependency or authentication verifier unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}2XXSuccessful response. Response schema completeness: unmodeled. The request contract is complete; nested service payloads are not yet fully modeled in OpenAPI. Inspect returned fields before generating a typed SDK.
{
"description": "Successful response. Response schema completeness: unmodeled. The request contract is complete; nested service payloads are not yet fully modeled in OpenAPI. Inspect returned fields before generating a typed SDK.",
"headers": {
"x-ratelimit-limit": {
"description": "Maximum requests permitted in the current rate-limit window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-remaining": {
"description": "Requests remaining in the current window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-reset": {
"description": "Seconds until the current rate-limit window resets.",
"schema": {
"type": "integer"
}
}
},
"content": {
"application/json": {
"schema": {}
}
}
}Operation constraints
{
"x-response-schema-completeness": "unmodeled",
"x-rate-limit": {
"requests": 300,
"windowMilliseconds": 60000,
"key": "request IP",
"headers": [
"x-ratelimit-limit",
"x-ratelimit-remaining",
"x-ratelimit-reset"
]
},
"x-idempotency": {
"policy": "required",
"note": "There is no universal Idempotency-Key middleware. Only the documented endpoint mechanisms protect retries."
},
"x-human-only": true,
"x-required-human-permissions": [
"supplier:authorize"
]
}Complete operation
{
"operationId": "post_api_v1_brand_lift_studies_studyId_tracking",
"summary": "Run brand lift studies / tracking",
"description": "Authenticated and advertiser scoped. Cross-tenant resource access returns 404. Product/channel entitlements also apply.\n\nRequires an authenticated human with supplier:authorize permission. Delegated agents cannot perform this operator action.\n\nThe request schema is generated from the runtime Zod input validator. Cross-field refinements and state-dependent constraints are additionally enforced by the API.",
"tags": [
"Brand lift studies"
],
"security": [
{
"bearerAuth": []
}
],
"parameters": [
{
"name": "studyId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "Idempotency-Key",
"in": "header",
"required": true,
"description": "Retain the same key when retrying the same request. Replay and collision behavior are endpoint-specific; see this operation’s description.",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"expectedRevision": {
"type": "integer",
"exclusiveMinimum": 0
},
"tracking": {
"type": "object",
"properties": {
"providerAccountId": {
"type": "string",
"format": "uuid"
},
"providerStudyId": {
"type": "string",
"format": "uuid"
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
},
"minItems": 1,
"maxItems": 3
},
"placements": {
"type": "array",
"items": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
},
"campaignLineIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
},
"method": {
"type": "string",
"enum": [
"provider-confirmed-s2s",
"provider-approved-pixel",
"provider-approved-data-partner",
"sandbox-fixture"
]
},
"installationEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"supplierAcceptanceEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
}
},
"required": [
"channel",
"campaignLineIds",
"method",
"installationEvidence",
"supplierAcceptanceEvidence"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 100
},
"provenance": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"operator-attested",
"sandbox-fixture"
]
},
"assertedBy": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"assertedAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"source",
"assertedBy",
"assertedAt"
],
"additionalProperties": false
},
"installedAt": {
"type": "string",
"format": "date-time"
},
"validUntil": {
"type": "string",
"format": "date-time"
},
"privacy": {
"type": "object",
"properties": {
"lawfulBasis": {
"type": "string",
"const": "consent"
},
"purpose": {
"type": "string",
"const": "brand-lift-measurement"
},
"noticeEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"consentEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"processingTermsEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"obtainedAt": {
"type": "string",
"format": "date-time"
},
"expiresAt": {
"type": "string",
"format": "date-time"
},
"includesMeasurementSharing": {
"type": "boolean",
"const": true
},
"includesIp": {
"type": "boolean"
}
},
"required": [
"lawfulBasis",
"purpose",
"noticeEvidence",
"consentEvidence",
"processingTermsEvidence",
"obtainedAt",
"expiresAt",
"includesMeasurementSharing",
"includesIp"
],
"additionalProperties": false
}
},
"required": [
"providerAccountId",
"providerStudyId",
"channels",
"placements",
"provenance",
"installedAt",
"validUntil",
"privacy"
],
"additionalProperties": false
}
},
"required": [
"expectedRevision",
"tracking"
],
"additionalProperties": false
}
}
}
},
"responses": {
"400": {
"description": "Invalid request or unsupported fields",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"401": {
"description": "Missing or invalid authentication",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"403": {
"description": "Permission or product scope refused",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"404": {
"description": "Route or tenant-scoped resource not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"409": {
"description": "State, revision, approval, funding or idempotency conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"422": {
"description": "Supplier configuration, capability or upstream refusal",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"429": {
"description": "Rate limit reached; wait before retrying",
"headers": {
"x-ratelimit-limit": {
"description": "Maximum requests permitted in the current rate-limit window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-remaining": {
"description": "Requests remaining in the current window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-reset": {
"description": "Seconds until the current rate-limit window resets.",
"schema": {
"type": "integer"
}
},
"retry-after": {
"description": "Minimum seconds to wait before retrying.",
"schema": {
"type": "integer"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"500": {
"description": "Internal error; inspect state before retrying a mutation",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"503": {
"description": "Dependency or authentication verifier unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"2XX": {
"description": "Successful response. Response schema completeness: unmodeled. The request contract is complete; nested service payloads are not yet fully modeled in OpenAPI. Inspect returned fields before generating a typed SDK.",
"headers": {
"x-ratelimit-limit": {
"description": "Maximum requests permitted in the current rate-limit window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-remaining": {
"description": "Requests remaining in the current window.",
"schema": {
"type": "integer"
}
},
"x-ratelimit-reset": {
"description": "Seconds until the current rate-limit window resets.",
"schema": {
"type": "integer"
}
}
},
"content": {
"application/json": {
"schema": {}
}
}
}
},
"x-response-schema-completeness": "unmodeled",
"x-rate-limit": {
"requests": 300,
"windowMilliseconds": 60000,
"key": "request IP",
"headers": [
"x-ratelimit-limit",
"x-ratelimit-remaining",
"x-ratelimit-reset"
]
},
"x-idempotency": {
"policy": "required",
"note": "There is no universal Idempotency-Key middleware. Only the documented endpoint mechanisms protect retries."
},
"x-human-only": true,
"x-required-human-permissions": [
"supplier:authorize"
]
}