Skip to main content
Every campaign is created against a matchToken from one of three searches. The token fixes the channel set: campaign creation buys exactly the channels cached under it, and a channel outside that search can never be bought by that campaign.
Derives the search from the text plus the project’s AI context. The ad copy here is used only as a brief — it is deliberately not judged as publishable copy, because this request carries no destinationUrl and the foreign-domain rule cannot be evaluated without one. Validate separately.
Don’t know what to ask for? POST /api/v1/campaigns/generate-channel-prompt writes a prompt on your behalf from your ad copy, capped at 300 characters — a search box, not a brief. Drop it straight into match-channels-by-prompt.

Extending a selection instead of replacing it

Pass the previous matchToken to a look-alike search and the seeds are carried into the new list, at its head, with relevancy: 1. The selection extends.
Omit the token and the response carries the look-alikes alone — the seeds are gone from it, and since a campaign buys only what is cached under the token it consumes, those seeds could no longer be bought at all.
Seeds never come back among the look-alikes themselves: a seed is its own closest look-alike and would fill the top of the answer. They are re-added from matchToken when one is given. A token belonging to another user, project or platform is refused; an expired one is treated as absent.

Reading the results

Checking how you were read

filters comes back only from match-channels-by-prompt — the only search that infers its filters rather than being told them. It reports what was read out of your sentence, so 20K+ subscribers appears as minSubscribers: 20000. If that is not what you meant, reword and search again. An absent field means no such filter narrowed the search. ranking (balanced, max_reach, max_engagement) and minManagerContactConfidence (any, low, medium, high) always come back, because the search always ranks somehow and always applies a contact requirement.

Striking channels off

You do not have to buy everything a search returned. Pass excludedChannelIds to campaign creation and those channels become neither placements nor part of the queue behind them — the campaign can never come back to one of them later. Ids outside the previewed set are ignored; a strike-out list that leaves nothing at all is a 400.