REST API | eesier

REST API

View as Markdown

The eesier REST API is a JSON API at https://mcp.eesier.com that exposes the same 226 tools as the MCP server. Every route takes a bearer token and returns JSON.

Base URL
https://mcp.eesier.com/rest/v1
Authentication
Authorization: Bearer <token>
Content type
application/json
Get a token
eesier console → Account → External Agents (MCP) → Generate Token. The same token works for MCP; revoking it kills both.

First call

curl https://mcp.eesier.com/rest/v1/call/whoami \
  -H "Authorization: Bearer $EESIER_TOKEN"

calling a tool

Invoke a tool

curl -X POST https://mcp.eesier.com/rest/v1/tools/search_leads \
  -H "Authorization: Bearer $EESIER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status": "Interested", "page_size": 5}'

Everything else is a POST with a JSON object of named parameters.

Discover every tool

curl https://mcp.eesier.com/rest/v1/tools \
  -H "Authorization: Bearer $EESIER_TOKEN"

The machine-readable version of this page, straight from the running server.

A tool with no parameters takes no body at all — an absent body, {} and null all mean "no arguments".

the endpoints

Four routes. Everything else is a tool name.

POST /rest/v1/tools/{tool_name} Invoke a tool. The body is a JSON object of named parameters.
GET /rest/v1/call/{tool_name} Invoke a read-only tool from the query string. Any other tool returns 405.
GET /rest/v1/tools The full catalog: { version, server_version, tool_count, tools[] }.
GET /rest/v1/tools/{tool_name} One tool's schema — the same object the catalog lists.

responses

The status says what happened

A call that worked answers 200 with the tool's own JSON. A call that failed answers a real 4xx or 5xx — and the body is still the tool's own JSON, so you get the machine-readable reason and a status your HTTP client can branch on without parsing anything.

Everything else is transport-level

Status When you get it
200 The tool ran and succeeded. Its JSON is the body.
400 The request never reached the tool: malformed JSON, a non-object body, an unknown parameter, a missing required one, or a value that cannot be coerced.
401 Missing, malformed, expired or revoked token.
403 The tool exists but your plan does not include it. The body says what to activate.
404 No tool by that name — the body suggests the nearest one — or the tool ran and the lead, campaign or website you asked for does not exist.
405 Wrong verb — most often a GET invoke on a tool that is not read-only.
422 The tool ran and refused the request on its own terms. The body says why.
500 The tool threw and the failure is permanent for these arguments. Do not retry the identical call.
503 The tool threw a transient platform or upstream error. Retry the same call in a few seconds.

Refusal bodies

Every 4xx and 5xx carries the same three fields, so one client codepath handles them all:

{
  "error": "unknown parameter 'lead_ids' for tool 'get_lead'",
  "type": "UnknownParameter",
  "detail": "accepted parameters: lead_id"
}

A missing or bad token returns 401 with a body that tells you what to do:

{
  "error": "...",
  "how_to_fix": "...",
  "documentation": "https://mcp.eesier.com/SKILL.md"
}
type Meaning
UnknownTool That tool name does not exist. Check the suggestion in detail.
UnknownParameter You sent a parameter the tool does not accept — a typo is refused, never ignored.
MissingParameter A required parameter was absent.
ParameterTypeMismatch The value cannot be coerced to the parameter's type.
InvalidRequestBody The body parsed, but it is not a JSON object of named parameters.
NotReadOnly You tried to GET-invoke a tool that writes. Use POST.
JsonException The body is not valid JSON at all.

how values are read

Anything lossy is refused, never guessed.

string

Text is taken verbatim. A JSON number or boolean arrives as its literal. Objects and arrays are refused — no parameter takes one.

integer

A JSON number or its textual form. A fractional value like 3.7, or one out of range, is refused — never truncated, never wrapped.

number

The decimal separator is '.', never ','. "1,5" fails loudly with a detail saying so, instead of silently becoming 15.

boolean

Accepts true/false, "true"/"false", 1/0 and "1"/"0". "yes" is refused.

Unknown parameters are rejected

Stricter than MCP on purpose: a silently-dropped typo would return a successful call with wrong-looking results. The 400 lists every accepted name.

null and omission differ

Omit a parameter and the tool's own default applies. Explicit null is accepted only by a nullable parameter. A query string cannot express null — use POST when you need it.

Tool names are case-sensitive

Dispatch is name-exact, matching MCP. get_lead works; GET_LEAD returns 404 with the right name in detail.

Dates are UTC ISO 8601

Every timestamp comes back as 2026-01-31T14:05:00Z. Filters accept ISO dates. Call whoami for the account's timezone offset.

Lists page explicitly

page starts at 0 and page_size defaults to 20, capped at 100. The total comes back alongside the rows.

every endpoint

Open one for its HTTP calls and parameters.

Session

Identify the connected account and read its pending notifications. whoami is the first call of every session — it returns the profile, the plan and the account timezone.

4 endpoints
acknowledge_notification write Acknowledge a notification you have already surfaced to the user — it stops appearing in list_pending_notifications for you. This is an agent-side bookmark only: the platform's own delivery of the notification to the user is unaffected.

Call it

POST /rest/v1/tools/acknowledge_notification

Parameters

notification_id integer required Notification ID (from list_pending_notifications)
list_notification_history read List the customer's past and pending system notifications (newest first, paginated) — including ones already processed by the platform or already acknowledged. Use list_pending_notifications for just the new, unseen ones.

Call it

POST /rest/v1/tools/list_notification_history GET /rest/v1/call/list_notification_history

Parameters

page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 20 Notifications per page (default 20, max 100)
list_pending_notifications read List all pending (unprocessed) system notifications queued for the customer. These are heads-up messages the platform wants the user to see — platform updates or action confirmations that haven't been surfaced yet. Surface them to the user; you cannot mark them as processed — they remain in the queue until the platform clears them internally. Sorted by oldest first. After surfacing one, call acknowledge_notification so it stops reappearing here; for past notifications use list_notification_history.

Call it

POST /rest/v1/tools/list_pending_notifications GET /rest/v1/call/list_pending_notifications

Parameters

This endpoint takes no parameters — POST it with no body.

whoami read Returns the authenticated customer's profile information including name, phone, email, language, timezone offset from UTC (in hours, may be null if not set), subscription plan, and prospecting eligibility.

Call it

POST /rest/v1/tools/whoami GET /rest/v1/call/whoami

Parameters

This endpoint takes no parameters — POST it with no body.

Leads

Search, read, register and update leads. Take a lead over from the agent, hand it back, stop it, or list everything waiting on a human right now.

10 endpoints
get_lead read Get a lead's full profile including contact info, company data, prospecting status, and conversation history. Email thread bodies are included inline (latest 50 per direction); WhatsApp and voice activity appear as counts — use get_lead_conversation for the full merged cross-channel timeline.

Call it

POST /rest/v1/tools/get_lead GET /rest/v1/call/get_lead

Parameters

lead_id integer required Lead ID
list_lead_emails read List the emails exchanged with a specific lead (outbound and inbound), oldest first. Paginated — outbound_total/inbound_total report the full thread size. Set include_bodies=false for a lightweight metadata-only view (dates, subjects, attachment names).

Call it

POST /rest/v1/tools/list_lead_emails GET /rest/v1/call/list_lead_emails

Parameters

lead_id integer required Lead ID
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 20 Emails per direction per page (default 20, max 100)
include_bodies boolean optional default true Include full email bodies (default true); false returns metadata only
list_pending_review read List leads that have been flagged for human review by the prospecting agent.

Call it

POST /rest/v1/tools/list_pending_review GET /rest/v1/call/list_pending_review

Parameters

This endpoint takes no parameters — POST it with no body.

register_lead write Manually register a new lead so Blue Button can prospect it. A valid email is required for the lead to actually be contacted (phone alone only enables WhatsApp/voice). Deduplicates: if a lead with the same email or phone already exists, returns that lead's id instead of creating a duplicate. To bring in many leads at once use import_leads; for a lead referred by another lead use register_referral_lead.

Call it

POST /rest/v1/tools/register_lead

Parameters

name string required Contact name
email string optional Email address
phone string optional Phone number
company string optional Company name
status string optional Initial status: Cold (default) or Confirmed
campaign string optional Campaign name or numeric campaign_id to assign lead to
return_lead_to_pipeline write Return a lead to the autonomous prospecting pipeline with optional instructions for the next touch.

Call it

POST /rest/v1/tools/return_lead_to_pipeline

Parameters

lead_id integer required Lead ID
instructions string optional Instructions for the agent's next touch
next_touch_date string optional When to make the next touch (ISO date, default: now)
search_leads read Search leads by query, status, campaign, date range, or last prospecting message date. Supports sorting by date_created (default), last_prospecting_message, or status. Returns paginated results. Each result includes last_outbound_at (date of last outbound message sent to this lead) and last_inbound_at (date of last reply from this lead) so you can triage activity without opening the thread.

Call it

POST /rest/v1/tools/search_leads GET /rest/v1/call/search_leads

Parameters

query string optional Search query (matches name, company name, email)
status string optional Filter by status: Pending, Cold, Confirmed, Aware, NotInterested, Interested, Frozen, Closed, Unqualified, Rejected, Gatekeeper
campaign string optional Filter by campaign name or numeric campaign_id
created_after string optional Only leads created on or after this date (ISO format, e.g. 2026-01-01)
created_before string optional Only leads created on or before this date (ISO format, e.g. 2026-03-31)
last_prospecting_message_after string optional Only leads that received a prospecting message on or after this date (ISO format)
sort_by string optional Sort order: date_created (default, newest first), last_prospecting_message (most recent activity first), status (by status then date). Unrecognized values default to date_created.
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 20 Page size (default 20, max 100)
has_linkedin boolean optional Filter by LinkedIn presence: true returns only leads that have a LinkedIn profile URL, false only leads without one. Omit for all leads.
send_message_to_lead write Send a direct email to a lead from the customer's Blue Button address. SIDE-EFFECT: this takes the lead over (removes it from the autonomous pipeline, same as take_over_lead) — the customer owns the conversation from then on. The email is queued for delivery, not sent instantly. If the customer only wants to steer the approach without taking over, use return_lead_to_pipeline with instructions instead. For WhatsApp use send_whatsapp_message_to_lead.

Call it

POST /rest/v1/tools/send_message_to_lead

Parameters

lead_id integer required Lead ID
subject string required Email subject
body string required Email body
stop_lead destructive Stop prospecting a lead — Blue Button finishes the lead and sends nothing further. Reversible: recover_lead_to_pipeline puts it back in the pipeline with re-engagement framing. Contrast: take_over_lead means the customer will personally handle the lead; stop_lead means nobody will. To record WHY (won/lost/gave up, deal value) use register_lead_outcome instead — it stops prospecting AND keeps the outcome history.

Call it

POST /rest/v1/tools/stop_lead

Parameters

lead_id integer required Lead ID
reason string optional Reason for stopping
take_over_lead write Take over a lead — marks it as user-controlled, removing it from the autonomous prospecting pipeline (Blue Button stops contacting it; the customer handles it through their own channels). To hand the lead back to Blue Button later, use recover_lead_to_pipeline (gentle re-engagement). Contrast: stop_lead ends prospecting without implying the customer will handle it; send_message_to_lead also takes over as a side-effect; return_lead_to_pipeline is the post-human-review resume.

Call it

POST /rest/v1/tools/take_over_lead

Parameters

lead_id integer required Lead ID
update_lead write Update a lead's status, goal, or background. Pass only the fields you want to change. Note: setting a status here does NOT stop or pause prospecting — to remove the lead from the pipeline use stop_lead (finish permanently) or take_over_lead (customer handles it personally).

Call it

POST /rest/v1/tools/update_lead

Parameters

lead_id integer required Lead ID
status string optional New status: Pending, Cold, Confirmed, Aware, NotInterested, Interested, Frozen, Closed, Unqualified, Rejected, Gatekeeper
goal string optional Lead-specific outreach goal
background string optional Background context about this lead

Lead operations

Act on a lead: send a WhatsApp message, import a list, reschedule the next touch, register a referral, or generate a presentation for one specific lead.

5 endpoints
create_lead_presentation write Generate a personalized strategic presentation (PDF) for a specific lead, based on the customer's business and the lead's context. Runs synchronously and can take a minute. Returns the PDF URL. If the lead already has a presentation, returns the existing one. Respects the customer/campaign 'generate custom presentations' toggle.

Call it

POST /rest/v1/tools/create_lead_presentation

Parameters

lead_id integer required Lead ID
import_leads write Import many leads at once. Provide EITHER an existing customer_file_id (an uploaded CSV/Excel/TXT file) OR inline rows (rows_json: a JSON array of objects with name, email, phone, company — email or phone required per row). The import is queued and processed in the background (deduped against existing leads); new leads enter prospecting automatically. For a single lead use register_lead.

Call it

POST /rest/v1/tools/import_leads

Parameters

customer_file_id integer optional Id of an already-uploaded customer file (.csv, .xlsx, .xls, .txt) to import from
rows_json string optional Inline leads as a JSON array, e.g. [{"name":"Ana","email":"[email protected]","phone":"+5511999999999","company":"Acme"}]. Max 500 rows per call.
instructions string optional Special instructions for extraction (column mappings, filters)
status string optional Initial status for imported leads (e.g. Cold, Confirmed)
preferred_channel string optional First-contact channel: Email or WhatsApp (applied per lead only when it has that contact info)
first_message_instructions string optional Instructions for the first prospecting message to imported leads
prospecting_background string optional Background about the imported leads (e.g. 'Leads from TechConf 2026 workshop on AI')
prospecting_goal string optional Outreach goal for the imported leads, overriding the customer-level goal
campaign string optional Campaign name or numeric campaign_id to assign the imported leads to
register_referral_lead write Register a NEW lead that an existing lead referred ('talk to X'). Goes through the shared referral pipeline: dedupe, email verification, company-data copy when same_company, enrichment, and automatic entry into prospecting. Needs at least an email or a phone for the referred person. Requires an active paid plan.

Call it

POST /rest/v1/tools/register_referral_lead

Parameters

referring_lead_id integer required ID of the existing lead who made the referral
lead_name string required Name of the referred person
lead_email string optional Email of the referred person
lead_phone string optional Phone of the referred person
same_company boolean optional default false True when the referred person works at the SAME company as the referring lead (company data is copied over)
status string optional Initial status (e.g. Cold, Confirmed)
instructions_for_first_touch string optional Instructions for the first touch to the referred lead
reschedule_lead_touch write Update the next prospecting touch date and/or preferred channel for one or more actively-prospected leads, selected by explicit lead IDs and/or by the file they were imported from. Setting next_touch_date to now makes each lead be contacted as soon as possible. Leads the prospecting queue would not pick up (never started, finished, pending review, taken over, rejected, or frozen without a newer reply) are skipped and reported.

Call it

POST /rest/v1/tools/reschedule_lead_touch

Parameters

lead_ids string optional Comma-separated lead IDs to update (optional if imported_from_file_id is provided)
imported_from_file_id integer optional Update every actively-prospected lead imported from this customer file id
next_touch_date string optional New next-touch date/time in UTC (ISO format). Pass the current UTC time to contact ASAP. Omit to keep each lead's schedule.
preferred_channel string optional New preferred first-contact channel: Email or WhatsApp (applied only where the lead is reachable on that channel)
send_whatsapp_message_to_lead write Send a direct WhatsApp message to a lead on the customer's prospecting number. Behavior mirrors the in-app agent: if the lead is NOT taken over, the message is parked as next-touch instructions and delivered on the lead's next natural prospecting touch (the lead is NOT taken over). If the lead IS taken over and its 24h WhatsApp service window is open (the lead messaged within the last 24h), the message is sent now, verbatim; if the window is closed, the send is refused (WhatsApp policy) — use email via send_message_to_lead instead. Requires a live WhatsApp prospecting line (register_whatsapp_line).

