Building a webhook integration? Read the webhook guide for signatures, retries, event schemas, and troubleshooting.
apiHosted AI, explicit consent

Preview campaign canary

POST /api/v1/strategy/preview-canary

Resolve up to 10 campaign-table rows through the approved brief variable plan. external_agent renders current saved touches only and holds missing or stale copy without hosted inference. pipeline_hosted preserves Writer drafting and is the default when omitted. Returns final sample messages, evidence, fallbacks, held-row reasons, operation provenance, and production review URLs for the brief and table. Creates drafts only and cannot approve or launch.

Parameters

workspaceId
string
Optional with API key auth, inferred from the key.
briefIdrequired
string
No description.
rowIds
string[]
Optional sample row IDs, maximum 10. Defaults to the first 10 campaign-table rows.
executionMode
string
Use external_agent to render current saved touches without Pipeline hosted AI.
external_agent | pipeline_hosted
allowHostedAi
boolean
Must be true when this operation uses Pipeline hosted inference.

Example

REST requestbash
curl -X POST "https://app.pipeline.help/api/v1/strategy/preview-canary" \
-H "Authorization: Bearer $PIPELINE_API_KEY" \
-H "X-Pipeline-Execution-Policy: hosted-enabled" \
-H "Content-Type: application/json" \
-d '{"briefId":"00000000-0000-4000-8000-000000000000","allowHostedAi":true}'

Response

Success response schemajson schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string"
},
"tableId": {
"type": "string"
},
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rowId": {
"type": "string"
},
"legacy": {
"type": "boolean"
},
"touches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"outputRole": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"static",
"formula",
"ai"
]
},
"status": {
"type": "string",
"enum": [
"ready",
"held",
"requires_ai",
"blocked"
]
},
"body": {
"type": [
"string",
"null"
]
},
"selectedBranch": {
"type": "string",
"enum": [
"static",
"formula",
"fallback",
"ai",
"held"
]
},
"variables": {
"type": "object"
},
"evidence": {
"type": "object"
},
"fallbackReason": {
"type": [
"string",
"null"
]
},
"heldReason": {
"type": [
"string",
"null"
]
},
"error": {
"type": [
"string",
"null"
]
},
"operations": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"outputRole",
"mode",
"status",
"body",
"selectedBranch",
"variables",
"evidence",
"fallbackReason",
"heldReason",
"error",
"operations"
]
}
},
"heldReason": {
"type": [
"string",
"null"
]
}
},
"required": [
"rowId",
"legacy",
"touches",
"heldReason"
]
}
},
"summary": {
"type": "object",
"properties": {
"totalRows": {
"type": "number"
},
"readyRows": {
"type": "number"
},
"heldRows": {
"type": "number"
},
"fallbackRows": {
"type": "number"
},
"operations": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"totalRows",
"readyRows",
"heldRows",
"fallbackRows",
"operations"
]
},
"approvalRequired": {
"type": "boolean"
},
"launchAllowed": {
"type": "boolean"
},
"reviewUrls": {
"type": "object",
"properties": {
"strategyBrief": {
"type": "string",
"format": "uri"
},
"table": {
"type": "string",
"format": "uri"
},
"campaign": {
"type": "string",
"format": "uri"
},
"campaignWorkflow": {
"type": "string",
"format": "uri"
}
},
"required": [
"strategyBrief",
"table"
]
}
},
"required": [
"briefId",
"tableId",
"rows",
"summary",
"approvalRequired",
"launchAllowed",
"reviewUrls"
]
}

HTTP errors

401
Missing or invalid API key.
403
Authenticated but not permitted for the workspace or resource.
404
The requested resource was not found.
Pipeline REST API reference | Pipeline