List a campaign's columns
The columns of a campaign's lead table: each one's name, whether AI fills it, whether it can be edited by hand, and whether it is a contact field whose edits come with format warnings. Use the names with campaigns.leads.bulkSetField and in lead filters.
/campaigns.listColumnsAuthorization
bearerAuth Enter your MailMoo API key (format: sk_live_...)
In: header
Query Parameters
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/campaigns.listColumns?campaignId=497f6eca-6276-4993-bfeb-53cbbbba6f08&input=%7B%22campaignId%22%3A%2213f8bf6d-dc27-4a04-bffe-6e5b13c19ddf%22%7D"{ "columns": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "aiColumn": true, "editable": true, "contactField": true } ]}Change a campaign's senders POST
Adds senders to an existing campaign, removes some, or both in one call. Use the sender ids from campaigns.listSenders. Removing a sender unassigns the leads they held so the remaining senders pick them up, except leads already in conversation with that sender: they wait until moved to another sender with campaigns.leads.bulkChangeSender. A campaign always keeps at least one sender. Allowed while the campaign is running, and an added sender starts at once. A sender already on the campaign (to add) or not on it (to remove) is reported and ignored. Pass dryRun to see who would be added and removed and how many leads are affected, without changing anything.
Add a step to a campaign's sequence POST
Adds one step to a paused campaign's sequence: a message, connection request, connection request with a note, InMail, email, wait, or profile visit. A message can be sent as a voice note: an AI voice note speaks the content in a cloned voice, a pre-recorded one sends a recording from the library (see voiceNote). Inserted after afterStepId; without it the step is appended to an unbranched sequence. When afterStepId is a condition, branch says which of its paths the step starts. The step is checked before it is saved: merge fields must match the campaign's columns, every sender must be able to perform it (InMail needs Premium), and connection notes must fit the senders' length limit. Returns the sequence and what would still stop it from starting.