Call it

POST /rest/v1/tools/send_whatsapp_message_to_lead

Parameters

lead_id integer required Lead ID
message string required The message to deliver, written exactly as it should reach the lead
attachment_url string optional Optional absolute https URL of a file to send as a WhatsApp media message after the text

Outcomes

Close the loop: record what happened with a lead, answer a question it asked, recover it into the pipeline, or read its lifecycle history.

5 endpoints
answer_lead_question write Save the customer's answer to a question a lead previously asked that the platform couldn't answer (price, delivery area, specs, process...). Queues tracked replies to eligible waiting leads. Reuse as business knowledge requires explicit owner approval via reusable=true; otherwise the answer is only for the waiting leads. Pass open_question_id when known; otherwise pass question_text.

Call it

POST /rest/v1/tools/answer_lead_question

Parameters

answer_text string required The customer's answer, in their own words
open_question_id integer optional ID of the open question being answered, when known
question_text string optional The question text — required when no open_question_id is provided
reusable boolean optional default false True only with explicit owner approval to reuse this fact for future leads
expected_answer_id integer optional Current answer ID when correcting an answer
valid_until string (ISO 8601) optional UTC expiry, when applicable
request_id string optional Stable UUID reused on retry
list_lead_lifecycle_events read List the lifecycle/outcome history of a specific lead (outcome recorded, recovered, check-ins muted, questions answered, meeting outcomes...), newest first. The append-only audit trail behind register_lead_outcome and its siblings.

Call it

POST /rest/v1/tools/list_lead_lifecycle_events GET /rest/v1/call/list_lead_lifecycle_events

Parameters

lead_id integer required Lead ID
limit integer optional default 50 Max events to return (default 50, max 200)
mute_lead_check_ins write Mute or snooze outcome reminders for a lead. For remind-me-later requests, set snooze_days; use 7 if no duration was given. Omit snooze_days to stop reminders. Does not change the outcome or pipeline state.

Call it

POST /rest/v1/tools/mute_lead_check_ins

Parameters

lead_id integer required Lead ID
reason string optional Why the customer wants to stop hearing about this lead, in their own words
snooze_days integer optional Days to snooze instead of muting permanently (1-365); use 7 for remind me later without a duration
recover_lead_to_pipeline write Bring a lead the customer had taken over (or given up on) BACK into the autonomous prospecting pipeline with gentle re-engagement framing (the lead already knows the business). Use this — NOT return_lead_to_pipeline — when the customer PERSONALLY took over or stopped pursuing the lead and now wants Blue Button to resume it. Refuses unsubscribed leads and leads with a recorded won/lost outcome. The first re-engagement touch happens after a short delay.

Call it

POST /rest/v1/tools/recover_lead_to_pipeline

Parameters

lead_id integer required Lead ID
owner_context string optional Context the customer gave for the recovery, in their words (e.g. 'he asked to talk after the holidays')
register_lead_outcome write Record the FINAL outcome of a lead as reported by the customer: 'won' (closed the sale), 'lost' (competitor, gave up, no budget), or 'gave_up' (the customer will no longer pursue this lead). Use for ANY update on how a lead's story ended — including casual positive announcements ('fechei com o X'). Also stops prospecting for the lead. Only pass reason/deal_value_brl when the customer volunteered them — NEVER ask for a deal value. Contrast: stop_lead ends prospecting without recording why; this keeps the outcome history.

Call it

POST /rest/v1/tools/register_lead_outcome

Parameters

lead_id integer required Lead ID
outcome string required The outcome: 'won', 'lost', or 'gave_up'
reason string optional The customer's own words about why/how it ended — only when volunteered
deal_value_brl number optional Deal value in BRL — ONLY when the customer explicitly mentioned an amount

Meetings

List the meetings booked with leads, confirm or cancel them, and record who actually showed up.

4 endpoints
cancel_lead_meeting destructive Cancel a meeting on the customer's side and send the lead back into the prospecting pipeline so the executor communicates the cancellation on the next touch.

Call it

POST /rest/v1/tools/cancel_lead_meeting

Parameters

meeting_id integer required Id of the meeting to cancel
next_touch_date string required When the executor should re-engage the lead about the cancellation (ISO 8601 UTC, usually within a few hours)
reason string optional Optional cancellation reason — appended to the meeting notes and included in the next-touch instructions
additional_instructions string optional Optional extra next-touch instructions for the executor, written in the customer's language
confirm_lead_meeting write Confirm a meeting on the customer's side (call when the customer accepts a meeting the lead proposed). Stamps the customer's acceptance.

Call it

POST /rest/v1/tools/confirm_lead_meeting

Parameters

meeting_id integer required Id of the meeting the customer is confirming
list_lead_meetings read List meetings between the customer and their leads. Optionally filter by a specific lead, include cancelled meetings, or include past meetings.

Call it

POST /rest/v1/tools/list_lead_meetings GET /rest/v1/call/list_lead_meetings

Parameters

lead_id integer optional Optional lead id to filter by
include_cancelled boolean optional default false Include cancelled meetings (default false)
include_past boolean optional default true Include past meetings from the last 30 days (default true). Set false for upcoming only.
update_lead_meeting_attendance write Record attendance for a meeting that already happened — whether the customer and/or the lead showed up, plus optional outcome notes. Pass at least one field.

Call it

POST /rest/v1/tools/update_lead_meeting_attendance

Parameters

meeting_id integer required Id of the meeting to update
has_customer_attended boolean optional Whether the customer attended
has_lead_attended boolean optional Whether the lead attended
notes string optional Optional outcome notes — appended to existing notes

Timing intelligence

Read the timing signals collected for a lead — when this kind of contact tends to answer.

1 endpoints
get_lead_timing_intelligence read Get a lead's timing intelligence: the best times to reach out (by day of week, in the lead's local time), when the lead historically responds, and their average response time. Built from this lead's history, falling back to their sector, this customer, then platform-wide data (the source field says which). Use it to time send_message_to_lead / return_lead_to_pipeline touches.

Call it

POST /rest/v1/tools/get_lead_timing_intelligence GET /rest/v1/call/get_lead_timing_intelligence

Parameters

lead_id integer required Lead ID

Conversations

Read what was actually said. Full cross-channel timeline for one lead, the WhatsApp thread on its own, or a meaning-based search across every lead conversation at once.

4 endpoints
get_lead_conversation read Get a lead's full cross-channel conversation timeline — email, WhatsApp, and voice calls — merged chronologically, each item tagged with its channel and direction. Paginated. This is the one tool that shows the WHOLE conversation as the lead experienced it; for a single channel use list_lead_emails or list_lead_whatsapp_messages.

Call it

POST /rest/v1/tools/get_lead_conversation GET /rest/v1/call/get_lead_conversation

Parameters

lead_id integer required Lead ID
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 30 Items per page (default 30, max 100)
order string optional default newest_first Ordering: newest_first (default) or oldest_first
include_transcripts boolean optional default false Include full voice-call transcripts (default false — only the outcome summary)
list_lead_whatsapp_messages read List the WhatsApp messages exchanged with a specific lead (outbound and inbound), oldest first. Paginated — outbound_total/inbound_total report the full thread size. Set include_bodies=false for a lightweight metadata-only view. For the lead's emails use list_lead_emails; for the merged email+WhatsApp+voice timeline use get_lead_conversation.

Call it

POST /rest/v1/tools/list_lead_whatsapp_messages GET /rest/v1/call/list_lead_whatsapp_messages

Parameters

lead_id integer required Lead ID
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 20 Messages per direction per page (default 20, max 100)
include_bodies boolean optional default true Include full message bodies (default true); false returns metadata only
search_lead_conversations read Semantic search ACROSS ALL the customer's LEAD conversations — lead emails and lead WhatsApp messages — by meaning, not keywords (e.g. 'leads who asked about pricing', 'objections about contract length'). Returns snippets with lead_id; fetch full threads via get_lead_conversation / list_lead_emails / list_lead_whatsapp_messages. Optionally scope to one lead or one channel. NOT for the customer's own chat with their Blue Button agent — that is search_my_agent_conversation.

Call it

POST /rest/v1/tools/search_lead_conversations GET /rest/v1/call/search_lead_conversations

Parameters

query string required What to search for, phrased by meaning (any language)
lead_id integer optional Restrict to one lead's conversation (optional)
channel string optional Restrict channel: email, whatsapp, email_inbound, email_outbound, whatsapp_inbound, whatsapp_outbound (optional; default = all)
top_k integer optional default 10 Max results (default 10, max 25)
min_score number optional Minimum similarity score 0..1 (optional)
search_my_agent_conversation read Semantic search over the customer's OWN past conversation with their Blue Button agent (the WhatsApp assistant they talk to) — use it to recall what the customer previously discussed, decided, or asked for. NOT for lead conversations — that is search_lead_conversations.

Call it

POST /rest/v1/tools/search_my_agent_conversation GET /rest/v1/call/search_my_agent_conversation

Parameters

query string required What to search for, phrased by meaning (any language)
top_k integer optional default 5 Max results (default 5, max 10)

Mailbox

The account's own email inbox, as a full mail client: folders and threads, hybrid search by meaning and by exact text, read / star / archive / delete in bulk, in-thread replies with correct threading, and new messages to any recipient.

13 endpoints
delete_mailbox_messages destructive Move one or more messages to the trash (a soft delete — restore_mailbox_messages brings them back, and list_mailbox_messages with folder=trash lists them). SAFETY: a sent message that is still queued and has not gone out yet is REFUSED, because deleting it would silently cancel the send; the row comes back with blocked_reason="pending_send" (or "pending_processing" for an inbound message still being classified). Pass force_cancel_pending_send=true only when the customer actually wants that send cancelled. Accepts a comma-separated list of message handles (max 100 per call).

Call it

POST /rest/v1/tools/delete_mailbox_messages

Parameters

message_ids string required Comma-separated message handles, e.g. "in-42,out-9" (max 100)
force_cancel_pending_send boolean optional default false Delete even when it cancels a queued send or a pending classification (default false)
get_mailbox_message read Read one message in full by its handle ("in-42" / "out-42") — subject, body, counterparty, dates, mailbox state and its attachments (file name + public URL). For the whole conversation around it use get_mailbox_thread.

Call it

POST /rest/v1/tools/get_mailbox_message GET /rest/v1/call/get_mailbox_message

Parameters

message_id string required Message handle from a list or search result, e.g. "in-42"
include_attachments boolean optional default true Include the attachment list (default true)
get_mailbox_overview read The mailbox at a glance: the customer's Blue Button email address, whether it is configured, and the unread / inbox / starred / archived / sent / trash counts plus the newest message timestamps. Counts come in two units and BOTH are reported: *_conversations counts threads and always equals the total that list_mailbox_messages returns for the same folder and filter, while *_messages counts the individual emails inside them — a mailbox with 3 conversations can hold 40 messages, so never compare the two. Call this first — it answers "is there anything waiting for me?" without paging any list. For the messages themselves use list_mailbox_messages.

Call it

POST /rest/v1/tools/get_mailbox_overview GET /rest/v1/call/get_mailbox_overview

Parameters

This endpoint takes no parameters — POST it with no body.

get_mailbox_thread read Open the whole conversation a message belongs to — every inbound and outbound message merged oldest first. A lead-linked message opens the lead's full email history; a non-lead message opens the thread stitched from the counterparty address and the normalized subject. Paginated (total_messages reports the full thread size) so a long thread never floods the context. Set mark_read=true to clear the unread state of the inbound messages on the page, exactly as opening the thread in the console does.

Call it

POST /rest/v1/tools/get_mailbox_thread GET /rest/v1/call/get_mailbox_thread

Parameters

message_id string required Message handle from a list or search result, e.g. "in-42"
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 50 Messages per page (default 50, max 200)
mark_read boolean optional default false Mark the inbound messages on this page as read (default false)
list_mailbox_contacts read List the people the customer can email — every lead with an address that is confirmed or further along and still allowed to receive email, alphabetical and paginated. Use it to find the right recipient before send_mailbox_message. This is the compose picker, not the full lead list — for that use search_leads.

Call it

POST /rest/v1/tools/list_mailbox_contacts GET /rest/v1/call/list_mailbox_contacts

Parameters

page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 50 Contacts per page (default 50, max 200)
list_mailbox_messages read List the mailbox one row per conversation, newest first — inbox, sent or trash. filter narrows the inbox to unread, starred or console-archived mail ("all" returns everything that is not deleted, archived included). Paginated: total reports the full match count. Each row carries a message_id handle like "in-42" / "out-42" — pass that handle to every other mailbox tool. Set include_bodies=true for full bodies instead of the preview snippet. This is the whole mailbox, including mail that belongs to no lead; for one lead's email thread use list_lead_emails.

Call it

POST /rest/v1/tools/list_mailbox_messages GET /rest/v1/call/list_mailbox_messages

Parameters

folder string optional default inbox Folder: inbox, sent or trash (default inbox)
filter string optional default all Filter: all, unread, starred or archived (default all). unread applies to the inbox only
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 20 Rows per page (default 20, max 100)
include_bodies boolean optional default false Include full message bodies (default false); false returns the preview snippet only
reply_to_mailbox_message write Reply inside the conversation a message belongs to — works on ANY thread, whether the other party is a lead or not. Unlike send_message_to_lead this threads correctly: it carries the In-Reply-To and References headers of the thread's newest message plus the "Re:" subject, so the reply lands in the recipient's existing thread instead of starting a new one. SIDE-EFFECT: on a lead-linked thread this takes the lead over (the autonomous agent stops messaging it), pushes the next scheduled touch out a week, and the body is translated to the lead's language when they differ — a non-lead reply does none of that and is sent exactly as written. Refused when the recipient is blacklisted or has unsubscribed. The email is queued for delivery, not sent instantly. Attachments must already be public URLs — generate them with the media tools or register_business_file first.

Call it

POST /rest/v1/tools/reply_to_mailbox_message

Parameters

message_id string required Message handle of any message in the thread to reply to, e.g. "in-42"
body string required The reply body, in the customer's own language
attachment_urls string optional Comma-separated public URLs to attach (optional, max 5 files, 20MB total)
restore_mailbox_messages write Restore one or more messages from the trash. WARNING: restoring a sent message that was deleted before it ever went out puts it back in the send queue and it WILL be delivered — the queue only skips deleted rows. Accepts a comma-separated list of message handles (max 100 per call).

Call it

POST /rest/v1/tools/restore_mailbox_messages

Parameters

message_ids string required Comma-separated message handles, e.g. "in-42,out-9" (max 100)
search_mailbox read Search the mailbox by meaning AND by exact text — semantic matches over the embedded message bodies merged with exact matches on the counterparty address, display name and the lead's name / email / company. Returns one row per matching conversation, most relevant first, paginated. Needs at least 3 characters. This searches the customer's own mailbox, including non-lead mail; to search inside one lead's conversations use search_lead_conversations, and for the customer's own chat with their Blue Button agent use search_my_agent_conversation.

Call it

POST /rest/v1/tools/search_mailbox GET /rest/v1/call/search_mailbox

Parameters

