Trillboards Campaign Planner
Plan and book out-of-home, CTV, video, audio and display campaigns, paid through Stripe.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"planner": {
"url": "https://api.trillboards.com/mcp/advertiser"
}
}
}Remote endpoints
https://api.trillboards.com/mcp/advertiserstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟢search_ad_inventory(query, city, state, radius, source, ...)
Find local digital out-of-home screens and available CTV, video, audio and display products for an agency client. Uses the advertiser portal inventory and prices.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"description": "Screen or venue text filter. Use geographic radius for a neighborhood; a text match is not a location search."
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Native city filter. For neighborhoods such as Manhattan, use radius around the requested area instead."
},
"state": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"radius": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"miles": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"required": [
"lat",
"lng",
"miles"
],
"additionalProperties": false,
"description": "Geographic inventory search around the client location. Use this for neighborhoods and nearby screens, without an additional neighborhood text or city filter."
},
"source": {
"type": "string",
"enum": [
"owned",
"vistar",
"mixed"
],
"default": "mixed"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
},
"cursor": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ctv",
"video",
"audio",
"display"
]
},
"maxItems": 4
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢preview_campaign_plan(advertisementId, campaignName, clientName, landingUrl, screenIds, ...)
Preview native campaign pricing and audience estimates for selected screens and channels. This does not reserve inventory or charge the advertiser.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"campaignName": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"clientName": {
"type": "string",
"maxLength": 160
},
"landingUrl": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "Client business or campaign landing page URL."
},
"screenIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 1000,
"default": []
},
"source": {
"type": "string",
"enum": [
"owned",
"vistar",
"mixed"
],
"default": "mixed"
},
"impressions": {
"type": "integer",
"exclusiveMinimum": 0
},
"budgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"ownedBudgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"partnerBudgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"ownedImpressions": {
"type": "integer",
"exclusiveMinimum": 0
},
"partnerImpressions": {
"type": "integer",
"exclusiveMinimum": 0
},
"quoteId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"quoteIds": {
"type": "object",
"properties": {
"owned": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"partner": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"additionalProperties": false
},
"flightStart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"flightEnd": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"startTime": {
"type": "string",
"default": "00:00"
},
"endTime": {
"type": "string",
"default": "23:59"
},
"timezone": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "IANA timezone for the local flight."
},
"providerPlan": {
"anyOf": [
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"geography": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"radius": {
"type": "object",
"properties": {
"center": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
},
"miles": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"required": [
"center",
"miles"
],
"additionalProperties": false
},
"markets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 2
},
"code": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"country",
"code"
],
"additionalProperties": false
},
"maxItems": 50
},
"postalCodes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 200
},
"countryCode": {
"type": "string",
"minLength": 2,
"maxLength": 2
},
"polygon": {
"type": "array",
"items": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
},
"minItems": 3,
"maxItems": 100
}
},
"additionalProperties": false
},
"budgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"flightStart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"flightEnd": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ctv",
"video",
"audio",
"display"
]
},
"minItems": 1,
"maxItems": 4
},
"selectedProductIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"personaIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"intuiziSegmentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"packageAudienceLens": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"contextualTargeting": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"contextualAvoidance": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"audience": {
"type": "object",
"properties": {
"age_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"income_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"culture": {
"type": "array",
"items": {
"type": "string",
"enum": [
"white",
"black",
"asian",
"american_indian",
"hispanic"
]
},
"minItems": 1
},
"education": {
"type": "array",
"items": {
"type": "string",
"enum": [
"hs_or_less",
"some_college",
"bachelors",
"graduate"
]
},
"minItems": 1
},
"gender": {
"type": "array",
"items": {
"type": "string",
"enum": [
"male",
"female"
]
},
"minItems": 1
},
"language": {
"type": "array",
"items": {
"type": "string",
"enum": [
"english_only",
"spanish",
"other_indo_european",
"asian_pacific",
"other"
]
},
"minItems": 1
},
"life_stage": {
"type": "array",
"items": {
"type": "string",
"enum": [
"new_movers",
"settled",
"long_tenured",
"married",
"singles",
"new_parents",
"empty_nesters"
]
},
"minItems": 1
},
"household": {
"type": "boolean"
},
"lifestyle": {
"type": "object",
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"propertyNames": {
"minLength": 1
}
},
"interests": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"intent": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"place": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"venue_concept": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
{
"type": "object",
"additionalProperties": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100
},
"propertyNames": {
"minLength": 1
}
}
]
},
"hard": {
"type": "boolean"
},
"min_fit": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
},
"targeting": {
"type": "object",
"properties": {
"personaIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"intuiziSegmentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"packageAudienceLens": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"contextualTargeting": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"contextualAvoidance": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"audience": {
"type": "object",
"properties": {
"age_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"income_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"culture": {
"type": "array",
"items": {
"type": "string",
"enum": [
"white",
"black",
"asian",
"american_indian",
"hispanic"
]
},
"minItems": 1
},
"education": {
"type": "array",
"items": {
"type": "string",
"enum": [
"hs_or_less",
"some_college",
"bachelors",
"graduate"
]
},
"minItems": 1
},
"gender": {
"type": "array",
"items": {
"type": "string",
"enum": [
"male",
"female"
]
},
"minItems": 1
},
"language": {
"type": "array",
"items": {
"type": "string",
"enum": [
"english_only",
"spanish",
"other_indo_european",
"asian_pacific",
"other"
]
},
"minItems": 1
},
"life_stage": {
"type": "array",
"items": {
"type": "string",
"enum": [
"new_movers",
"settled",
"long_tenured",
"married",
"singles",
"new_parents",
"empty_nesters"
]
},
"minItems": 1
},
"household": {
"type": "boolean"
},
"lifestyle": {
"type": "object",
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"propertyNames": {
"minLength": 1
}
},
"interests": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"intent": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"place": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"venue_concept": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
{
"type": "object",
"additionalProperties": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100
},
"propertyNames": {
"minLength": 1
}
}
]
},
"hard": {
"type": "boolean"
},
"min_fit": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
},
"required": [
"budgetUsd",
"flightStart",
"flightEnd",
"channels"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"flightStart",
"flightEnd"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴save_campaign_draft(advertisementId, campaignName, clientName, landingUrl, screenIds, ...)
Save or update an agency-owned campaign and selected inventory in the advertiser portal. The agency remains the owner and payer; clientName labels the client brief.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"campaignName": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"clientName": {
"type": "string",
"maxLength": 160
},
"landingUrl": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "Client business or campaign landing page URL."
},
"screenIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 1000,
"default": []
},
"source": {
"type": "string",
"enum": [
"owned",
"vistar",
"mixed"
],
"default": "mixed"
},
"impressions": {
"type": "integer",
"exclusiveMinimum": 0
},
"budgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"ownedBudgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"partnerBudgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"ownedImpressions": {
"type": "integer",
"exclusiveMinimum": 0
},
"partnerImpressions": {
"type": "integer",
"exclusiveMinimum": 0
},
"quoteId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"quoteIds": {
"type": "object",
"properties": {
"owned": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"partner": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"additionalProperties": false
},
"flightStart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"flightEnd": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"startTime": {
"type": "string",
"default": "00:00"
},
"endTime": {
"type": "string",
"default": "23:59"
},
"timezone": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "IANA timezone for the local flight."
},
"providerPlan": {
"anyOf": [
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"geography": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"radius": {
"type": "object",
"properties": {
"center": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
},
"miles": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"required": [
"center",
"miles"
],
"additionalProperties": false
},
"markets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 2
},
"code": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"country",
"code"
],
"additionalProperties": false
},
"maxItems": 50
},
"postalCodes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 200
},
"countryCode": {
"type": "string",
"minLength": 2,
"maxLength": 2
},
"polygon": {
"type": "array",
"items": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
},
"minItems": 3,
"maxItems": 100
}
},
"additionalProperties": false
},
"budgetUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"flightStart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"flightEnd": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ctv",
"video",
"audio",
"display"
]
},
"minItems": 1,
"maxItems": 4
},
"selectedProductIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"personaIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"intuiziSegmentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"packageAudienceLens": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"contextualTargeting": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"contextualAvoidance": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"audience": {
"type": "object",
"properties": {
"age_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"income_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"culture": {
"type": "array",
"items": {
"type": "string",
"enum": [
"white",
"black",
"asian",
"american_indian",
"hispanic"
]
},
"minItems": 1
},
"education": {
"type": "array",
"items": {
"type": "string",
"enum": [
"hs_or_less",
"some_college",
"bachelors",
"graduate"
]
},
"minItems": 1
},
"gender": {
"type": "array",
"items": {
"type": "string",
"enum": [
"male",
"female"
]
},
"minItems": 1
},
"language": {
"type": "array",
"items": {
"type": "string",
"enum": [
"english_only",
"spanish",
"other_indo_european",
"asian_pacific",
"other"
]
},
"minItems": 1
},
"life_stage": {
"type": "array",
"items": {
"type": "string",
"enum": [
"new_movers",
"settled",
"long_tenured",
"married",
"singles",
"new_parents",
"empty_nesters"
]
},
"minItems": 1
},
"household": {
"type": "boolean"
},
"lifestyle": {
"type": "object",
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"propertyNames": {
"minLength": 1
}
},
"interests": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"intent": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"place": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"venue_concept": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
{
"type": "object",
"additionalProperties": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100
},
"propertyNames": {
"minLength": 1
}
}
]
},
"hard": {
"type": "boolean"
},
"min_fit": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
},
"targeting": {
"type": "object",
"properties": {
"personaIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"intuiziSegmentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 50
},
"packageAudienceLens": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"contextualTargeting": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"contextualAvoidance": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100
},
"audience": {
"type": "object",
"properties": {
"age_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"income_range": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number"
}
},
"culture": {
"type": "array",
"items": {
"type": "string",
"enum": [
"white",
"black",
"asian",
"american_indian",
"hispanic"
]
},
"minItems": 1
},
"education": {
"type": "array",
"items": {
"type": "string",
"enum": [
"hs_or_less",
"some_college",
"bachelors",
"graduate"
]
},
"minItems": 1
},
"gender": {
"type": "array",
"items": {
"type": "string",
"enum": [
"male",
"female"
]
},
"minItems": 1
},
"language": {
"type": "array",
"items": {
"type": "string",
"enum": [
"english_only",
"spanish",
"other_indo_european",
"asian_pacific",
"other"
]
},
"minItems": 1
},
"life_stage": {
"type": "array",
"items": {
"type": "string",
"enum": [
"new_movers",
"settled",
"long_tenured",
"married",
"singles",
"new_parents",
"empty_nesters"
]
},
"minItems": 1
},
"household": {
"type": "boolean"
},
"lifestyle": {
"type": "object",
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"propertyNames": {
"minLength": 1
}
},
"interests": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"intent": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"place": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"venue_concept": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
{
"type": "object",
"additionalProperties": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100
},
"propertyNames": {
"minLength": 1
}
}
]
},
"hard": {
"type": "boolean"
},
"min_fit": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
},
"required": [
"budgetUsd",
"flightStart",
"flightEnd",
"channels"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable unique key for this action. Reuse this key and unchanged arguments when retrying."
}
},
"required": [
"flightStart",
"flightEnd",
"idempotency_key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴attach_campaign_creative(advertisementId, idempotency_key, creativeFile)
Copy a user-selected creative file into the native campaign asset and moderation flow. Attach artwork before booking. Existing live artwork changes follow the portal replacement workflow.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Native campaign ID returned by save_campaign_draft."
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable unique key for this action. Reuse this key and unchanged arguments when retrying."
},
"creativeFile": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"format": "uri"
},
"file_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"mime_type": {
"type": "string",
"maxLength": 100
},
"file_name": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"download_url",
"file_id"
],
"additionalProperties": false
}
},
"required": [
"advertisementId",
"idempotency_key",
"creativeFile"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢prepare_campaign_booking(advertisementId, bookingIds, providerLineIds, quoteId, quoteIds)
Read the exact current campaign selections, total, currency and creative readiness for the buyer to review before payment.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Native campaign ID returned by save_campaign_draft."
},
"bookingIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 1000,
"default": []
},
"providerLineIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100,
"default": []
},
"quoteId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"quoteIds": {
"type": "object",
"properties": {
"owned": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"partner": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"additionalProperties": false
}
},
"required": [
"advertisementId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_campaign_checkout(advertisementId, bookingIds, providerLineIds, quoteId, quoteIds, ...)
Create a Stripe checkout for the exact campaign and total the buyer reviewed. Open the returned checkoutUrl to complete payment. The campaign is booked after the verified native Stripe payment webhook.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Native campaign ID returned by save_campaign_draft."
},
"bookingIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 1000,
"default": []
},
"providerLineIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100,
"default": []
},
"quoteId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"quoteIds": {
"type": "object",
"properties": {
"owned": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"partner": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable unique key for this action. Reuse this key and unchanged arguments when retrying."
},
"reviewedSubtotalUsd": {
"type": "number",
"minimum": 0
},
"reviewedAmount": {
"type": "integer",
"minimum": 0,
"description": "Exact amountMinor from prepare_campaign_booking, in the currency minor unit."
},
"reviewedCurrency": {
"type": "string",
"minLength": 3,
"maxLength": 3,
"description": "Exact currency from prepare_campaign_booking."
},
"reviewedSelection": {
"type": "string",
"pattern": "^v1:[a-f0-9]{64}$",
"description": "Exact native reviewedSelection from prepare_campaign_booking; binds the reviewed inventory, flight, quantities and targeting."
}
},
"required": [
"advertisementId",
"idempotency_key",
"reviewedSubtotalUsd",
"reviewedAmount",
"reviewedCurrency",
"reviewedSelection"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_campaign_status(advertisementId)
Read the campaign and booking progress from the same order records as the advertiser portal, including creative review, scheduled dates and live fulfillment.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Native campaign ID returned by save_campaign_draft."
}
},
"required": [
"advertisementId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_campaign_delivery(advertisementId, limit)
Read measured campaign delivery and screen performance from the native campaign reporting services.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Native campaign ID returned by save_campaign_draft."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
}
},
"required": [
"advertisementId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪rebook_campaign(advertisementId, idempotency_key, flightStart, flightEnd)
Copy a previous campaign into a new unpaid campaign for new dates, preserving native creative lineage and obtaining fresh prices. Rebooking requires a new review and payment.
Input Schema
{
"type": "object",
"properties": {
"advertisementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Native campaign ID returned by save_campaign_draft."
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable unique key for this action. Reuse this key and unchanged arguments when retrying."
},
"flightStart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
},
"flightEnd": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Local calendar date, YYYY-MM-DD."
}
},
"required": [
"advertisementId",
"idempotency_key",
"flightStart",
"flightEnd"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"inventory",
"plan",
"campaign",
"proposal",
"checkout",
"delivery"
]
},
"advertisementId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"checkoutUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"kind"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence