origami_campaign_create
Ask Origami's agent to DRAFT a campaign on a table (WRITE — creates the campaign and its per-person sequences; sends NOTHING — launching is a separate, explicit tool).
The call is agentic: instructions (1–10 000 chars: audience, channels,
tone, offer, follow-ups…) is handed to the Origami agent, which answers
202 {agent: {id}, run: {id}, table}. Poll origami_run_get(agent_id, run_id) until status != "running"; the drafted campaign then appears in
origami_campaigns(op="list_for_table", table_id=…). Review it (get,
people) BEFORE origami_campaign_launch.
⚠️ These two settings govern a campaign this call CREATES — not one the
agent enrols into. If your brief makes the Origami agent add people to a
campaign that already exists, that campaign's own settings apply and yours
have NO effect, even though they are echoed back to you. Nothing in this
connector updates an existing campaign's settings: read what actually
governs with origami_campaigns(op="get") → settings, and if it is wrong
the change is a human action in Origami.
⚠️ Check the result, do not trust the run's prose. The agent answers in
words; those words are not a measurement. A run can end completed having
done NOTHING, with prose that names a campaign and a slug that were never
created (measured 2026-09-09: three times in a row on one table) — or
report people added while its action list is empty. origami_run_get
REFUSES such a run (error aucune_action, nothing reachable was created:
verify the table with origami_campaigns(op="list_for_table"), then
relaunch ONCE — such a run may still leave a draft shell visible only in the
Origami interface, invisible to every verb here, and each relaunch adds
one; tell the human to check the campaign list in Origami). The
state that settles it is the campaign itself: if found rises while
contacted does not, the new sequences have no recipient and nothing will
ever send to them.
Settings — REQUESTED, not guaranteed: Origami has been measured ignoring
them on a campaign this call created (2026-09-13, reproduced). Always read
what governs with origami_campaigns(op="get") → settings once the run
is done; stating the setting in words in instructions as well has made it
stick in practice. If it is still wrong, the fix is a human toggle in
Origami:
block_prior_contacts=True(default): auto-cancels every person who was EVER enrolled in a previous campaign — INCLUDING people who sat in a deleted, never-sent draft. Pass False ONLY when the prior enrolments were drafts that never actually sent to anyone; keep True to protect real past recipients from a second cold approach.block_active_duplicates=True(default): auto-cancels people who are currently active in another campaign.
dry_run=True validates and returns {dry_run: true, would_create: {...}}
without calling Origami. Errors: 402 INSUFFICIENT_CREDITS, 409 AGENT_BUSY
(an agent run is already going on that table — poll it), 429
CONCURRENT_LIMIT_EXCEEDED (plan cap on concurrent agent runs).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"table_id": "<table_id>",
"instructions": "<instructions>"
},
"name": "origami_campaign_create"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| _org | No | Org (id) de CET APPEL. `oto_list_orgs()`. | |
| _group | No | Équipe (id) de CET APPEL, sous son org parente. | |
| _run_id | No | OBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas. | |
| dry_run | No | preview only. | |
| _project | No | Projet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`. | |
| table_id | Yes | the table the campaign sends from. | |
| _instance | No | Instance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`. | |
| instructions | Yes | the brief for the Origami agent. | |
| block_prior_contacts | No | suppress anyone previously enrolled (even in deleted unsent drafts). Default True. | |
| block_active_duplicates | No | suppress people active in another campaign. Default True. |