query string required What to search for, in any language — phrased by meaning or as an exact name / address
folder string optional default inbox Folder: inbox or sent (default inbox)
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 10 Rows per page (default 10, max 50)
include_bodies boolean optional default false Include full message bodies (default false)
send_mailbox_message write Send a new email from the customer's Blue Button address to any address — it does not have to be an existing lead. Set register_as_lead=true to also register an unknown recipient as a lead so the conversation is tracked. SIDE-EFFECT: when the recipient IS an existing lead this takes that lead over (the autonomous agent stops messaging it). Refused when the recipient is blacklisted or has unsubscribed, lead or not. The email is queued for delivery, not sent instantly. To reply inside an existing conversation use reply_to_mailbox_message, which threads the reply properly.

Call it

POST /rest/v1/tools/send_mailbox_message

Parameters

to_address string required Recipient email address
subject string required Email subject; when blank a default is generated
body string optional The message body, in the customer's own language
register_as_lead boolean optional default false Register an unknown recipient as a new lead (default false)
attachment_urls string optional Comma-separated public URLs to attach (optional, max 5 files, 20MB total)
set_mailbox_messages_archived write Archive or unarchive one or more messages, in either folder. Archiving hides a message from the default mailbox list but keeps it fully searchable and readable — it is not a delete. Accepts a comma-separated list of message handles (max 100 per call).

Call it

POST /rest/v1/tools/set_mailbox_messages_archived

Parameters

message_ids string required Comma-separated message handles, e.g. "in-42,out-9" (max 100)
archived boolean optional default true true archives, false unarchives (default true)
set_mailbox_messages_read write Mark one or more inbound messages read or unread. Accepts a comma-separated list of message handles (max 100 per call) so a whole triage pass is a single call. Sent mail has no read state and is rejected.

Call it

POST /rest/v1/tools/set_mailbox_messages_read

Parameters

message_ids string required Comma-separated message handles, e.g. "in-42,in-43" (max 100)
read boolean optional default true true marks read, false marks unread (default true)
set_mailbox_messages_starred write Star or unstar one or more messages, in either folder. Accepts a comma-separated list of message handles (max 100 per call). Starring is a toggle-free set: passing starred=true twice leaves the message starred.

Call it

POST /rest/v1/tools/set_mailbox_messages_starred

Parameters

message_ids string required Comma-separated message handles, e.g. "in-42,out-9" (max 100)
starred boolean optional default true true stars, false unstars (default true)

Campaigns

Run separate prospecting tracks for different products or markets: create, pause, resume, rename, archive, compare results, and move leads between them.

11 endpoints
archive_campaign destructive Archives a campaign permanently. Every lead in it has its campaign link cleared and goes back to default prospecting, and the campaign stops appearing in campaign lists. Use pause_campaign instead for a temporary stop.

Call it

POST /rest/v1/tools/archive_campaign

Parameters

name string required Campaign name or numeric campaign_id
compare_campaigns read Compare two campaigns side-by-side: configuration and lead stats.

Call it

POST /rest/v1/tools/compare_campaigns GET /rest/v1/call/compare_campaigns

Parameters

name_a string required First campaign name
name_b string required Second campaign name
create_campaign write Creates a new prospecting campaign. Name and business_name are required. Each campaign is ISOLATED — it does NOT inherit any field from the customer-level defaults, so populate every field that matters at creation time.

Call it

POST /rest/v1/tools/create_campaign

Parameters

name string required Campaign name (unique per customer)
business_name string required Business name for this campaign
business_description string optional Business description for this campaign — the product/service it represents. REQUIRED when the campaign represents a different product than the customer's main business, otherwise prospecting copy will have no product context.
business_website string optional Business website URL for this campaign
icp string optional Ideal customer profile
cnae_filter string optional Comma-separated CNAE codes to include
cnae_exclusion_filter string optional Comma-separated CNAE codes to exclude
instructions string optional Prospecting instructions
email_instructions string optional Email-channel instructions overlay — extra guidance applied ONLY when reaching a lead by email for THIS campaign, layered on top of the campaign's general instructions (raw replace of the email overlay).
whatsapp_instructions string optional WhatsApp-channel instructions overlay — extra guidance applied ONLY when reaching a lead on WhatsApp for THIS campaign, layered on top of the campaign's general instructions (raw replace of the WhatsApp overlay).
voice_instructions string optional Voice-channel instructions overlay — extra guidance applied ONLY on outbound calls for THIS campaign, layered on top of the campaign's general instructions (raw replace of the voice overlay).
goal string optional Outreach goal
lead_qualification_instructions string optional Lead qualification instructions — rules for HOW to evaluate leads against the ICP (hard requirements vs. flexible preferences, override conditions, leniency rules, disqualification thresholds)
human_review_criteria string optional Human review criteria — when to flag a lead for manual review instead of auto-advancing
email_display_name string optional Email display name override for this campaign (e.g. 'Carlos from PrimeAssist'). Leave blank to use the customer-level display name.
uf_filter string optional Comma-separated Brazilian state codes (e.g. 'SP,RJ,MG')
city_filter string optional Comma-separated city names
country_filter string optional ISO country codes
min_employee_count integer optional Minimum employee count
max_employee_count integer optional Maximum employee count
min_annual_revenue number optional Minimum annual revenue
max_annual_revenue number optional Maximum annual revenue
company_size_filter string optional Comma-separated company sizes: Micro,Small,Medium,Large
company_type_filter string optional Comma-separated company types to include in lead searches: Private, Individual, Government, StateOwned, NonProfit. Empty = inherit the customer's company type filter (customer default = Private only — MEI / individual entrepreneurs, government, state-owned and non-profit entities excluded).
company_audience_filter string optional Comma-separated audiences the target company sells to: B2B, B2C, B2BAndB2C, Government, NonCommercial. Derived from the registered activity, so a campaign aimed at 'empresas B2B' needs no CNAE list. Asking for B2B also returns companies that sell to both, and companies whose activity gives no signal are never excluded. Empty = inherit the customer's audience filter.
lead_generation_active boolean optional Whether to auto-generate NEW leads for this track. Defaults to true. Set to false ONLY when the campaign should ONLY work on a list the user imports themselves and never receive auto-generated leads. Existing leads still get prospected — only new lead acquisition is paused when false.
get_campaign read Returns full configuration and lead stats for a specific campaign. Accepts the campaign name or its numeric campaign_id (as returned by list_campaigns, search_leads, get_lead).

Call it

POST /rest/v1/tools/get_campaign GET /rest/v1/call/get_campaign

Parameters

name string required Campaign name or numeric campaign_id
list_campaigns read Lists all prospecting campaigns for the customer with their lead stats (total, interested, confirmed, cold, aware, frozen, not interested, taken over, pending review) and email metrics (emails sent, replies received, reply rate).

Call it

POST /rest/v1/tools/list_campaigns GET /rest/v1/call/list_campaigns

Parameters

This endpoint takes no parameters — POST it with no body.

move_leads_to_campaign write Move leads from one campaign to another, or remove them from their campaign and return them to default (no-campaign) prospecting. Pass the target campaign name, or 'default' to remove the leads from any campaign. Optionally filter by lead status.

Call it

POST /rest/v1/tools/move_leads_to_campaign

Parameters

target_campaign string required Target campaign name or numeric campaign_id, or 'default' (or 'none') to remove the leads from their campaign and return them to default prospecting
lead_ids string required Comma-separated lead IDs to move
status_filter string optional Only move leads with this status (optional)
pause_campaign write Pauses a campaign. Leads in this campaign will not be processed until resumed.

Call it

POST /rest/v1/tools/pause_campaign

Parameters

name string required Campaign name or numeric campaign_id
rename_campaign write Renames a campaign.

Call it

POST /rest/v1/tools/rename_campaign

Parameters

old_name string required Current campaign name
new_name string required New campaign name
resume_campaign write Resumes a paused campaign.

Call it

POST /rest/v1/tools/resume_campaign

Parameters

name string required Campaign name or numeric campaign_id
set_campaign_lead_generation_active write Toggles whether the system AUTO-GENERATES new leads for a campaign. true = generate new leads (default). false = stop generating new leads — only work the existing list. INDEPENDENT from pause/resume: a campaign with lead_generation_active=false but is_active=true still prospects its existing leads, just no new lead acquisition. Use this when the user wants a campaign to work ONLY on a list they imported themselves.

Call it

POST /rest/v1/tools/set_campaign_lead_generation_active

Parameters

name string required Campaign name or numeric campaign_id
active boolean required true to keep generating new leads, false to stop generating new leads (existing leads still get prospected)
update_campaign write Updates an existing campaign's configuration. Pass only the fields you want to change. For numeric filters (employee count, revenue), set to -1 to clear.

Call it

POST /rest/v1/tools/update_campaign

Parameters

name string required Current campaign name
business_name string optional New business name
business_description string optional Business description
business_website string optional Business website
icp string optional Ideal customer profile
cnae_filter string optional CNAE inclusion filter
cnae_exclusion_filter string optional CNAE exclusion filter
uf_filter string optional Comma-separated Brazilian state codes (e.g. 'SP,RJ,MG')
city_filter string optional Comma-separated city names
country_filter string optional Country filter
instructions string optional Prospecting instructions
email_instructions string optional Email-channel instructions overlay — extra guidance applied ONLY when reaching a lead by email for THIS campaign, layered on top of the campaign's general instructions (raw replace of the email overlay).
whatsapp_instructions string optional WhatsApp-channel instructions overlay — extra guidance applied ONLY when reaching a lead on WhatsApp for THIS campaign, layered on top of the campaign's general instructions (raw replace of the WhatsApp overlay).
voice_instructions string optional Voice-channel instructions overlay — extra guidance applied ONLY on outbound calls for THIS campaign, layered on top of the campaign's general instructions (raw replace of the voice overlay).
goal string optional Outreach goal
strategy string optional Strategy
human_review_criteria string optional Human review criteria
lead_qualification_instructions string optional Lead qualification instructions — rules for HOW to evaluate leads against the ICP (hard requirements vs. flexible preferences, override conditions, leniency rules, disqualification thresholds)
email_display_name string optional Email display name
min_employee_count integer optional Minimum employee count (-1 to clear)
max_employee_count integer optional Maximum employee count (-1 to clear)
min_annual_revenue number optional Minimum annual revenue (-1 to clear)
max_annual_revenue number optional Maximum annual revenue (-1 to clear)
company_size_filter string optional Comma-separated company sizes: Micro,Small,Medium,Large (empty to clear)
company_type_filter string optional Comma-separated company types to include in lead searches: Private, Individual, Government, StateOwned, NonProfit. Empty string clears the campaign override and inherits the customer's company type filter (customer default = Private only — MEI / individual entrepreneurs, government, state-owned and non-profit entities excluded).
company_audience_filter string optional Comma-separated audiences the target company sells to: B2B, B2C, B2BAndB2C, Government, NonCommercial. Derived from the registered activity, so a campaign aimed at 'empresas B2B' needs no CNAE list. Asking for B2B also returns companies that sell to both. Empty string clears the campaign override and inherits the customer's audience filter.
lead_generation_active boolean optional Whether to auto-generate NEW leads for this track. true = generate new leads (default for new campaigns). false = stop generating new leads, only work the existing list. Independent from pause/resume — when false the campaign keeps prospecting its existing leads, just doesn't acquire new ones.
is_active boolean optional Whether this campaign is running at all. false pauses the whole track (same as pause_campaign), true resumes it.
voice_calling_active boolean optional Per-track outbound voice calling. true calls this track's leads, false never calls them, omit to keep the current setting. Cleared to inherit the customer-level toggle via clear_voice_calling_active.
generate_custom_presentations boolean optional Whether to generate a per-lead custom presentation for this track (true/false)
notify_on_interested boolean optional Alert when a lead of this track shows interest (true/false)
notify_on_confirmed boolean optional Alert when a lead of this track is confirmed (true/false)
min_founding_date string optional Earliest company founding date to include, as 'yyyy-MM-dd' (empty to clear)
max_founding_date string optional Latest company founding date to include, as 'yyyy-MM-dd' (empty to clear)

Prospecting settings

The master switch plus everything that shapes who gets contacted and how: targeting, rules and preferences.

6 endpoints
get_prospecting_config read Returns all prospecting configuration: filters (CNAE, location), instructions, goal, strategy, human review criteria, lead qualification instructions, notification settings, mode, and activation status.

Call it

POST /rest/v1/tools/get_prospecting_config GET /rest/v1/call/get_prospecting_config

Parameters

This endpoint takes no parameters — POST it with no body.

set_allow_template_whatsapp_messages write Allows or blocks agent-initiated WhatsApp template messages to leads. When blocked the agent may only reply to leads who wrote first, inside WhatsApp's 24-hour window, and never opens a conversation by template. Free-form replies are unaffected.

Call it

POST /rest/v1/tools/set_allow_template_whatsapp_messages

Parameters

allowed boolean required true to allow agent-initiated template messages, false to reply-only
set_prospecting_active write Activates or deactivates autonomous prospecting. Returns the new status and eligibility information.

Call it

POST /rest/v1/tools/set_prospecting_active

Parameters

active boolean required true to activate, false to deactivate
set_prospecting_preferences write Updates prospecting preferences: mode (Active/Passive), custom presentations, and notification settings. Pass only the fields you want to change.

Call it

POST /rest/v1/tools/set_prospecting_preferences

Parameters

mode string optional Prospecting mode: 'Active' (searching for leads) or 'Passive' (paused until review)
generate_presentations boolean optional Whether to generate custom presentations per lead (true/false)
notification_email string optional Email address to receive prospecting notifications
notify_on_interested boolean optional Notify (in-app/WhatsApp) when leads show interest (true/false)
notify_on_confirmed boolean optional Notify (in-app/WhatsApp) when leads are confirmed (true/false)
notify_on_interested_via_email boolean optional Send the branded EMAIL when leads show interest (true/false) — independent of the in-app/WhatsApp alert
notify_on_confirmed_via_email boolean optional Send the branded EMAIL when leads are confirmed (true/false) — independent of the in-app/WhatsApp alert
notify_on_first_whatsapp_message boolean optional Notify (one-time heads-up) when a lead sends their first WhatsApp message (true/false)
cc_on_interested_lead_emails boolean optional Copy the customer on the interested-lead emails sent to the notification addresses (true/false)
set_prospecting_rules write Updates prospecting rules: instructions for the agent, outreach goal, strategy, human review criteria, and lead qualification instructions. Pass only the fields you want to change.

Call it

POST /rest/v1/tools/set_prospecting_rules

Parameters

instructions string optional Instructions for how the agent should prospect (raw replace)
goal string optional Desired outreach goal (e.g. 'schedule a demo', 'book a meeting')
strategy string optional Prospecting strategy document
human_review_criteria string optional Criteria for when to escalate leads to human review
lead_qualification_instructions string optional Rules for HOW to evaluate leads against the ICP — which characteristics are hard requirements vs. flexible preferences, override conditions, leniency rules, disqualification thresholds. Distinct from the ICP itself (who to target).
email_instructions string optional Email-channel instructions overlay — extra guidance applied ONLY when reaching a lead by email, layered on top of the general instructions (raw replace of the email overlay).
whatsapp_instructions string optional WhatsApp-channel instructions overlay — extra guidance applied ONLY when reaching a lead on WhatsApp, layered on top of the general instructions (raw replace of the WhatsApp overlay).
voice_instructions string optional Voice-channel instructions overlay — extra guidance applied ONLY on outbound calls, layered on top of the general instructions (raw replace of the voice overlay).
email_signature string optional Exact signature block appended verbatim to every prospecting email. When set, the copywriter writes no signature of its own. Pass an empty string to clear it and go back to the default name-only signature.
set_targeting write Updates prospecting targeting filters. Pass only the fields you want to change. Comma-separated values for multi-value fields. For numeric filters (employee count, revenue), set to -1 to clear.

