Skip to content

Workflow Review

Human-in-the-loop review — list, approve, reject, edit, and retry pending workflow actions.

Full name: campaignstack_list_pending_reviews

workflows:read Read-only Idempotent

List pending workflow review actions requiring human approval. Returns entries with lead details (including leadLinkedInUrl), crafted content, aiReasoning, aiSources (which provided context the draft drew on, e.g. post, signal, experience, web; null for older drafts), conversationHistory (the prior thread with the lead, sender self/lead, null for cold opens), campaign/workflow context, and a reviewContext discriminated union: type “post_comment” includes commentText, postContent, postUrl, postAuthorName, postUnavailable (true when the post was deleted on LinkedIn) (when triggered by a post comment signal); type “campaign” for regular campaign workflow reviews; null when context cannot be determined. bookedMeeting (non-null when the calendar booking chain already booked a meeting from a link the lead sent) means the draft under review is that meeting’s confirmation: the booking is done, rejecting the draft stops the message but never cancels the meeting. reviewTags marks priority items (e.g. meeting_booked); tagged entries are pinned at the top of the first page ahead of the FIFO queue - review them first. Call this when the user asks what is waiting for approval; for entries already decided, use campaignstack_get_lead_history instead. Use campaignstack_approve_review, campaignstack_reject_review, or campaignstack_edit_and_approve_review to act on entries. Results are one page. When pagination reports more, say so rather than presenting the page as the whole set, and page through before counting anything.

NameTypeRequiredDefaultDescription
workspaceIdstringYesWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. (min length: 1)
limitintegerNo20(min: 1, max: 100)
cursorstringNo
accountIdstringNoScope to drafts sent by one identity (linkedinAccounts id, from campaignstack_list_accounts). A filtered page may hold fewer than limit items; keep paging by cursor. (min length: 1)

Full name: campaignstack_count_pending_reviews

workflows:read Read-only Idempotent

How many drafted touches are waiting for a person to approve them in this workspace. Call this when the user asks whether anything needs their attention, or as a cheap check before campaignstack_list_pending_reviews, which returns the drafts themselves. A count of zero means nothing is queued for review, not that nothing is running.

NameTypeRequiredDefaultDescription
workspaceIdstringYesWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. (min length: 1)

Full name: campaignstack_approve_review

workflows:write Destructive

Approve a pending review entry as-is, no wording change. For a draft parked at a review node, the lead advances via the ‘approved’ edge. For an escalated entry parked at the acting node (critic-flagged auto-send, agent escalation), approval RESUMES the withheld action, re-dispatched or released through the delivery exit. Call this only after the user has read the draft and says to send it unchanged; for different wording, use campaignstack_edit_and_approve_review instead. Use campaignstack_list_pending_reviews to find entry IDs.

NameTypeRequiredDefaultDescription
entryIdstringYes(min length: 1)
workspaceIdstringYesWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. (min length: 1)

Full name: campaignstack_reject_review

workflows:write

Reject a drafted touch so it is never sent. The lead takes the workflow’s rejected path instead, which usually ends their journey, and the draft is kept for the record. Call this when the user has read the draft and says no to it. To keep the lead moving with different wording, use campaignstack_edit_and_approve_review or campaignstack_retry_review instead: rejecting is the decision not to contact this person here.

NameTypeRequiredDefaultDescription
entryIdstringYes(min length: 1)
workspaceIdstringYesWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. (min length: 1)

Full name: campaignstack_edit_and_approve_review

workflows:write Destructive

Edit the AI-generated content and approve the review entry in one call. The original content is preserved for audit trail. Draft parked at a review node: the lead advances via the ‘approved’ edge. Escalated entry parked at the acting node: the withheld action resumes with your edited text. Call this to send a changed version of a pending draft; unchanged wording is campaignstack_approve_review, no send at all is campaignstack_reject_review.

NameTypeRequiredDefaultDescription
entryIdstringYes(min length: 1)
workspaceIdstringYesWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. (min length: 1)
updatedContentobjectYes

Full name: campaignstack_retry_review

workflows:write

Ask CampaignStack to write the draft again from scratch. The entry goes back to processing and returns to the review queue with new wording a moment later, so read it again before approving. Call this when the user dislikes a draft but still wants to contact the person. It costs a fresh generation each time, and it does not re-read any link in the thread: campaignstack_reread_review_link does that.

NameTypeRequiredDefaultDescription
entryIdstringYes(min length: 1)
workspaceIdstringYesWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. (min length: 1)