Skip to content

Inbox & Email

Read and act on LinkedIn conversations, refresh the inbox, and send email from connected Google accounts.

Full name: campaignstack_get_conversations

inbox:read Read-only

Read inbox conversation summaries, unread count, or full threads when include.messages is true. Always returns a stable items/pagination envelope. A conversation with hasSuspiciousInbound true holds a message that offers something of value and asks the reader to act on it (the shape of a fake recruiter or investor): say so to the person before you book, open a link or reply on their behalf. include.scheduledMessages lists this thread’s pending campaignstack_send_message sendAt rows. A workflow draft that has not gone out has delivered false and deliveredAt null; its nextSendAt is when it will send (null while it waits for a review).

NameTypeRequiredDefaultDescription
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.
idsobject[]No—
unreadOnlybooleanNo—
identityFilterstring[]No—
searchstringNo—(min length: 2, max length: 200)
includeobjectNo{}
include.messagesbooleanNofalse
include.scheduledMessagesbooleanNofalse
limitintegerNo20(min: 1, max: 50)
cursorstringNo—

Full name: campaignstack_refresh_inbox

inbox:write Acts outside CampaignStack Needs confirmation

Ask CampaignStack to poll its connected LinkedIn accounts for new messages now. Call this when the user wants the inbox brought up to date before you read it. Respects a 20-second freshness dedup window per account. Returns { refreshed, skipped, errors }. It does not fetch one thread’s older history: use campaignstack_get_conversations with ids and include.messages for that.

NameTypeRequiredDefaultDescription
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.

Full name: campaignstack_edit_conversations

inbox:write

Batch small inbox state changes: mark conversations read, or cancel/edit a pending campaignstack_send_message sendAt row (scheduledMessages, id from campaignstack_get_conversations include.scheduledMessages). Sending remains campaignstack_send_message.

NameTypeRequiredDefaultDescription
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.
conversationsobject[]No—
scheduledMessagesoperation[]No—One or more operations, see below.

scheduledMessages variants (scheduledMessages[].op)

Section titled “scheduledMessages variants (scheduledMessages[].op)”
NameTypeRequiredDefaultDescription
idstringYes—(min length: 1)
NameTypeRequiredDefaultDescription
idstringYes—(min length: 1)
textstringNo—(min length: 1)
sendAtstringNo—

Full name: campaignstack_send_email

google_integrations:write Destructive Acts outside CampaignStack Needs confirmation

Send one provider-aware email. Gmail is the first provider. Requires confirm=true after reading back recipient and wording. This reaches a real person. Before calling it, tell the user exactly who it goes to and read the wording back to them, and wait for an explicit yes. It goes out as soon as this call succeeds: there is no draft state and nothing to recall. One person per call. There is no bulk form, and calling this in a loop over a list is not the supported way to reach a list: add the leads with campaignstack_edit_lead_list and run a workflow over it with campaignstack_trigger_workflow, which paces the sends and applies the review step the workspace configured.

NameTypeRequiredDefaultDescription
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.
providerstringNo"gmail"
googleAccountIdstringNo—
tostringYes—
subjectstringYes—(min length: 1)
bodystringYes—(min length: 1)
htmlBodystringNo—
attachmentsobject[]No—
confirmbooleanYes—Required confirmation that the email wording and recipient are approved.

Full name: campaignstack_send_message

inbox:write Acts outside CampaignStack Needs confirmation

Ask CampaignStack to send one message into a LinkedIn conversation the owner’s connected account is already part of, optionally with attachments given as public URLs. Takes a conversationRef { platform, id } from campaignstack_get_conversations. Read the thread with campaignstack_get_conversations using ids and include.messages first. If the last message is the owner’s and the other person has not answered since, do not send: say so, and send only if the user confirms they want to follow up again. This reaches a real person. Before calling it, tell the user exactly who it goes to and read the wording back to them, and wait for an explicit yes. The send is dispatched asynchronously and the response carries a messageEntityUrn; campaignstack_get_conversations reports delivery. Pass sendAt to hold the message and send it later instead of now; it is cancelled if the other person replies first, so read the wording and the time back and wait for a yes. campaignstack_get_conversations with include.scheduledMessages lists pending ones; campaignstack_edit_conversations cancels or edits one. One person per call. There is no bulk form, and calling this in a loop over a list is not the supported way to reach a list: add the leads with campaignstack_edit_lead_list and run a workflow over it with campaignstack_trigger_workflow, which paces the sends and applies the review step the workspace configured. Sending is paced by CampaignStack’s own daily and weekly limits and business hours, which are set by a human in the app and are not writable from here; see overrideOwnLimits before asking for an exception.

NameTypeRequiredDefaultDescription
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.
conversationRefobjectYes—
conversationRef.platformlinkedinYes—
conversationRef.idstringYes—(min length: 1)
textstringYes—(min length: 1)
attachmentsobject[]No—Up to 5 files to attach (images or documents). Downloaded server-side and validated against the LinkedIn attachment policy.
sendAtstringNo—ISO 8601 with a UTC offset. Omit to send now. With it, the message is held and sent at that time instead (1 minute to 180 days out) - cancelled automatically if the other person replies first. Read the wording and the time back to the user and wait for a yes before calling this with sendAt set.
overrideOwnLimitsbooleanNo—Tells CampaignStack to skip its OWN protective pacing for this one call: the daily budget, the weekly cap, the business-hours window, the account status check and the risk pause. These are limits CampaignStack sets to keep the account healthy. They are not LinkedIn’s controls, and nothing here touches, negotiates with or works around anything LinkedIn enforces. LinkedIn’s own measured ceiling is a separate check that is never overridable, and neither is a pause the account’s owner set. Default false, and it should stay false. Setting it true voids the safety guarantee: from that call on, CampaignStack can no longer promise the pacing that keeps the account out of trouble, and the risk of a restriction sits with the owner. Every use is recorded in the workspace audit log. Ask the owner in plain words and get an explicit yes first. A refusal from the safety system is that system working, not a fault to route around: report the reason and let the person decide, and never retry the same send with this set.
dangerouslyBypassSafetySystembooleanNo—Deprecated name for overrideOwnLimits. Use overrideOwnLimits.