Call it

POST /rest/v1/tools/set_targeting

Parameters

cnae_filter string optional Comma-separated CNAE codes to include (e.g. '6201,6202,6311')
cnae_exclusion_filter string optional Comma-separated CNAE codes to exclude
uf_filter string optional Comma-separated Brazilian state codes (e.g. 'SP,RJ,MG')
city_filter string optional Comma-separated city names
country_filter string optional Comma-separated ISO country codes (e.g. 'BR,US')
min_employee_count integer optional Minimum employee count (-1 to clear)
max_employee_count integer optional Maximum employee count (-1 to clear)
min_annual_revenue number optional Minimum annual revenue (-1 to clear)
max_annual_revenue number optional Maximum annual revenue (-1 to clear)
company_size_filter string optional Comma-separated company sizes: Micro,Small,Medium,Large (empty to clear)
company_type_filter string optional Comma-separated company types to include in lead searches: Private, Individual, Government, StateOwned, NonProfit. Default (empty) = Private only — MEI / individual entrepreneurs, government, state-owned and non-profit entities are excluded.
company_audience_filter string optional Comma-separated audiences the target company sells to: B2B, B2C, B2BAndB2C, Government, NonCommercial. Derived from the company's registered activity, so an ICP of simply 'empresas B2B' needs no CNAE list. Asking for B2B also returns companies that sell to both, and companies whose activity gives no signal are never excluded. Default (empty) = no audience filter.
min_founding_date string optional Earliest company founding date to include, as 'yyyy-MM-dd' (empty to clear)
max_founding_date string optional Latest company founding date to include, as 'yyyy-MM-dd' (empty to clear)

Prospecting simulation

Test real prospecting behavior before activation: sandboxed email and WhatsApp conversations plus explicitly confirmed voice calls to a test number.

3 endpoints
get_voice_simulation_status read Reads the status, transcript, and outcome summary of a customer voice simulation. Poll with the simulationLeadId and callId returned by start_voice_simulation until finished=true.

Call it

POST /rest/v1/tools/get_voice_simulation_status GET /rest/v1/call/get_voice_simulation_status

Parameters

simulation_lead_id integer required simulationLeadId returned by start_voice_simulation.
call_id integer required callId returned by start_voice_simulation.
run_prospecting_simulation write Starts, continues, inspects, or finishes an isolated prospecting simulation using the SAME email/WhatsApp prospecting agents and current customer/campaign configuration used in production. No real lead is contacted. Lifecycle: simulation_lead_id=0 starts a new fake lead; pass lead_message to also role-play the lead's next message; reuse the returned simulation_lead_id with another lead_message for later turns; omit lead_message with an existing ID to inspect the merged transcript and lead state; set finish=true to close it. Use a fresh simulation after configuration edits when validating from a clean baseline.

Call it

POST /rest/v1/tools/run_prospecting_simulation

Parameters

channel string required Inbound test channel: 'email' or 'whatsapp'. On a new agent-started simulation this is also the opening channel. The real agent may respond on another channel.
simulation_lead_id integer optional default 0 Existing simulation lead ID to continue/inspect/finish. Omit or 0 to start a new simulation.
lead_message string optional Message to send while role-playing the fake lead. On a new simulation, this runs immediately after creation/the opener. Omit with an existing ID to inspect only.
last_email_subject string optional Email subject for this fake lead reply. Used only when channel='email'.
campaign string optional Campaign name or numeric campaign_id. Omit for customer-level/default prospecting. Used only when starting a new simulation.
lead_starts boolean optional default false If true on a new simulation, the fake lead initiates the conversation and no agent opener is generated before lead_message.
finish boolean optional default false Close the existing simulation. Requires simulation_lead_id; no turn is run.
lead_name string optional Fake lead name. Optional; an agent-started test gets a realistic fallback. Leave blank with lead_starts=true to test an unknown inbound lead.
company_name string optional Fake lead company name. Optional; an agent-started test gets a realistic fallback.
company_description string optional Fake lead company description. Include fit/disqualifying facts needed by the scenario.
website string optional Fake lead company website.
phone string optional Fake lead phone number.
city string optional Fake lead city.
state string optional Fake lead state/region.
cnae string optional Fake lead CNAE/industry classification.
cnpj string optional Fake lead CNPJ/company registration number.
country string optional Fake lead country.
background string optional Scenario-specific prospecting background known about the fake lead.
goal string optional Lead-specific goal override for this simulation.
notes string optional Lead-specific notes visible to the prospecting agent.
first_touch_instructions string optional Lead-specific first-touch instructions for this simulation.
start_voice_simulation destructive Starts an isolated VOICE prospecting simulation that places a REAL phone call to the authenticated account owner's saved profile number. Never calls a lead or an arbitrary supplied number. Get the user's explicit confirmation immediately before calling this tool because the phone will ring and telephony/LLM usage is incurred. Uses the current customer or campaign voice instructions and returns simulationLeadId + callId for get_voice_simulation_status polling.

Call it

POST /rest/v1/tools/start_voice_simulation

Parameters

campaign string optional Campaign name or numeric campaign_id. Omit for customer-level/default voice prospecting.
lead_name string optional Fake lead name. A realistic fallback is used when omitted.
company_name string optional Fake lead company name. A realistic fallback is used when omitted.
company_description string optional Fake lead company description. Include fit/disqualifying facts needed by the voice scenario.
website string optional Fake lead company website.
background string optional Scenario-specific prospecting background known about the fake lead.
goal string optional Lead-specific goal override for this simulation.
notes string optional Lead-specific notes visible to the prospecting agent.
first_touch_instructions string optional Lead-specific first-touch instructions for this simulation.

Prospecting files

The catalog of files the agent may send to a lead — presentations, price tables, guides — scoped to a campaign or to the whole account.

4 endpoints
list_prospecting_files read List the prospecting files catalog — the materials the prospecting agent can offer and send to leads, with each file's title, description, url and campaign scope.

Call it

POST /rest/v1/tools/list_prospecting_files GET /rest/v1/call/list_prospecting_files

Parameters

This endpoint takes no parameters — POST it with no body.

register_prospecting_file write Register a file in the prospecting files catalog — the materials the prospecting agent can offer and SEND TO LEADS during outreach (price table, institutional presentation, onboarding guide), via email attachments and WhatsApp documents. Provide either customer_file_id (an already-uploaded customer file — preferred) or a direct url. If no description is given, one is auto-generated from the file's content so the agent knows when to send it. NOT for business knowledge the agent answers questions from (register_business_file) and NOT the per-lead AI-generated custom guide.

Call it

POST /rest/v1/tools/register_prospecting_file

Parameters

title string required Short lead-facing title, e.g. 'Tabela de precos'
description string optional What the file contains and when to send it to a lead (1-3 sentences). Leave empty to auto-generate from the file's content.
customer_file_id integer optional Id of an existing customer file to register (preferred over a raw url)
url string optional Direct public URL of the file (alternative to customer_file_id)
campaign string optional Optional campaign name to make the file sendable ONLY to that campaign's leads. Leave empty for a customer-wide file sendable to every lead.
sort_order integer optional default 0 Catalog display/prompt order (lower first, default 0)
remove_prospecting_file destructive Remove a file from the prospecting files catalog so the prospecting agent stops offering and sending it to leads. Find the id with list_prospecting_files.

Call it

POST /rest/v1/tools/remove_prospecting_file

Parameters

prospecting_file_id integer required Id of the prospecting file to remove
update_prospecting_file write Update a prospecting file's title, description, campaign scope or display order. Find the id with list_prospecting_files. To change the file itself, remove the entry and register a new one.

Call it

POST /rest/v1/tools/update_prospecting_file

Parameters

prospecting_file_id integer required Id of the prospecting file to update
title string optional New lead-facing title
description string optional New description of what the file contains and when to send it
campaign string optional Campaign name to scope the file to, or 'all' to make it customer-wide
sort_order integer optional New catalog display/prompt order (lower first)

Reports

The numbers: headline prospecting report, funnel by industry and by state, performance trends, message performance, volume estimates, and a narrative catch-up of what changed.

10 endpoints
estimate_lead_volume read Returns a benchmark of what a typical PAID Blue Button customer (and paid customers with a similar ICP) produces in the last 30 days: new leads found, confirmed responses (real conversations), interested (hot) leads, and messages sent — each shown as a range from median (typical customer) to top (more active ones) per week and per month. Free-trial-only users are excluded. The tool picks the most relevant benchmark automatically — Similar (CNAE-overlapping paid customers) when available, Global (all paid customers) otherwise.

Call it

POST /rest/v1/tools/estimate_lead_volume GET /rest/v1/call/estimate_lead_volume

Parameters

This endpoint takes no parameters — POST it with no body.

get_funnel_by_industry read Get a funnel breakdown by industry. For Brazilian customers, groups by CNAE division. For international customers, groups by the CompanyIndustry field from Apollo data. Optionally filter by campaign.

Call it

POST /rest/v1/tools/get_funnel_by_industry GET /rest/v1/call/get_funnel_by_industry

Parameters

campaign string optional Filter by campaign name or numeric campaign_id (optional, omit for global funnel)
get_funnel_timeline read Count of leads ENTERING each funnel stage per time bucket (day or week). Stages tracked: cold (DateProspectingStarted), confirmed (DateConfirmedProspectingQualification), interested (DateConfirmedInterest), closed (DateStatusChanged while current Status=Closed — APPROXIMATION: a lead that was Closed and later moved to another status will not be counted, because the platform does not store status history). Aware is not exposed — the platform does not reliably track entry into that stage. Missing buckets gap-filled with zeros, newest-first. Optionally filter by campaign.

Call it

POST /rest/v1/tools/get_funnel_timeline GET /rest/v1/call/get_funnel_timeline

Parameters

