Before you start
Step by step
1
Describe your buyer in plain English
Send a natural-language
query to POST /business/prospects/search. Fuse converts the sentence into structured filters, runs the search, and echoes the filters back.filters is what your sentence resolved to, and total is the true match count. unresolvedCriteria quotes any part of the sentence that could not be mapped to a filter: if it is not empty, the results are broader than you asked for. Tighten them by editing filters and searching again with filters instead of query. Build a list from search shows how to look up exact filter values.Keep size small while you tune. Every profile returned costs 2 credits.2
Check your credit balance
limit, the most a work email can cost. If it cannot, the save is refused with 402 INSUFFICIENT_CREDITS and nothing is billed. Most emails then cost 20, and a contact with no email found costs nothing. If spending elsewhere runs the balance down while the job runs, the job pauses as stopped until you top up and resume it in the app.3
Save the matches with work emails
POST /business/prospects/search/save-to-list runs the search server-side, saves up to limit matches and finds their work emails in the same job.filters from step 1 rather than the sentence again, so the save runs exactly the search you previewed. listName creates the list, or reuses an existing list with that name. Keep listIds[0] and jobId: every later step works on the list, and the job tells you when it is full.The save runs its own search and does not reuse your preview, so there is no need to page through results first. Saving a hand-picked subset is not supported; narrow the filters instead.
4
Wait for the enrichment job
Poll the job named by the save’s
jobId until its status is completed. Every 30 seconds is plenty.status is pending while another of your enrichment jobs runs, because your jobs run one at a time. Do not wait on the list’s completionStatus here: a new list reads complete until its job starts. A stopped job paused because the balance ran out; top up, then resume it from the list’s page in the app.Once the job is completed, metrics.totalWithProfessionalEmail on GET /business/lists/{listId} is how many contacts the campaign can email.5
Choose what grounds the copy
Three reads decide what the AI writes from and who it sends as. None of them cost credits.
- Knowledge hub: your team shares one hub, and a campaign that leaves
knowledgeHubIdout is grounded on it.knowledgeHubIdaccepts only a hub you own, so leave it out unless you mean to pick one of yours. - Writing style:
writingStyleslists your default style first. Itsidis thewritingStyleId. - Mailbox: make sure at least one account is listed and its
needsReauthAtisnull.
6
Create the AI campaign
channels creates one sequence step per entry. userPrompt says what the campaign should achieve and how it should sound, and excludeContacted skips anyone your campaigns reached in the last three months. The full list of options is in Campaigns.An AI campaign cannot be approved without a ctaLink. Leave it out and Fuse reuses the link from your most recent campaign, if there is one.7
Wait for the AI to plan the sequence
AI campaigns plan their topics in the background. Poll until
initializationStatus is completed:status stays initializing until you approve. If initializationStatus is failed, initializationError says why.8
Preview what each step will say
List the steps, then render each one for a sample contact. Previews are never saved or sent.To change direction,
PATCH /business/campaigns/{campaignId}/steps/{stepId} with a new topic, or rebuild every topic with POST /business/campaigns/{campaignId}/steps/regenerate-topics. Previews have their own limit of 20 requests a minute.9
Approve the campaign
Approval is the only call in this workflow that sends email.Sending starts at
campaignStartDate (now, by default) and runs between 09:00 and 17:00 in the campaign’s timezone on its emailDays.Track results and reuse the setup
GET /business/campaigns/{campaignId}/stats returns sent, opened, clicked and replied counts, and GET /business/campaigns/{campaignId}/leads shows each lead’s progress with hasReplied and hasClicked. Clicks and replies are the reliable signals: some email clients load tracking pixels automatically, which inflates opens.
When a campaign works, save its sequence and schedule as a template and point it at the next segment:
template.id as templateId when you create the next campaign.
What it costs
See Credits & billing for every operation.
Troubleshooting
Run the whole workflow
Python script: prompt to approved campaign
Python script: prompt to approved campaign
Do it from Claude
With the Fuse MCP server connected, one request covers the same ground:Find heads of finance at UK fintech companies with 50 to 500 employees, save 200 of them with work emails to a list called “UK fintech finance leaders”, and draft a three-email AI campaign on that list grounded in our knowledge hub. Don’t launch it yet.The assistant searches, saves the people with their work emails to the list, then creates the campaign and writes its sequence. Creating a campaign never launches it, so it stays a draft until you ask.
Related
Build a list from search
Filter vocabularies, saved searches and every way to express a prospect search.
Campaigns
Every campaign option, manual steps, merge tokens and approval errors.
Knowledge hubs
Build the product knowledge AI campaigns write from.
Qualify leads before enriching
Spend enrichment credits only on the prospects that fit your ICP.