MCP tool
create_brand_lift_study
Create a local study brief from exact catalog template selections. Human supplier quote and purchase approval are separate steps.
Input
Pass fields from this schema as the tool arguments. Runtime ownership, product scope and readiness checks still apply.
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"sandbox",
"live"
]
},
"spec": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"advertiserName": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"startDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"endDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"countryLanguageId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"industryId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"channels": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
}
},
"expectedImpressionsCount": {
"type": "object",
"properties": {
"digital": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"linear_tv": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"social": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"additionalProperties": false
},
"dataPartners": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"templateSelections": {
"minItems": 2,
"maxItems": 55,
"type": "array",
"items": {
"type": "object",
"properties": {
"usage": {
"type": "string",
"enum": [
"lift",
"baseline"
]
},
"questionName": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"kpiType": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"definitionDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"order": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"fieldValues": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"name",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"usage",
"questionName",
"kpiType",
"definitionDigest",
"order",
"fieldValues"
],
"additionalProperties": false
}
},
"brand": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"competitors": {
"minItems": 2,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
},
"allowIp": {
"type": "boolean"
}
},
"required": [
"name",
"advertiserName",
"startDate",
"endDate",
"countryLanguageId",
"industryId",
"channels",
"expectedImpressionsCount",
"dataPartners",
"templateSelections",
"brand",
"competitors",
"allowIp"
],
"additionalProperties": false
},
"retainResultsUntil": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"campaignId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"idempotencyKey": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "durable UUID; retain this exact key if the outcome is uncertain"
},
"agentStepId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"expectedActionDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"mode",
"spec",
"retainResultsUntil",
"campaignId",
"idempotencyKey",
"agentStepId",
"expectedActionDigest"
],
"additionalProperties": false
}REST mapping and authority
The tool wraps this REST endpoint. The mapping identifies path/query/body transformations and approval or idempotency headers.
Request contract
{
"method": "POST",
"path": "/api/v1/campaigns/{campaignId}/brand-lift-studies",
"pathFields": [
"campaignId"
],
"pathSchema": {
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"additionalProperties": false,
"required": [
"campaignId"
]
},
"pathEncoding": "encodeURIComponent for each path field",
"governedAction": "study.create",
"headers": {
"x-chorus-agent-step-id": "agentStepId",
"x-chorus-agent-action-digest": "expectedActionDigest",
"idempotency-key": "idempotencyKey"
},
"bodySchema": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"sandbox",
"live"
]
},
"spec": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"advertiserName": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"startDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"endDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"countryLanguageId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"industryId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"channels": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
}
},
"expectedImpressionsCount": {
"type": "object",
"properties": {
"digital": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"linear_tv": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"social": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"additionalProperties": false
},
"dataPartners": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"templateSelections": {
"minItems": 2,
"maxItems": 55,
"type": "array",
"items": {
"type": "object",
"properties": {
"usage": {
"type": "string",
"enum": [
"lift",
"baseline"
]
},
"questionName": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"kpiType": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"definitionDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"order": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"fieldValues": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"name",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"usage",
"questionName",
"kpiType",
"definitionDigest",
"order",
"fieldValues"
],
"additionalProperties": false
}
},
"brand": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"competitors": {
"minItems": 2,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
},
"allowIp": {
"type": "boolean"
}
},
"required": [
"name",
"advertiserName",
"startDate",
"endDate",
"countryLanguageId",
"industryId",
"channels",
"expectedImpressionsCount",
"dataPartners",
"templateSelections",
"brand",
"competitors",
"allowIp"
],
"additionalProperties": false
},
"retainResultsUntil": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
}
},
"additionalProperties": false,
"required": [
"mode",
"spec",
"retainResultsUntil"
]
},
"responseMapping": "REST JSON is returned as MCP structuredContent and a compatibility text block; privacy-sensitive tools validate their output schema."
}Output
This is the registered MCP output envelope. Nested fields are only modeled where the schema explicitly defines them.
Output JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"study": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"campaignId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"mode": {
"type": "string",
"enum": [
"sandbox",
"live"
]
},
"revision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 2147483647
},
"status": {
"type": "string",
"enum": [
"brief",
"quote-requested",
"quoted",
"purchase-approved",
"draft-submitting",
"provider-draft",
"launch-ready",
"launch-submitting",
"launch-acknowledged",
"collecting",
"results-available",
"provider-complete",
"closed-local",
"draft-delete-requested",
"draft-deleted",
"cancellation-requested",
"cancelled",
"reconciliation-required",
"failed"
]
},
"spec": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"advertiserName": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"startDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"endDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"countryLanguageId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"industryId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"channels": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
}
},
"expectedImpressionsCount": {
"type": "object",
"properties": {
"digital": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"linear_tv": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"social": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"additionalProperties": false
},
"dataPartners": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"templateSelections": {
"minItems": 2,
"maxItems": 55,
"type": "array",
"items": {
"type": "object",
"properties": {
"usage": {
"type": "string",
"enum": [
"lift",
"baseline"
]
},
"questionName": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"kpiType": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"definitionDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"order": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"fieldValues": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"name",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"usage",
"questionName",
"kpiType",
"definitionDigest",
"order",
"fieldValues"
],
"additionalProperties": false
}
},
"brand": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"competitors": {
"minItems": 2,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
},
"allowIp": {
"type": "boolean"
}
},
"required": [
"name",
"advertiserName",
"startDate",
"endDate",
"countryLanguageId",
"industryId",
"channels",
"expectedImpressionsCount",
"dataPartners",
"templateSelections",
"brand",
"competitors",
"allowIp"
],
"additionalProperties": false
},
"specDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"selectedQuoteId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"providerAccountId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"providerStudyId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"providerStatus": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
]
},
"providerDefinitionDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"provider": {
"anyOf": [
{
"type": "object",
"properties": {
"studyId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"accountId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"advertiserName": {
"anyOf": [
{
"type": "string",
"maxLength": 300
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"startDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"endDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"countryLanguageId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"industryId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"channels": {
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social",
"forced_exposure"
]
}
},
"permissionId": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"providerUpdatedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"providerDataUpdatedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"definitionDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"evidenceSource": {
"type": "string",
"enum": [
"provider-reported",
"sandbox-modeled"
]
},
"configurationDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"studyId",
"accountId",
"name",
"advertiserName",
"status",
"startDate",
"endDate",
"countryLanguageId",
"industryId",
"channels",
"permissionId",
"providerUpdatedAt",
"providerDataUpdatedAt",
"definitionDigest",
"evidenceSource",
"configurationDigest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"providerConfigurationDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"tracking": {
"anyOf": [
{
"type": "object",
"properties": {
"providerAccountId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"providerStudyId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"channels": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
}
},
"placements": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": [
"digital",
"linear_tv",
"social"
]
},
"campaignLineIds": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"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",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"supplierAcceptanceEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
}
},
"required": [
"channel",
"campaignLineIds",
"method",
"installationEvidence",
"supplierAcceptanceEvidence"
],
"additionalProperties": false
}
},
"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",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
}
},
"required": [
"source",
"assertedBy",
"assertedAt"
],
"additionalProperties": false
},
"installedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"validUntil": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"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",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"consentEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"processingTermsEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"obtainedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"expiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"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
},
{
"type": "null"
}
]
},
"trackingDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"supplierCommittedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"cancellationRequestedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"retainResultsUntil": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"campaignLines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"channel": {
"type": "string",
"enum": [
"ctv",
"audio",
"tv",
"cinema",
"dooh",
"search",
"social"
]
},
"adapterKey": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"id",
"channel",
"adapterKey"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"campaignId",
"mode",
"revision",
"status",
"spec",
"specDigest",
"selectedQuoteId",
"providerAccountId",
"providerStudyId",
"providerStatus",
"providerDefinitionDigest",
"provider",
"providerConfigurationDigest",
"tracking",
"trackingDigest",
"supplierCommittedAt",
"cancellationRequestedAt",
"retainResultsUntil",
"createdAt",
"updatedAt",
"campaignLines"
],
"additionalProperties": false
},
"surveyPreview": {
"anyOf": [
{
"type": "object",
"properties": {
"questions": {
"maxItems": 55,
"type": "array",
"items": {
"type": "object",
"properties": {
"usage": {
"type": "string",
"enum": [
"lift",
"baseline"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"kpiType": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
]
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 10000
},
"order": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"answers": {
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 500
}
}
},
"required": [
"usage",
"name",
"kpiType",
"text",
"order",
"answers"
],
"additionalProperties": false
}
},
"providerRequestDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"specDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"questions",
"providerRequestDigest",
"specDigest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"quotes": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"content": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"operator-recorded-supplier-quote",
"sandbox-fixture"
]
},
"specDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"providerAccountId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"connectionRevision": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
{
"type": "null"
}
]
},
"configuredIdentityDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"dossierRevision": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
{
"type": "null"
}
]
},
"dossierDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"issuedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"expiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"supplier": {
"type": "object",
"properties": {
"quoteReference": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$"
},
"evidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"contractEvidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
"currency": {
"type": "string",
"enum": [
"GBP",
"USD",
"EUR"
]
},
"subtotalMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"taxMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"totalMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"maximumLiabilityMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"maximumCancellationLiabilityMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"billingTrigger": {
"type": "string",
"enum": [
"order-acceptance",
"draft-creation",
"tracking-setup",
"launch",
"invoice"
]
},
"includedScope": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"quoteReference",
"evidence",
"contractEvidence",
"currency",
"subtotalMinor",
"taxMinor",
"totalMinor",
"maximumLiabilityMinor",
"maximumCancellationLiabilityMinor",
"billingTrigger",
"includedScope"
],
"additionalProperties": false
},
"customer": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"const": "GBP"
},
"subtotalMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"taxMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"totalMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"maximumCommitmentMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"cancellationMaximumMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"refundTerms": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"currency",
"subtotalMinor",
"taxMinor",
"totalMinor",
"maximumCommitmentMinor",
"cancellationMaximumMinor",
"refundTerms"
],
"additionalProperties": false
},
"foreignCurrencyCoverageEvidence": {
"anyOf": [
{
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"source",
"specDigest",
"providerAccountId",
"connectionRevision",
"configuredIdentityDigest",
"dossierRevision",
"dossierDigest",
"issuedAt",
"expiresAt",
"supplier",
"customer",
"foreignCurrencyCoverageEvidence"
],
"additionalProperties": false
},
"contentDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
}
},
"required": [
"id",
"content",
"contentDigest",
"recordedAt"
],
"additionalProperties": false
}
},
"approvals": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"purpose": {
"type": "string",
"enum": [
"purchase",
"draft",
"launch",
"draft-delete"
]
},
"content": {
"type": "object",
"properties": {
"studyId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"quoteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"purpose": {
"type": "string",
"enum": [
"purchase",
"draft",
"launch",
"draft-delete"
]
},
"mode": {
"type": "string",
"enum": [
"sandbox",
"live"
]
},
"studyRevision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 2147483647
},
"specDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"trackingDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"providerDefinitionDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"providerRequestDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"providerStudyId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"providerAccountId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"connectionRevision": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
{
"type": "null"
}
]
},
"configuredIdentityDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"dossierRevision": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
{
"type": "null"
}
]
},
"dossierDigest": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"const": "GBP"
},
"maximumCommitmentMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"incrementalReservationMinor": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"approvedBy": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"approvedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"expiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
}
},
"required": [
"studyId",
"quoteId",
"purpose",
"mode",
"studyRevision",
"specDigest",
"trackingDigest",
"providerDefinitionDigest",
"providerRequestDigest",
"providerStudyId",
"providerAccountId",
"connectionRevision",
"configuredIdentityDigest",
"dossierRevision",
"dossierDigest",
"currency",
"maximumCommitmentMinor",
"incrementalReservationMinor",
"approvedBy",
"approvedAt",
"expiresAt"
],
"additionalProperties": false
},
"contentDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"approvedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"expiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"consumedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"purpose",
"content",
"contentDigest",
"approvedAt",
"expiresAt",
"consumedAt"
],
"additionalProperties": false
}
},
"attempts": {
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"operation": {
"type": "string",
"enum": [
"catalog-read",
"study-read",
"results-read",
"create-draft",
"launch",
"delete-draft"
]
},
"status": {
"type": "string",
"enum": [
"in-flight",
"succeeded",
"failed",
"reconciliation-required"
]
},
"startedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"settledAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"errorCode": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
]
},
"resolvedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"operation",
"status",
"startedAt",
"settledAt",
"errorCode",
"resolvedAt"
],
"additionalProperties": false
}
},
"financial": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"const": "GBP"
},
"financialStatus": {
"type": "string",
"enum": [
"unfunded",
"reserved",
"partially-settled",
"settled",
"reconciliation-required"
]
},
"quoteId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"maximumCommitmentMinor": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
{
"type": "null"
}
]
},
"heldMinor": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"chargesMinor": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"creditsMinor": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"netChargedMinor": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ts": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"advertiserId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"studyId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"quoteId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"currency": {
"type": "string",
"const": "GBP"
},
"kind": {
"type": "string",
"enum": [
"charge",
"credit"
]
},
"amountMinor": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"settlementKey": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"originalSettlementKey": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"evidence": {
"type": "object",
"properties": {
"artifactId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"artifactId",
"sha256"
],
"additionalProperties": false
}
},
"required": [
"ts",
"advertiserId",
"studyId",
"quoteId",
"currency",
"kind",
"amountMinor",
"settlementKey",
"originalSettlementKey",
"description",
"evidence"
],
"additionalProperties": false
}
}
},
"required": [
"currency",
"financialStatus",
"quoteId",
"maximumCommitmentMinor",
"heldMinor",
"chargesMinor",
"creditsMinor",
"netChargedMinor",
"lines"
],
"additionalProperties": false
},
"latestResult": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"source": {
"type": "string",
"enum": [
"provider-reported",
"sandbox-modeled"
]
},
"retrievedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"providerDataUpdatedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"retainUntil": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"erasedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"source",
"retrievedAt",
"providerDataUpdatedAt",
"retainUntil",
"erasedAt"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"resultPolling": {
"type": "object",
"properties": {
"parked": {
"type": "boolean"
},
"consecutiveFailures": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"nextPollAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"lastPolledAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
}
},
"required": [
"parked",
"consecutiveFailures",
"nextPollAt",
"lastPolledAt"
],
"additionalProperties": false
},
"note": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"replayed": {
"type": "boolean"
}
},
"required": [
"study",
"surveyPreview",
"quotes",
"approvals",
"attempts",
"financial",
"latestResult",
"resultPolling",
"note",
"replayed"
],
"additionalProperties": false
}Safety annotations
MCP annotations
{
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
}Annotations help a client present the tool. The API independently enforces authorization and exact action approvals. Error and retry guidance →