days integer optional default 30 Number of days to look back (default 30, max 365)
bucket string optional default day Bucket size: 'day' (default) or 'week' (Monday-aligned)
campaign string optional Filter by campaign name or numeric campaign_id (optional, omit for global timeline)
get_message_performance read Reply rate broken down by campaign and/or message type over a time window. Returns total sent, replied (distinct outbound emails with at least one reply), reply_rate_pct, plus a breakdown. Breakdown shape depends on group_by: 'campaign' returns one row per campaign (message types collapsed); 'type' returns one row per message type (campaigns collapsed); 'both' (default) returns one row per campaign×type combination (a matrix — NOT two separate lists — so expect up to N_campaigns × N_types rows). Message types: first_contact (AutonomousFirstTouch), follow_up (AutonomousFollowUp), response (AutonomousResponse to inbound), direct (DirectMessage sent on user's behalf), user_written (UserWrittenMessage sent manually by user). Defaults to 30 days.

Call it

POST /rest/v1/tools/get_message_performance GET /rest/v1/call/get_message_performance

Parameters

days integer optional default 30 Number of days to look back (default 30, max 365)
campaign string optional Filter by campaign name or numeric campaign_id (optional, omit for all campaigns)
group_by string optional default both How to group the breakdown: 'campaign', 'type', or 'both' (default)
get_metrics_by_state_and_industry read Breaks down every prospecting metric by Brazilian STATE and by INDUSTRY (CNAE description) over a time window, so you can compare which states/industries are performing best. For each dimension it returns the top groups by lead volume — each with new_leads, emails_sent, responses, whatsapp_sent, whatsapp_responses, conscientizados, interested (became interested in the window), confirmed_aware_interested_or_takenover, referrals, and meeting counts (invitations made/received, booked, made) — plus the top-performing group per metric category. Leads with no state/CNAE fall into 'Não informado' and are excluded from the top-performer picks. interested is counted by DateConfirmedInterest (the moment the lead converted). Optionally filter by campaign.

Call it

POST /rest/v1/tools/get_metrics_by_state_and_industry GET /rest/v1/call/get_metrics_by_state_and_industry

Parameters

days integer optional default 30 Number of days to look back (default 30, max 365)
campaign string optional Filter by campaign name or numeric campaign_id (optional, omit for whole account)
get_prospecting_report read Get an overall prospecting report: total leads, leads by status, emails sent, response rate, and pipeline summary. Also returns WhatsApp activity: whatsapp_sent (prospecting WhatsApp messages sent), whatsapp_responses (WhatsApp replies received, counted separately from email responses), and leads_talked_to_on_whatsapp (distinct leads with any WhatsApp message in either direction). Optionally filter by campaign.

Call it

POST /rest/v1/tools/get_prospecting_report GET /rest/v1/call/get_prospecting_report

Parameters

campaign string optional Filter by campaign name or numeric campaign_id (optional, omit for global report)
get_whatsapp_message_performance read WhatsApp reply performance broken down by campaign and/or message type over a time window. NOTE: unlike get_message_performance (email), WhatsApp reply rate is reported at the LEAD level — WhatsApp inbound has no per-message link to a specific outbound, so 'replied' cannot be attributed per message. Returns total sent (message count), leads_messaged (distinct leads contacted), leads_replied (distinct leads who sent at least one inbound on/after their first outbound of that type in the window), lead_reply_rate_pct (leads_replied / leads_messaged), plus a breakdown. group_by: 'campaign' (one row per campaign), 'type' (one row per message type), 'both' (default, campaign×type matrix). Message types: first_contact (AutonomousFirstTouch), follow_up (AutonomousFollowUp), response (AutonomousResponse), direct (DirectMessage), user_written (UserWrittenMessage). Defaults to 30 days.

Call it

POST /rest/v1/tools/get_whatsapp_message_performance GET /rest/v1/call/get_whatsapp_message_performance

Parameters

days integer optional default 30 Number of days to look back (default 30, max 365)
campaign string optional Filter by campaign name or numeric campaign_id (optional, omit for all campaigns)
group_by string optional default both How to group the breakdown: 'campaign', 'type', or 'both' (default)
list_prospecting_optimizations read Lists the autonomous prospecting optimization history in reverse-chronological order (newest first). Paginated. Each entry shows when the prospecting reviewer agent ran and what targeting/configuration changes it made and why. Optionally filter by campaign.

Call it

POST /rest/v1/tools/list_prospecting_optimizations GET /rest/v1/call/list_prospecting_optimizations

Parameters

campaign string optional Filter by campaign name or numeric campaign_id (optional, omit for all optimizations)
page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 20 Page size (default 20, max 100)
what_changed_since read Full digest of what happened in the prospecting operation since a given date — built for the 'I've been away for months, what happened?' case. Blocks: (1) activity_summary — the engine's raw work in the window: new_leads, emails_sent, email_replies, whatsapp_sent, whatsapp_replies; (2) funnel_progress — leads that reached each stage in the window: reached_confirmed, became_interested; (3) new_interested_leads — the interested leads themselves (up to 100, plus total_count); (4) outcomes — deals closed in the window: won_count, lost_count, gave_up_count, total_deal_value_brl, and won_items; (5) meetings — booked, cancelled, held, no_show counts in the window plus items; (6) pending_human_review — the CURRENT pile of leads waiting on the owner (a live snapshot, NOT limited to the window): total_count plus items; (7) support_answered — support requests the team answered in the window (message + answer); (8) campaign_performance_changes — campaigns whose reply rate shifted by at least 3 percentage points (30-day window ending on since_date vs since_date→now, skipping windows with fewer than 50 sent); (9) optimizer_adjustments — prospecting-optimizer changes persisted since that date (capped at 500 items; total_count/returned_count/truncated report the true total). All windowed counts cover since_date→now; timestamps are UTC.

Call it

POST /rest/v1/tools/what_changed_since GET /rest/v1/call/what_changed_since

Parameters

since_date string required ISO date in YYYY-MM-DD format (e.g. 2026-01-15)

Voice calls

Place a goal-driven phone call to a lead, read the calls already placed, and switch voice calling on or off per account or per campaign.

9 endpoints
get_campaign_voice_calling_active read Read a campaign's voice-calling toggle. A null value means the campaign inherits the customer-level toggle.

Call it

POST /rest/v1/tools/get_campaign_voice_calling_active GET /rest/v1/call/get_campaign_voice_calling_active

Parameters

campaign string required Name of the campaign
get_voice_call read Get the status and outcome of a goal-driven phone call placed with place_goal_driven_call: lifecycle status, whether a person picked up, whether the goal was achieved, the outcome summary, and the full transcript.

Call it

POST /rest/v1/tools/get_voice_call GET /rest/v1/call/get_voice_call

Parameters

voice_call_request_id integer required The voice_call_request_id returned by place_goal_driven_call
get_voice_calling_active read Read whether autonomous outbound voice calling to leads is active at the customer level.

Call it

POST /rest/v1/tools/get_voice_calling_active GET /rest/v1/call/get_voice_calling_active

Parameters

This endpoint takes no parameters — POST it with no body.

get_voice_prospecting_voice read Read which voice the agent speaks with on outbound prospecting phone calls ('Male' or 'Female').

Call it

POST /rest/v1/tools/get_voice_prospecting_voice GET /rest/v1/call/get_voice_prospecting_voice

Parameters

This endpoint takes no parameters — POST it with no body.

list_voice_calls read List the customer's goal-driven phone calls (newest first) with status and outcome summary. Use get_voice_call for the full transcript of one call.

Call it

POST /rest/v1/tools/list_voice_calls GET /rest/v1/call/list_voice_calls

Parameters

page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 20 Page size (default 20, max 100)
place_goal_driven_call write Place a REAL phone call to a number the customer gives you, to accomplish a stated goal (e.g. 'call this restaurant and ask if they have a table tonight'). A real-time voice assistant makes the call in the background; this only enqueues the request — the call is placed shortly after and cannot be recalled once dialing. Poll get_voice_call with the returned voice_call_request_id for the outcome (status, goal_achieved, summary, transcript); the result also arrives as a platform notification.

Call it

POST /rest/v1/tools/place_goal_driven_call

Parameters

phone_number string required The phone number to call, international format e.g. +5511999999999
goal string required The goal of the call in plain language and the customer's language — exactly what to accomplish or find out
context string optional Optional background/context: who is being called and any helpful info
set_campaign_voice_calling_active write Enable or disable autonomous outbound voice calls for a specific campaign, overriding the customer-level toggle for that campaign only.

Call it

POST /rest/v1/tools/set_campaign_voice_calling_active

Parameters

campaign string required Name of the campaign
active boolean required True to enable, false to disable, for this campaign
set_voice_calling_active write Enable or disable autonomous outbound voice calls to leads at the customer level. Separate from email prospecting.

Call it

POST /rest/v1/tools/set_voice_calling_active

Parameters

active boolean required True to enable, false to disable
set_voice_prospecting_voice write Set which voice the agent speaks with on outbound prospecting phone calls. 'Male' is the default. This only changes how the agent sounds - it does not change what it says, and it does not affect WhatsApp or email.

Call it

POST /rest/v1/tools/set_voice_prospecting_voice

Parameters

voice string required The voice to use on prospecting calls: 'Male' or 'Female'

WhatsApp line

Register and inspect the prospecting WhatsApp line, set its monthly and daily cost caps, and update its business profile.

6 endpoints
get_whatsapp_line read Get the customer's WhatsApp prospecting line — the one-stop status/diagnostic read: whether it is live/ready to send, its number, quality rating, full WhatsApp business profile, the pending one-click Meta signup link (when the customer still needs to connect their WhatsApp Business Account), any ACTIVE HEALTH ISSUE with the exact fix the customer must apply (payment method, reconnect link, Meta restriction), and the day- and month-to-date WhatsApp spend vs the customer's daily and monthly cost caps. Refreshes the live snapshot from Meta first.

Call it

POST /rest/v1/tools/get_whatsapp_line GET /rest/v1/call/get_whatsapp_line

Parameters

This endpoint takes no parameters — POST it with no body.

register_whatsapp_line write Register a dedicated WhatsApp prospecting line (a real WhatsApp number). Provisioning is automatic and takes a few minutes. If the customer already has a line, returns that line instead of creating another (one line per customer). Requires an active paid plan that includes WhatsApp prospecting. By default Eesier provides a brand-new number; pass use_own_number=true when the customer wants to prospect from their OWN WhatsApp number — they then receive a one-click Meta link whose official popup connects their WhatsApp Business Account (or creates one), lets them pick which of their numbers to use, or verifies a new number on the spot.

Call it

POST /rest/v1/tools/register_whatsapp_line

Parameters

use_own_number boolean optional default false True when the customer wants to use their OWN WhatsApp number instead of a new Eesier-provided one. Default false.
set_whatsapp_daily_cost_cap write Set (or clear) the customer's daily WhatsApp prospecting spending cap, in the currency Meta bills the customer in. Meta bills WhatsApp conversation fees to the customer's own account, so this cap lets the customer decide the maximum they want to spend per day. When the cap is reached, paid (conversation-opening) WhatsApp messages pause until the next day — replies to leads who message first keep working, and email prospecting is unaffected. Pass 0 or a negative value to remove the cap. The current spend and cap are visible on get_whatsapp_line.

Call it

POST /rest/v1/tools/set_whatsapp_daily_cost_cap

Parameters

daily_cap number required Maximum daily WhatsApp spend, in the currency Meta bills this customer's WhatsApp account in (returned as cost_cap_currency by get_whatsapp_line — NOT necessarily BRL). Never convert the amount to another currency. 0 or negative removes the cap.
set_whatsapp_line_profile_picture write Set the WhatsApp line's profile picture from a public image URL or an already-uploaded customer file. Any JPG/PNG/WebP — non-square, small or oversized images are automatically fitted into a square avatar. The line must already be live.

Call it

POST /rest/v1/tools/set_whatsapp_line_profile_picture

Parameters

image_url string optional Public URL of the image (any JPG/PNG/WebP — automatically fitted into a square avatar)
customer_file_id integer optional Id of an already-uploaded customer file to use as the picture. Preferred when the user uploaded an image.
set_whatsapp_monthly_cost_cap write Set (or clear) the customer's monthly WhatsApp prospecting spending cap, in the currency Meta bills the customer in. Meta bills WhatsApp conversation fees to the customer's own account, so this cap lets the customer decide the maximum they want to spend per calendar month. When the cap is reached, paid (conversation-opening) WhatsApp messages pause until the 1st of the next month — replies to leads who message first keep working, and email prospecting is unaffected. Pass 0 or a negative value to remove the cap. The current spend and cap are visible on get_whatsapp_line.

Call it

POST /rest/v1/tools/set_whatsapp_monthly_cost_cap

Parameters

monthly_cap number required Maximum monthly WhatsApp spend, in the currency Meta bills this customer's WhatsApp account in (returned as cost_cap_currency by get_whatsapp_line — NOT necessarily BRL). Never convert the amount to another currency. 0 or negative removes the cap.
update_whatsapp_line_profile write Update the WhatsApp line's business profile. Only provided fields change. The line must already be live. Display name is not managed here.

Call it

POST /rest/v1/tools/update_whatsapp_line_profile

Parameters

about string optional Short 'about' text (max 139 chars)
description string optional Business description (max 512 chars)
address string optional Business street address
email string optional Business contact email
websites string optional Business website URLs, comma-separated (WhatsApp shows at most 2)
vertical string optional Business category (WhatsApp vertical), e.g. PROF_SERVICES, RETAIL, EDU, HEALTH, FINANCE, RESTAURANT, OTHER

Business profile

What the account sells and to whom. Read the profile, read the agent's assessment of it, and rewrite it.

3 endpoints
get_business read Returns the customer's business profile: name, description, website, ideal customer profile, and default presentation URL.

Call it

POST /rest/v1/tools/get_business GET /rest/v1/call/get_business

Parameters

This endpoint takes no parameters — POST it with no body.

get_business_assessment read Read the last business-fundamentals assessment Blue Button's internal advisor recorded for this customer: verdict, results probability, the full assessment JSON, when it was made, and the customer's known paying-client examples. Read-only data — bring your own analysis on top of it; there is no tool to re-run the assessment.

Call it

POST /rest/v1/tools/get_business_assessment GET /rest/v1/call/get_business_assessment

Parameters

This endpoint takes no parameters — POST it with no body.

set_business write Updates the customer's business profile. Pass only the fields you want to change. Fields: business_name, business_description, business_website, ideal_customer_profile, paying_customer_examples. For the files the prospecting agent sends to leads (presentation, price table, ...), use the prospecting-file tools (register_prospecting_file / list_prospecting_files).

Call it

POST /rest/v1/tools/set_business

Parameters

business_name string optional Business name
business_description string optional Business description
business_website string optional Business website URL
ideal_customer_profile string optional Ideal customer profile text
paying_customer_examples string optional Real paying-customer examples the ICP and the business advisor reason from

Business files

The reference material the agent reads to understand the business — register, list and remove it.

3 endpoints
list_business_files read List the business-knowledge files registered for this customer, with each file's indexing state and campaign scope.

Call it

POST /rest/v1/tools/list_business_files GET /rest/v1/call/list_business_files

Parameters

This endpoint takes no parameters — POST it with no body.

register_business_file write Register text (or an already-uploaded customer file) as business knowledge so the prospecting agents can answer questions about the business (services, processes, pricing, FAQs). The content is chunked + embedded in the background and becomes searchable shortly. Provide either text or customer_file_id.

Call it

POST /rest/v1/tools/register_business_file

Parameters

title string required Short descriptive title, e.g. 'Tabela de precos 2026'
text string optional Raw text to register as business knowledge (use when the content was pasted directly)
customer_file_id integer optional Id of an existing customer file to register (find it with list_business_files or the file list)
campaign string optional Optional campaign name to scope this knowledge to one campaign. Leave empty for customer-level knowledge shared across every campaign.
remove_business_file destructive Remove a registered business-knowledge file and its indexed chunks so the agents stop answering from it. Find the id with list_business_files.

Call it

POST /rest/v1/tools/remove_business_file

Parameters

business_file_id integer required Id of the business knowledge file to remove

FAQ

The questions leads keep asking: the answered business FAQ, and the ones still open waiting for an answer.

2 endpoints
list_business_faq read List the business FAQ — every question-and-answer pair the platform has accumulated about this business (each answer given via answer_lead_question lands here, and the prospecting agents use it to answer leads). Read it before asking the user something that may already be answered.

Call it

POST /rest/v1/tools/list_business_faq GET /rest/v1/call/list_business_faq

Parameters

This endpoint takes no parameters — POST it with no body.

list_open_lead_questions read List the questions LEADS asked that the agent could not answer and that are still waiting for the business owner's input. High-value loop: surface these to the user, get the answers, then record each via answer_lead_question (pass the open_question_id) — ask whether the answer is reusable or only for this lead.

Call it

POST /rest/v1/tools/list_open_lead_questions GET /rest/v1/call/list_open_lead_questions

Parameters

This endpoint takes no parameters — POST it with no body.

Suggestions

Ask the platform to draft targeting for you — an ideal customer profile, or the activity codes to include and exclude.

3 endpoints
generate_cnae_exclusion_suggestion read Generate suggested CNAE exclusion codes based on an ideal customer profile and business description. These codes identify competitors and bad-fit industries to exclude from prospecting. Only works for Brazilian customers. Returns codes without saving — use set_targeting to save.

Call it

POST /rest/v1/tools/generate_cnae_exclusion_suggestion GET /rest/v1/call/generate_cnae_exclusion_suggestion

Parameters

icp_text string optional ICP text to analyze. If omitted, uses the customer's current ICP.
generate_cnae_suggestion read Generate suggested CNAE inclusion codes based on an ideal customer profile. CNAE codes are used to target specific industries in Brazilian lead prospecting. Only works for Brazilian customers. Returns codes without saving — use set_targeting to save.

Call it

POST /rest/v1/tools/generate_cnae_suggestion GET /rest/v1/call/generate_cnae_suggestion

Parameters

icp_text string optional ICP text to analyze. If omitted, uses the customer's current ICP.
generate_icp_suggestion read Generate an ideal customer profile (ICP) suggestion based on the customer's business information. Uses AI to analyze the business and suggest who the ideal customers are. Returns the suggestion without saving it — use set_business to save.

Call it

POST /rest/v1/tools/generate_icp_suggestion GET /rest/v1/call/generate_icp_suggestion

Parameters

This endpoint takes no parameters — POST it with no body.

Reference lookups

Search the platform's own knowledge base before answering any question about how it works, and resolve activity codes and cities.

3 endpoints
lookup_city read Look up a Brazilian city code (código IBGE) from a city name. Only works for Brazilian customers. Returns matching cities. Used for city-based prospecting filters.

Call it

POST /rest/v1/tools/lookup_city GET /rest/v1/call/lookup_city

Parameters

city_name string required City name to search for (e.g. 'São Paulo', 'Curitiba')
lookup_cnae read Look up a CNAE code's name and description. CNAE (Classificação Nacional de Atividades Econômicas) is the Brazilian industry classification system. Only works for Brazilian customers. Provide a code to get its name at division (2-digit), group (3-digit), class (5-digit), or subclass (7-digit) level.

Call it

POST /rest/v1/tools/lookup_cnae GET /rest/v1/call/lookup_cnae

Parameters

code string required CNAE code (e.g. '62' for IT division, '6201' for software development group, '6201501' for software development subclass)
search_knowledge read Search the Blue Button knowledge base for authoritative answers about how the platform works — pricing, plans, onboarding, targeting capabilities, email sending, takeovers, reports, privacy, cancellation, and every other platform-specific question. Uses semantic RAG (embedding similarity) over curated knowledge pieces, so the query can be a natural-language question, a keyword, or a topic. ALWAYS call this tool whenever the user asks anything specific about Blue Button — never improvise from general knowledge. Returns the top matches with title, content, and similarity score.

Call it

POST /rest/v1/tools/search_knowledge GET /rest/v1/call/search_knowledge

Parameters

query string required Natural-language query describing what the user wants to know about Blue Button (e.g. 'how much does it cost', 'can I target by company size', 'what happens when I take over a lead', 'international prospecting').
top_k integer optional default 3 Number of top results to return. Default 3. Use a higher value (up to 10) when the question is broad or you want multiple angles.
min_score number optional default 0.7 Minimum similarity score threshold (0.0–1.0). Default 0.7. Lower values return more results but may be less relevant.

Blacklist

Never contact these again: block and unblock e-mail addresses, whole domains and phone numbers.

7 endpoints
add_blacklisted_domain write Add a whole DOMAIN to the blacklist. Every email at that domain (e.g. [email protected]) is blocked. Do not pass a full email address — use add_blacklisted_email for that.

Call it

POST /rest/v1/tools/add_blacklisted_domain

Parameters

domain string required The domain to blacklist, e.g. 'acme.com'. Subdomains are not auto-included.
reason string optional Reason: Competitor, Client, or Other
add_blacklisted_email write Add a single email address to the blacklist. Blacklisted emails never receive prospecting messages. To block an entire company, use add_blacklisted_domain instead.

Call it

POST /rest/v1/tools/add_blacklisted_email

Parameters

email string required The email address to blacklist
reason string optional Reason: Competitor, Client, or Other
add_blacklisted_phone write Add a PHONE NUMBER to the blacklist. The number never receives a WhatsApp message or a voice call. Digits are kept and everything else is stripped, so any formatting is accepted.

Call it

POST /rest/v1/tools/add_blacklisted_phone

Parameters

phone string required The phone number to blacklist, in any format (e.g. '+55 11 99999-9999')
reason string optional Reason: Competitor, Client, or Other
list_blacklisted_emails read List blacklisted entries (individual emails, whole domains and phone numbers) with their reason and times-blocked count. Paginated — 'total' reports the full list size.

Call it

POST /rest/v1/tools/list_blacklisted_emails GET /rest/v1/call/list_blacklisted_emails

Parameters

page integer optional default 0 Page number (0-based, default 0)
page_size integer optional default 50 Entries per page (default 50, max 200)
remove_blacklisted_domain destructive Remove a whole DOMAIN from the blacklist, allowing addresses at that domain to receive prospecting messages again.

Call it

POST /rest/v1/tools/remove_blacklisted_domain

Parameters

domain string required The domain to remove from the blacklist, e.g. 'acme.com'
remove_blacklisted_email destructive Remove a single email address from the blacklist, allowing it to receive prospecting messages again.

Call it

POST /rest/v1/tools/remove_blacklisted_email

Parameters

email string required The email address to remove from the blacklist
remove_blacklisted_phone destructive Remove a PHONE NUMBER from the blacklist, allowing it to receive WhatsApp messages and voice calls again.

Call it

POST /rest/v1/tools/remove_blacklisted_phone

Parameters

phone string required The phone number to remove from the blacklist, in any format

Account settings

Timezone, user name, preferences, call permission, notification e-mails, sending e-mail settings, sender domain setup, and tax data.

15 endpoints
get_email_settings read Get the customer's Blue Button email settings: the full address, handle, display name, and notification instructions.

Call it

POST /rest/v1/tools/get_email_settings GET /rest/v1/call/get_email_settings

Parameters

This endpoint takes no parameters — POST it with no body.

get_general_settings read Get the customer's general account settings: voice mode, autonomous-message sending, account email, and timezone offset.

Call it

POST /rest/v1/tools/get_general_settings GET /rest/v1/call/get_general_settings

Parameters

This endpoint takes no parameters — POST it with no body.

get_notification_emails read Get the email addresses currently set for autonomous prospecting notifications and daily reports.

Call it

POST /rest/v1/tools/get_notification_emails GET /rest/v1/call/get_notification_emails

Parameters

This endpoint takes no parameters — POST it with no body.

lookup_municipality_code read Look up the 7-digit IBGE municipality code for a Brazilian city. Returns all matches when the city exists in multiple states. Use before update_tax_info.

Call it

POST /rest/v1/tools/lookup_municipality_code GET /rest/v1/call/lookup_municipality_code

Parameters

city_name string required Brazilian city name (accent-insensitive)
state string optional Optional state — 2-letter UF (RS, SP...) or full Portuguese name — to disambiguate
set_agent_phone_call_permission write Get or set whether the agent may place outbound phone calls to the customer. Omit 'enabled' to read the current value; pass true/false to change it.

Call it

POST /rest/v1/tools/set_agent_phone_call_permission

Parameters

enabled boolean optional True to allow calls, false to block. Omit to just read the current value.
set_email_notification_instructions write Set the free-text rules that decide which inbound emails deserve an immediate notification to the customer. Pass an empty string to clear them and fall back to the default behaviour.

Call it

POST /rest/v1/tools/set_email_notification_instructions

Parameters

instructions string required Rules describing which inbound emails warrant an immediate heads-up (empty to clear)
set_personal_email write Set the account's own personal email address — the single address tied to the account itself, distinct from the comma-separated prospecting notification list managed by update_notification_emails.

Call it

POST /rest/v1/tools/set_personal_email

Parameters

email string required The account owner's personal email address
set_timezone write Set the customer's timezone by telling the agent the current local hour (0-23, 24h format). The offset is computed from UTC.

Call it

POST /rest/v1/tools/set_timezone

Parameters

current_hour integer required Hour part of the customer's current local time, 0-23 (24h format)
setup_custom_domain write Set up, verify, or remove a custom-domain email address (e.g. [email protected]). Requires an active paid plan. action: 'activate' (needs email_address), 'verify', or 'remove'.

Call it

POST /rest/v1/tools/setup_custom_domain

Parameters

action string required 'activate' to set a new custom email, 'verify' to check DNS, 'remove' to remove it
email_address string optional The full custom email address, e.g. '[email protected]'. Required for 'activate'.
setup_email_subdomain write Set up or verify a custom email subdomain (e.g. yourcompany.eesiermail.com). Requires an active paid plan. action: 'activate' (needs subdomain) or 'verify'.

Call it

POST /rest/v1/tools/setup_email_subdomain

Parameters

action string required 'activate' to set a new subdomain, 'verify' to check DNS verification status
subdomain string optional The subdomain name, e.g. 'mycompany'. Required for 'activate'.
update_email_settings write Update the Blue Button email handle (the part before @, max 20 chars, unique) and/or the display name shown in outgoing emails. Pass at least one field.

Call it

POST /rest/v1/tools/update_email_settings

Parameters

handle string optional New email handle (lowercase, no spaces, max 20 chars). Accents/invalid chars are stripped.
display_name string optional New display name for outgoing emails (the 'From' name recipients see)
update_notification_emails write Set the email address(es) for autonomous prospecting notifications and daily reports (comma-separated). The first address also becomes the account email.

Call it

POST /rest/v1/tools/update_notification_emails

Parameters

emails string required Email address(es) for notifications, comma-separated
update_preferences write Update customer preferences: language, whether to show the business on the Blue Button website, and push notifications. Pass at least one field.

Call it

POST /rest/v1/tools/update_preferences

Parameters

language_key string optional Language key, e.g. pt-BR, en-US, es-AR
show_on_website boolean optional Whether to show the business on the Blue Button website
push_notifications boolean optional Whether push (console) notifications are enabled
update_tax_info write Update tax/invoice information. Pass whichever fields need updating. Tax document must be CPF (11 digits) or CNPJ (14 digits); CEP must be 8 digits; municipality code must be a valid 7-digit IBGE code (use lookup_municipality_code first).

Call it

POST /rest/v1/tools/update_tax_info

Parameters

tax_name string optional Tax-registered name (company or person)
tax_document string optional Tax document, digits only: CPF (11) or CNPJ (14)
street string optional Street name
number string optional Address number
neighborhood string optional Neighborhood
cep string optional Postal code (CEP, 8 digits)
municipality_code integer optional IBGE municipality code (7 digits)
update_user_name write Update the customer's display name.

Call it

POST /rest/v1/tools/update_user_name

Parameters

name string required The new name for the customer

Team members

Who else is on the account — add, list and remove members.

3 endpoints
add_member write Add another person (an additional phone number) to this account. They get their own conversation with the agent but full shared access to the same company, settings, and prospecting. Fails if the phone number already belongs to any account.

Call it

POST /rest/v1/tools/add_member

Parameters

name string required The person's name
phone_number string required The person's phone number in international format, e.g. +5511999999999
email string optional Optional email — when set, they receive copies of email notifications (interested/confirmed-lead emails)
list_members read List everyone on this account: the account owner plus any additional people that were added.

Call it

POST /rest/v1/tools/list_members GET /rest/v1/call/list_members

Parameters

This endpoint takes no parameters — POST it with no body.

remove_member destructive Remove an additional person from this account, identified by name or phone number. The account owner cannot be removed.

Call it

POST /rest/v1/tools/remove_member

Parameters

name_or_phone string required The name or phone number of the person to remove

Access tokens

Manage the tokens that authenticate this connection: list them, issue a new one, revoke one.

3 endpoints
generate_mcp_token write Create a new MCP access token for this account. The token value is returned ONCE and never again — pass it to the caller immediately and tell them to store it securely.

Call it

POST /rest/v1/tools/generate_mcp_token

Parameters

label string optional A short label naming what will use this token, e.g. 'n8n workflow'
list_mcp_tokens read List the account's MCP access tokens. The token values themselves are never returned — only the id, label, creation date, last-used date and whether the token has been revoked.

Call it

POST /rest/v1/tools/list_mcp_tokens GET /rest/v1/call/list_mcp_tokens

Parameters

This endpoint takes no parameters — POST it with no body.

revoke_mcp_token destructive Revoke an MCP access token so it can no longer connect. Use list_mcp_tokens to find the token_id. Revoking the token the caller is currently authenticated with immediately ends their own access.

Call it

POST /rest/v1/tools/revoke_mcp_token

Parameters

token_id integer required The id of the token to revoke, from list_mcp_tokens

Events & webhooks

The account event feed with a cursor, plus outbound webhook subscriptions — create, list, test and delete them.

5 endpoints
create_webhook_subscription write Register an HTTPS webhook endpoint that receives account events as they happen (signed POSTs) — for automation systems the customer runs (Agent SDK apps, n8n, Zapier, custom backends). The signing secret is returned ONCE in this response — store it securely. Note: this does NOT push into this MCP session; agents that can only poll should use list_account_events instead.

Call it

POST /rest/v1/tools/create_webhook_subscription

Parameters

url string required The HTTPS endpoint to POST events to
event_types string optional Comma-separated event types to deliver (optional; default = all). Same values as list_account_events.
description string optional A short label for this subscription (e.g. 'my n8n flow')
delete_webhook_subscription destructive Delete a webhook subscription — deliveries to its endpoint stop immediately. Irreversible (create a new subscription to resume; it will get a new secret).

Call it

POST /rest/v1/tools/delete_webhook_subscription

Parameters

subscription_id integer required Subscription ID (from list_webhook_subscriptions)
list_account_events read Poll the account's event feed — new lead replies (email/WhatsApp), any email arriving in the customer's mailbox (lead or not), leads flagged for review, leads becoming interested/confirmed, meetings booked/cancelled, voice calls finished, imports finished, support answered. Cursor-paged: pass the next_cursor from the previous call to get only what happened since. This is about ACCOUNT ACTIVITY — not calendar events (list_calendar_events / list_calendly_upcoming_events) and not one lead's history (list_lead_lifecycle_events).

Call it

POST /rest/v1/tools/list_account_events GET /rest/v1/call/list_account_events

Parameters

since_cursor integer optional default 0 Return only events with id greater than this (0 = from the beginning of the feed). Use the next_cursor from the previous call.
event_types string optional Comma-separated event types to include (optional; default = all). Valid: lead_replied_email, lead_replied_whatsapp, lead_sent_for_human_review, lead_became_interested, lead_confirmed, meeting_booked, meeting_cancelled, voice_call_finished, import_finished, support_request_answered, email_received
limit integer optional default 50 Max events to return (default 50, max 200)
list_webhook_subscriptions read List the account's webhook subscriptions with delivery health (last success/failure, consecutive failures, disabled state). Secrets are never shown again.

Call it

POST /rest/v1/tools/list_webhook_subscriptions GET /rest/v1/call/list_webhook_subscriptions

Parameters

This endpoint takes no parameters — POST it with no body.

test_webhook_subscription write Send a signed test 'ping' event to a webhook subscription's endpoint so the customer can verify their receiver and signature check. The delivery result appears in list_webhook_subscriptions (date_last_success / last_failure_reason) within ~1 minute.

Call it

POST /rest/v1/tools/test_webhook_subscription

Parameters

subscription_id integer required Subscription ID (from list_webhook_subscriptions)

CRM integrations

Connect and disconnect a CRM, check sync status, force a resync, map custom fields, and manage the Apollo and RD Station links.

9 endpoints
connect_crm write Connect a CRM integration. Each CRM needs different credentials: Pipedrive (api_key), RdStation (marketing_api_key and/or crm_token), HubSpot (access_token), Odoo (url + database + username + api_key), Omie (app_key + app_secret), Agendor/ExactSales/Piperun/Venttra (api_token), SystemeIo (api_key), Twenty (api_key + optional url when self-hosted). Requires an active paid plan. The credential is LIVE-VERIFIED against the provider before being stored (a bad key returns an error and stores nothing); the response's 'verified' field says whether verification was possible — ExactSales, Piperun, Venttra, and the RdStation marketing key are write-only APIs and are stored unverified.

Call it

POST /rest/v1/tools/connect_crm

Parameters

crm_name string required CRM name: Pipedrive, RdStation, HubSpot, Odoo, Omie, Agendor, ExactSales, Piperun, SystemeIo, Venttra, Twenty
api_key string optional API key (Pipedrive, Odoo, SystemeIo, Twenty)
api_token string optional API token (Agendor, ExactSales, Piperun, Venttra)
access_token string optional Access token (HubSpot)
url string optional URL (Odoo; optional for Twenty when self-hosted)
database string optional Database name (Odoo)
username string optional Username (Odoo)
app_key string optional App key (Omie)
app_secret string optional App secret (Omie)
marketing_api_key string optional Marketing API key (RdStation)
crm_token string optional CRM token (RdStation)
pipeline_id integer optional Pipeline id deals are created in (Pipedrive)
funnel_id integer optional Funnel id deals are created in (Agendor)
disconnect_crm destructive Disconnect a CRM integration by clearing its credentials.

Call it

POST /rest/v1/tools/disconnect_crm

Parameters

crm_name string required CRM name: Pipedrive, RdStation, HubSpot, Odoo, Omie, Agendor, ExactSales, Piperun, SystemeIo, Venttra, Twenty
get_crm_sync_status read Show how many leads have been synced to each connected CRM: synced, pending, and stuck counts, the last sync time, and a few recently-synced lead names.

Call it

POST /rest/v1/tools/get_crm_sync_status GET /rest/v1/call/get_crm_sync_status

Parameters

This endpoint takes no parameters — POST it with no body.

list_crm_integrations read List all CRM integrations with their connection status, the minimum lead status filter for CRM sync, and the configured custom fields.

Call it

POST /rest/v1/tools/list_crm_integrations GET /rest/v1/call/list_crm_integrations

Parameters

This endpoint takes no parameters — POST it with no body.

manage_apollo_integration write Connect or disconnect the Apollo lead-source integration. Requires an active paid plan. action: 'connect' (needs api_key) or 'disconnect'. The api_key is live-verified against Apollo before being stored — a bad key returns an error and stores nothing.

Call it

POST /rest/v1/tools/manage_apollo_integration

Parameters

action string required Action: connect or disconnect
api_key string optional Apollo API key (required for connect)
list_id string optional Apollo list id to sync leads from (optional)
manage_crm_custom_fields write Manage custom fields sent with every lead to CRM integrations. action: 'list', 'add' (needs field_name + field_value), or 'remove' (needs field_id).

Call it

POST /rest/v1/tools/manage_crm_custom_fields

Parameters

action string required Action: list, add, or remove
field_name string optional Field name (required for 'add')
field_value string optional Field value (required for 'add')
field_id integer optional Field id (required for 'remove')
manage_rd_station_crm_lead_source write Enable or disable importing RD Station CRM contacts as prospecting leads. Requires an active paid plan and the RD Station CRM token to already be connected (use connect_crm). action: 'enable' (optionally scoped by pipeline_id and deal_stage_id so only contacts attached to deals there are imported) or 'disable'. Enabling live-verifies the stored token against RD Station CRM first. Does not affect the outbound lead-to-CRM sync.

Call it

POST /rest/v1/tools/manage_rd_station_crm_lead_source

Parameters

action string required Action: enable or disable
pipeline_id string optional RD Station CRM deal pipeline id to limit the import to (optional; omit to import all contacts)
deal_stage_id string optional RD Station CRM deal stage id inside the pipeline to limit the import to (optional; requires pipeline_id)
resync_crm_leads write Manually re-queue eligible leads that have not yet been sent to the CRM so the background sync retries them. Already-synced leads are never re-sent (no duplicates). The send happens in the background within a few minutes.

Call it

POST /rest/v1/tools/resync_crm_leads

Parameters

This endpoint takes no parameters — POST it with no body.

update_crm_minimum_status write Set the minimum lead status required before a lead is synced to the CRM (Pending, Cold, Confirmed, Aware, NotInterested, Interested). Omit 'status' to clear the filter and sync all leads.

Call it

POST /rest/v1/tools/update_crm_minimum_status

Parameters

status string optional Minimum lead status for CRM sync. Omit to sync all leads.

Calendly

Connect Calendly, pick the event type leads get booked into, and read upcoming bookings.

7 endpoints
disconnect_calendly destructive Disconnects the customer's Calendly account: deletes the webhook subscription on Calendly's side, revokes the access token, and clears all stored Calendly fields. Pass user_has_confirmed=true only when the user has explicitly confirmed they want to disconnect.

Call it

POST /rest/v1/tools/disconnect_calendly

Parameters

user_has_confirmed boolean required Must be true — the agent must have explicit user confirmation before disconnecting.
get_calendly_connection_url read Returns the URL the user must click to connect their Calendly account to Eesier. Share this URL with the user — they open it, sign into Calendly, click Authorize, and the connection is established server-side. After the user completes the flow, call get_calendly_status again to confirm. Idempotent: returns the same URL whether or not Calendly is already connected (so the user can reconnect a different account).

Call it

POST /rest/v1/tools/get_calendly_connection_url GET /rest/v1/call/get_calendly_connection_url

Parameters

This endpoint takes no parameters — POST it with no body.

get_calendly_event read Returns full details for a specific scheduled Calendly event, including the list of invitees with their names, emails, status, and any answers they gave to scheduling questions. Use this for follow-up questions about a specific meeting after list_calendly_upcoming_events.

Call it

POST /rest/v1/tools/get_calendly_event GET /rest/v1/call/get_calendly_event

Parameters

event_uri string required Full Calendly scheduled event URI (e.g. 'https://api.calendly.com/scheduled_events/<uuid>'). Get it from list_calendly_upcoming_events.
get_calendly_status read Returns the current Calendly connection status for the customer: whether OAuth is connected, the connected Calendly account email, and which event type (if any) is selected as the default for prospecting links.

Call it

POST /rest/v1/tools/get_calendly_status GET /rest/v1/call/get_calendly_status

Parameters

This endpoint takes no parameters — POST it with no body.

list_calendly_event_types read Lists all active event types in the customer's Calendly account (e.g. '15-min intro call', '30-min consultation'). Each entry includes uri (use this when calling set_calendly_default_event_type), name, slug, duration_minutes, scheduling_url, and is_default. Required: Calendly must be connected first.

Call it

POST /rest/v1/tools/list_calendly_event_types GET /rest/v1/call/list_calendly_event_types

Parameters

This endpoint takes no parameters — POST it with no body.

list_calendly_upcoming_events read Lists scheduled Calendly events on the customer's calendar within a date range. Use this for 'what's on my agenda' / 'do I have any meetings tomorrow' style requests. Returned `start_utc`/`end_utc` come back in UTC — pull `timezone_offset_utc_hours` from `whoami` and convert before showing them to the user. Calendly imposes a 100-day max range.

Call it

POST /rest/v1/tools/list_calendly_upcoming_events GET /rest/v1/call/list_calendly_upcoming_events

Parameters

start_date string optional Start of the window in YYYY-MM-DD format (UTC, inclusive). Defaults to today's UTC date if omitted.
end_date string optional End of the window in YYYY-MM-DD format (UTC, INCLUSIVE — events at any time on this day are returned). Defaults to 7 days after start_date.
status string optional default active Status filter: 'active' (default — confirmed bookings) or 'canceled'.
set_calendly_default_event_type write Sets the default Calendly event type. The default is the event type Blue Button uses when generating scheduling links inside lead conversations. Pass either event_type_uri (preferred — get it from list_calendly_event_types) or event_type_name (fuzzy-matched against active event types). Pass empty event_type_uri to clear the default.

Call it

POST /rest/v1/tools/set_calendly_default_event_type

Parameters

event_type_uri string optional Full Calendly event type URI (preferred). Pass empty string to clear the current default.
event_type_name string optional Or the event type's display name — fuzzy-matched against the customer's active event types. Used only when event_type_uri is not provided.

Google Calendar

Connect Google Calendar and work the calendar itself: list, create, update, delete and respond to events.

6 endpoints
create_calendar_event write Create a Google Calendar event. Times are UTC — convert the customer's local time using timezone_offset_utc_hours from whoami BEFORE calling. Returns the event id and a Meet link when one was generated.

Call it

POST /rest/v1/tools/create_calendar_event

Parameters

summary string required Event title
start_utc string required Event start in UTC, ISO format (e.g. 2026-07-10T14:00:00Z)
end_utc string required Event end in UTC, ISO format
attendees string optional Comma-separated attendee emails
calendar_id string optional default primary Calendar ID (default 'primary')
delete_calendar_event destructive Delete a Google Calendar event. This cancels the event for all attendees and cannot be undone.

Call it

POST /rest/v1/tools/delete_calendar_event

Parameters

event_id string required ID of the calendar event
calendar_id string optional default primary Calendar ID (default 'primary')
get_google_connection_url read Get the OAuth URL for the customer to connect their Google account (required for the Google Calendar tools). Share the URL with the user; the connection completes server-side after they authorize. Idempotent — also works for reconnecting.

Call it

POST /rest/v1/tools/get_google_connection_url GET /rest/v1/call/get_google_connection_url

Parameters

This endpoint takes no parameters — POST it with no body.

list_calendar_events read List the customer's Google Calendar events for one calendar day (UTC). Returns start/end in UTC ISO format.

Call it

POST /rest/v1/tools/list_calendar_events GET /rest/v1/call/list_calendar_events

Parameters

date string required The day to list, yyyy-MM-dd (interpreted in UTC)
calendar_id string optional default primary Calendar ID (default 'primary')
respond_calendar_event write Accept or decline a Google Calendar event invitation on the customer's behalf.

Call it

POST /rest/v1/tools/respond_calendar_event

Parameters

event_id string required ID of the calendar event
accept boolean required true to accept the invitation, false to decline
calendar_id string optional default primary Calendar ID (default 'primary')
update_calendar_event write Update a Google Calendar event (title, times, attendees). Pass only the fields to change. Times are UTC.

Call it

POST /rest/v1/tools/update_calendar_event

Parameters

event_id string required ID of the calendar event
summary string optional New event title
start_utc string optional New start in UTC, ISO format
end_utc string optional New end in UTC, ISO format
attendees string optional New comma-separated attendee emails (replaces the current list)
calendar_id string optional default primary Calendar ID (default 'primary')

Google Ads

The paid side: campaigns, budgets, billing, performance reports, diagnostics, ad groups, keywords, negatives, search ads and audiences.

18 endpoints
add_google_ads_keywords write Add keywords to an ad group in a Google Ads campaign. One keyword per line in the keywords parameter (keywords may contain commas). match_type: Broad, Phrase, or Exact (default Broad).

Call it

POST /rest/v1/tools/add_google_ads_keywords

Parameters

campaign string required The campaign name or id
ad_group_id integer required The ad group id (from list_google_ads_ad_groups)
keywords string required The keywords to add, ONE PER LINE
match_type string optional Match type: Broad (default), Phrase, or Exact
add_google_ads_negative_keywords write Add CAMPAIGN-LEVEL negative keywords to a Google Ads campaign (searches these terms will never trigger ads). One keyword per line. match_type: Broad (default), Phrase, or Exact.

Call it

POST /rest/v1/tools/add_google_ads_negative_keywords

Parameters

campaign string required The campaign name or id
keywords string required The negative keywords to add, ONE PER LINE
match_type string optional Match type: Broad (default), Phrase, or Exact
create_google_ads_campaign_draft write Create a NEW Google Ads campaign as a DRAFT. It does NOT serve until the customer recharges its balance via the returned console recharge_url — share that link and never claim the campaign is live. channel_type: Search (default) or PerformanceMax (only recommend PMax after a Search campaign has real conversion data).

Call it

POST /rest/v1/tools/create_google_ads_campaign_draft

Parameters

name string required The campaign name as it will appear in Google Ads
daily_budget_brl number required Daily budget in BRL (positive, e.g. 20)
channel_type string optional Channel type: Search (default) or PerformanceMax
create_google_ads_search_ad write Create a Responsive Search Ad in an ad group of a Google Ads campaign. Headlines max 30 chars each, descriptions max 90 chars each — ONE PER LINE. Provide at least 3 headlines and 2 descriptions.

Call it

POST /rest/v1/tools/create_google_ads_search_ad

Parameters

campaign string required The campaign name or id
ad_group_id integer required The ad group id (from list_google_ads_ad_groups)
final_url string required The landing page URL the ad clicks through to
headlines string required The ad headlines, ONE PER LINE, max 30 characters each
descriptions string required The ad descriptions, ONE PER LINE, max 90 characters each
diagnose_google_ads_campaign read Diagnose why a Google Ads campaign is (or isn't) serving: live serving status, primary status with reasons, and per-ad approval/review status.

Call it

POST /rest/v1/tools/diagnose_google_ads_campaign GET /rest/v1/call/diagnose_google_ads_campaign

Parameters

campaign string required The campaign name or id
get_google_ads_audience_status read Get a Google Ads campaign's Customer Match audience status: how many emails were on the last upload, when, and whether the list is attached.

Call it

POST /rest/v1/tools/get_google_ads_audience_status GET /rest/v1/call/get_google_ads_audience_status

Parameters

campaign string required The campaign name or id
get_google_ads_billing read Read Google Ads billing/funding data for a campaign's account. section: AccountInfo, AccountBudgets, BillingSetups, Proposals, Invoices (needs year+month), or CampaignBudgets.

Call it

POST /rest/v1/tools/get_google_ads_billing GET /rest/v1/call/get_google_ads_billing

Parameters

campaign string required The campaign name or id
section string required Section: AccountInfo, AccountBudgets, BillingSetups, Proposals, Invoices, CampaignBudgets
year integer optional Invoice issue year (Invoices only)
month integer optional Invoice issue month 1-12 (Invoices only)
get_google_ads_campaign read Get one Google Ads campaign's full detail: lifecycle status, hold reason, funding balance, the stored performance snapshot (spend, impressions, clicks, conversions, CTR, CPC), and the console management/recharge link. Pass the campaign name or id.

Call it

POST /rest/v1/tools/get_google_ads_campaign GET /rest/v1/call/get_google_ads_campaign

Parameters

campaign string required The campaign name or id (from list_google_ads_campaigns)
get_google_ads_keyword_ideas read Get keyword ideas with search volume from Google's Keyword Planner for a campaign. Provide seed keywords (one per line) and/or a page URL to extract ideas from.

Call it

POST /rest/v1/tools/get_google_ads_keyword_ideas GET /rest/v1/call/get_google_ads_keyword_ideas

Parameters

campaign string required The campaign name or id
seed_keywords string optional Seed keywords, ONE PER LINE
page_url string optional A page URL to extract keyword ideas from
max_results integer optional default 50 Max results (default 50)
get_google_ads_performance_report read Pull a LIVE Google Ads performance report for a campaign. report_type: Campaign (totals), AdGroup, Keyword (with quality score), Ad, SearchTerms (what users actually searched), Daily, Device, Conversion, ImpressionShare (share of impressions + % lost to budget vs rank), AdAssets (per-headline/description LOW/GOOD/BEST labels), Hourly, Geographic, Demographics. Costs in BRL.

Call it

POST /rest/v1/tools/get_google_ads_performance_report GET /rest/v1/call/get_google_ads_performance_report

Parameters

campaign string required The campaign name or id
report_type string required Report type: Campaign, AdGroup, Keyword, Ad, SearchTerms, Daily, Device, Conversion, ImpressionShare, AdAssets, Hourly, Geographic, Demographics
date_range string optional Date range: a preset (LAST_7_DAYS, LAST_30_DAYS, LAST_90_DAYS, THIS_MONTH, LAST_MONTH) or a custom 'yyyy-MM-dd AND yyyy-MM-dd' window. Default LAST_30_DAYS.
list_google_ads_ad_groups read List a Google Ads campaign's ad groups (id, name, status, CPC bid). Ad-group ids are needed for the keyword and ad tools.

Call it

POST /rest/v1/tools/list_google_ads_ad_groups GET /rest/v1/call/list_google_ads_ad_groups

Parameters

campaign string required The campaign name or id
list_google_ads_campaigns read List the customer's Google Ads campaigns with status, channel type, daily budget, hold reason, and balance (recharged, spent, remaining) — all in BRL. The entry point: call this first, then pass a returned name or id to the other google_ads tools.

Call it

POST /rest/v1/tools/list_google_ads_campaigns GET /rest/v1/call/list_google_ads_campaigns

Parameters

This endpoint takes no parameters — POST it with no body.

list_google_ads_keywords read List the keywords of one ad group in a Google Ads campaign (text, match type, status, CPC bid, quality score).

Call it

POST /rest/v1/tools/list_google_ads_keywords GET /rest/v1/call/list_google_ads_keywords

Parameters

campaign string required The campaign name or id
ad_group_id integer required The ad group id (from list_google_ads_ad_groups)
nudge_google_ads_provisioning write Re-run the go-live provisioning gate for a Google Ads campaign that seems stuck after being funded (nudges the provisioning state machine forward).

Call it

POST /rest/v1/tools/nudge_google_ads_provisioning

Parameters

campaign string required The campaign name or id
refresh_google_ads_audience write Re-upload the Google Ads campaign's Customer Match audience from the customer's current lead emails (keeps the remarketing list fresh). Returns the number of emails uploaded.

Call it

POST /rest/v1/tools/refresh_google_ads_audience

Parameters

campaign string required The campaign name or id
set_google_ads_campaign_status destructive Pause, resume, or END a Google Ads campaign. Resume is gated on remaining balance + at least one enabled ad (and keyword for Search). END IS IRREVERSIBLE — it removes the campaign in Google Ads; get the customer's explicit confirmation before ending.

Call it

POST /rest/v1/tools/set_google_ads_campaign_status

Parameters

campaign string required The campaign name or id
action string required Action: Pause, Resume, or End (End is irreversible)
sync_google_ads_spend write Refresh a Google Ads campaign's spend from the live Google API (updates the stored snapshot and funding math). Call this before quoting spend or balance numbers to the customer.

Call it

POST /rest/v1/tools/sync_google_ads_spend

Parameters

campaign string required The campaign name or id
update_google_ads_campaign_budget write Update a Google Ads campaign's daily budget (BRL). Returns the effective value after platform clamping.

Call it

POST /rest/v1/tools/update_google_ads_campaign_budget

Parameters

campaign string required The campaign name or id
new_daily_budget_brl number required The new daily budget in BRL

Websites

Register a site and change it by conversation: settings, subdomain, source code, snapshots and restores, screenshots, and crawling.

15 endpoints
archive_website destructive Archive (remove) a website.

Call it

POST /rest/v1/tools/archive_website

Parameters

website_id integer required Id of the website to archive
cancel_website_change destructive Cancel the ongoing (unfinished) change request for a website.

Call it

POST /rest/v1/tools/cancel_website_change

Parameters

website_id integer required Id of the website
change_website write Request a change to a website. The change is queued and rendered in the background — this returns immediately with a code id; poll get_website for completion.

Call it

POST /rest/v1/tools/change_website

Parameters

website_id integer required Id of the website to change
prompt string required Prompt describing the desired change
data_storage_required boolean optional default false True if the change requires data storage (a database)
ignore_existing_code boolean optional default false True to ignore the existing code and rebuild from scratch (full overhaul)
reasoning_mode string optional Coding agent reasoning: Fast (simple changes, default) or Thinking (complex changes)
generation_type string optional Generation type: Fast (default) or Quality
change_website_subdomain write Change a website's subdomain (the part before .eesier.website).

Call it

POST /rest/v1/tools/change_website_subdomain

Parameters

website_id integer required Id of the website
new_subdomain string required New subdomain part without the .eesier.website suffix (letters, numbers, hyphens only)
create_website_snapshot write Create a snapshot of a website's current code, tagged with a description, so it can be restored later.

Call it

POST /rest/v1/tools/create_website_snapshot

Parameters

website_id integer required Id of the website
snapshot_description string required Description for the snapshot
export_website_code write Export a website's current code to an HTML file and email it to the given address.

Call it

POST /rest/v1/tools/export_website_code

Parameters

website_id integer required Id of the website
email_address string required Destination email address
get_website read Get full information about one website: title, URL, type, language, generation status, and code-editor link.

Call it

POST /rest/v1/tools/get_website GET /rest/v1/call/get_website

Parameters

website_id integer required Id of the website
get_website_code read Get the HTML code of a specific website code entry.

Call it

POST /rest/v1/tools/get_website_code GET /rest/v1/call/get_website_code

Parameters

website_code_id integer required Id of the website code entry
get_website_settings read Get a website's configurable settings (title, language, restriction, agent guidelines).

Call it

POST /rest/v1/tools/get_website_settings GET /rest/v1/call/get_website_settings

Parameters

website_id integer required Id of the website
list_website_code read List the successful code generations for a website (without the HTML itself), newest first.

Call it

POST /rest/v1/tools/list_website_code GET /rest/v1/call/list_website_code

Parameters

website_id integer required Id of the website
list_website_snapshots read List a website's snapshots (saved code versions), newest first.

Call it

POST /rest/v1/tools/list_website_snapshots GET /rest/v1/call/list_website_snapshots

Parameters

website_id integer required Id of the website
list_websites read List all of the customer's websites with their generation status, URL, and code-editor link.

Call it

POST /rest/v1/tools/list_websites GET /rest/v1/call/list_websites

Parameters

This endpoint takes no parameters — POST it with no body.

register_website write Register a new AI-generated website. Generation runs in the background — this returns immediately with an id; poll get_website / list_websites for the finished URL and status.

Call it

POST /rest/v1/tools/register_website

Parameters

description string required Concise but complete description of the website: purpose, main features, target audience, style, and what it sells/promotes
language string required Language code in xx-xx form, e.g. pt-br, en-us
application_type string optional Application type: Website (default) or LeadCapturePage. For an interactive site with logins/dashboards, keep Website and set data_storage_required=true.
generation_type string optional Generation type: Fast (default, simpler sites) or Quality (slower, better for complex sites)
data_storage_required boolean optional default false True if the site needs persistent data storage (accounts, orders, dashboards); false for static sites. Default false.
restricted boolean optional default false True to restrict the site behind a login page; false for public. Default false.
copy_from_website_id integer optional Optional id of another of this customer's websites to copy code from
business_or_brand_name string optional Optional name of the existing business/brand the site is for (triggers online research for content and branding)
restore_website_snapshot destructive Restore a snapshot (or any past code entry) as the website's current code.

Call it

POST /rest/v1/tools/restore_website_snapshot

Parameters

website_code_id integer required Id of the website code entry to restore
set_website_settings write Update a website's settings. Pass only the fields you want to change.

Call it

POST /rest/v1/tools/set_website_settings

Parameters

website_id integer required Id of the website
title string optional Website title (max 60 characters)
language_key string optional Language key, e.g. pt-BR, en-US
restricted boolean optional Whether the website is restricted behind a login
guidelines string optional Persistent guidelines for how the agent should work on this website

Lead capture pages

The inbound side: create capture pages, change them, list them and archive them.

4 endpoints
archive_lead_capture_page destructive Archive (remove) a lead-capture page.

Call it

POST /rest/v1/tools/archive_lead_capture_page

Parameters

lead_capture_page_id integer required Id of the lead-capture page
change_lead_capture_page write Request a change to a lead-capture page. The change is queued and rendered in the background — this returns immediately with a code id.

Call it

POST /rest/v1/tools/change_lead_capture_page

Parameters

lead_capture_page_id integer required Id of the lead-capture page
prompt string required Prompt describing the desired change
create_lead_capture_page write Create a lead-capture page. Generation runs in the background — this returns immediately with an id; poll list_lead_capture_pages for the finished URL.

Call it

POST /rest/v1/tools/create_lead_capture_page

Parameters

description string required Concise but complete description: what info to capture, target audience, the offer/value proposition, and any design preferences
language string required Language code in xx-xx form, e.g. pt-br, en-us
list_lead_capture_pages read List all of the customer's lead-capture pages with their generation status and URL.

Call it

POST /rest/v1/tools/list_lead_capture_pages GET /rest/v1/call/list_lead_capture_pages

Parameters

This endpoint takes no parameters — POST it with no body.

Console page

The account's own dashboard page inside the platform: read its HTML, publish a new version you wrote yourself, roll back instantly, and pull the always-current data API and design docs.

5 endpoints
get_console_page read Get the customer's custom console dashboard page (/MyConsole): whether it exists, its live URL, whether a build is currently running, and the version history. Every version is kept and restorable.

Call it

POST /rest/v1/tools/get_console_page GET /rest/v1/call/get_console_page

Parameters

This endpoint takes no parameters — POST it with no body.

get_console_page_docs read REQUIRED READING before writing console page HTML: the page contract (sandbox, security, self-containment), the full Console Data API reference the page may fetch, and the Eesier design system. Always rendered live from the platform's own source of truth — call it again any time, it is never stale.

Call it

POST /rest/v1/tools/get_console_page_docs GET /rest/v1/call/get_console_page_docs

Parameters

This endpoint takes no parameters — POST it with no body.

get_console_page_html read Get the full HTML of the customer's console dashboard page — the current version by default, or a specific version by id. Use it to inspect or modify the page before calling set_console_page_html.

Call it

POST /rest/v1/tools/get_console_page_html GET /rest/v1/call/get_console_page_html

Parameters

version_id integer optional Optional version id from get_console_page; omit for the current live version
restore_console_page_version write Restore a previous version of the customer's console dashboard page — instant repoint, no rebuild. Get version ids from get_console_page.

Call it

POST /rest/v1/tools/restore_console_page_version

Parameters

version_id integer required Version id to restore, from get_console_page
set_console_page_html write Publish new HTML for the customer's console dashboard page. YOU are the coding agent: write the complete self-contained HTML yourself following get_console_page_docs (call it first). Stored as a new version and made live instantly; previous versions remain restorable.

Call it

POST /rest/v1/tools/set_console_page_html

Parameters

html string required The COMPLETE self-contained HTML document (doctype through </html>, inline CSS/JS only, fetches only relative /ConsoleDataApi/ paths)
change_summary string required One short sentence describing what this version is or changes — shown in the version history

Media

Generate images, drawings and videos, edit a video, and read back everything already generated.

10 endpoints
create_video write Generate a short AI video from a text prompt and an optional first-frame reference image. Renders in the background — this returns immediately with an id; poll list_videos for the finished video_url.

Call it

POST /rest/v1/tools/create_video

Parameters

prompt string required The video prompt
model string optional Engine: SeedancePro, SeedanceProFast (default), Grok
reference_image_url string optional Optional first-frame image URL (absolute https). The video animates from this image.
duration integer optional Duration in seconds (clamped per engine)
aspect_ratio string optional Aspect ratio, e.g. 16:9, 9:16, 1:1, 4:3
resolution string optional Resolution: 480p, 720p, or 1080p
edit_video write Generate a new video that iterates on a previously generated one. When no reference_image_url is given, the first-frame strategy decides how the starting frame is produced.

Call it

POST /rest/v1/tools/edit_video

Parameters

video_id integer required Id of the previously generated video to iterate on
prompt string required The new video prompt
model string optional Engine: SeedancePro, SeedanceProFast (default), Grok
reference_image_url string optional Optional new first-frame image URL (absolute https). Overrides the strategy.
first_frame_strategy string optional How to handle the first frame: KeepPreviousFirstFrame (default), EditPreviousFirstFrame, GenerateBrandNewFirstFrame
duration integer optional Duration in seconds (clamped per engine)
aspect_ratio string optional Aspect ratio, e.g. 16:9, 9:16, 1:1, 4:3
resolution string optional Resolution: 480p, 720p, or 1080p
generate_drawing write Generate a drawing (shapes, wireframes, page layouts, diagrams, tables, charts, grids, vector shapes, maps). Runs in the background — this returns immediately with an id; poll list_drawings for the finished image_url.

Call it

POST /rest/v1/tools/generate_drawing

Parameters

prompt string required Description of the drawing to generate
caption string optional Optional caption to accompany the delivered image
reference_image_url string optional Optional absolute https URL of a reference image to send with the prompt
drawing_id integer optional Optional id of an existing drawing to edit/iterate on
generate_image write Generate an image from a text prompt (or edit existing images by passing reference URLs). Generation runs in the background — this returns immediately with an id; poll list_images for the finished image_url.

Call it

POST /rest/v1/tools/generate_image

Parameters

prompt string required Prompt describing the image to generate
aspect_ratio string optional Image format: Square (1:1), Landscape (wider), or Portrait (taller). Default Square.
transparent boolean optional default false Transparent background (default false)
reference_image_urls string optional Comma-separated absolute https URLs of reference images to send with the prompt
profile string optional Optimization profile: None, SocialMediaInstagramPostFeed, SocialMediaInstagramPostStories. Default None.
model string optional Generation model: OpenAI (default), BytePlus. Don't change unless the user asks.
get_drawing read Get one generated drawing by id — the poll target for generate_drawing. Shows the generation status and, once finished, the image_url.

Call it

POST /rest/v1/tools/get_drawing GET /rest/v1/call/get_drawing

Parameters

drawing_id integer required The drawing_id returned by generate_drawing
get_image read Get one generated image by id — the poll target for generate_image. Shows the generation status and, once finished, the image_url.

Call it

POST /rest/v1/tools/get_image GET /rest/v1/call/get_image

Parameters

image_id integer required The image_generation_id returned by generate_image
get_video read Get one generated video by id — the poll target for create_video/edit_video (list_videos only shows FINISHED videos, so poll this for in-progress ones). is_finished=true with a video_url means done; is_finished=true without a URL means the render failed.

Call it

POST /rest/v1/tools/get_video GET /rest/v1/call/get_video

Parameters

video_id integer required The video_id returned by create_video or edit_video
list_drawings read List generated drawings (newest first, paginated). Includes each drawing's generation status and, once finished, its image_url.

Call it

POST /rest/v1/tools/list_drawings GET /rest/v1/call/list_drawings

Parameters

page integer optional default 1 Page number (1 = first page)
page_size integer optional default 10 Page size (default 10, max 50)
list_images read List generated images (newest first, paginated). Includes each image's generation status and, once finished, its image_url.

Call it

POST /rest/v1/tools/list_images GET /rest/v1/call/list_images

Parameters

page integer optional default 1 Page number (1 = first page)
page_size integer optional default 10 Page size (default 10, max 50)
list_videos read List previously generated videos (newest first, paginated). Only successfully finished videos with a URL are returned.

Call it

POST /rest/v1/tools/list_videos GET /rest/v1/call/list_videos

Parameters

page integer optional default 1 Page number (1 = first page)
page_size integer optional default 10 Page size (default 10, max 50)

Online research

Queue a research task on the open web and read the result when it is done.

3 endpoints
list_online_searches read List the customer's most recent online searches (up to 10, newest first) with their status.

Call it

POST /rest/v1/tools/list_online_searches GET /rest/v1/call/list_online_searches

Parameters

This endpoint takes no parameters — POST it with no body.

Support

The private line to the eesier team — open a request and read the ones already open.

2 endpoints
create_support_request write Open a direct line to the Blue Button support team. This is YOU, the connected agent, talking to the support and engineering team directly — use it to ask a question or report an issue on your own initiative in the background (the end user is NOT notified), or when the user explicitly asks you to contact support. Specify the type (technical, sales, human, or question) and severity (low/medium/high/critical). The team's reply comes back to you — read it later with list_support_requests.

Call it

POST /rest/v1/tools/create_support_request

Parameters

message string required What you want to ask or report to the Blue Button team
type string required Request type: 'technical' (product/technical issue), 'sales' (commercial, billing, plan — the customer wants a sales rep to reach out), 'human' (the customer asks for a human contact, no specific reason), or 'question' (a simple information request you cannot answer yourself)
severity string required How urgent it is: 'low', 'medium', 'high', or 'critical'
list_support_requests read List the customer's support requests — your thread with the Blue Button team — with each request's status, type, severity, and the team's answer (null until they reply). Filter by status: pending, answered, closed, or all (default all).

Call it

POST /rest/v1/tools/list_support_requests GET /rest/v1/call/list_support_requests

Parameters

status string optional default all Status filter: pending, answered, closed, or all (default all)

Incidents

Read the platform incidents that affect this account.

1 endpoints
list_incidents read Lists platform incidents (outages / degradations / instabilities) reported by the Blue Button team, each with its public update timeline. Returns ongoing (active) incidents and recently resolved past ones. Call this when the user asks whether the platform is having problems, or when tool calls are failing unexpectedly — an active incident usually explains the failures.

Call it

POST /rest/v1/tools/list_incidents GET /rest/v1/call/list_incidents

Parameters

scope string optional Which incidents to return: 'active' (ongoing only), 'past' (resolved only) or 'all' (default)
limit integer optional Max past incidents to return (default 10, max 50)

Frequently asked questions

Is this a different product from the MCP server?
No. It is the same server and the same tools, reached over plain HTTP instead of the MCP protocol. Calls are dispatched into the identical code, so results, limits and logging are identical.
Do I need an AI agent to use it?
No. That is the point of this surface. A shell script, a cron job, an n8n or Zapier step, or your own backend can call it with nothing but curl.
Can I use REST and MCP at the same time?
Yes, with the same token. Your agent can hold an MCP session while your backend posts to the REST endpoints; both write to the same account.
What does the HTTP status tell me?
Exactly what happened: 200 succeeded, 403 means your plan does not include that tool, 404 means the tool or the object does not exist, 422 means the tool refused the request, 500 is a permanent fault and 503 is a transient one worth retrying. The body always carries the machine-readable reason.
Is there a rate limit?
There is no per-endpoint rate limit. Some write tools require an active plan and say so in a clear message instead of failing silently.
How do I keep up with new tools?
GET /rest/v1/tools is generated from the running server, so new tools appear the moment they ship. This page is generated from the same registry.

get a token in 2 minutes

Talk to eesier on WhatsApp and ask for MCP — the same token authenticates the REST API.

Talk to eesier

no signup required :)

Hire eesier