REST API | eesier
REST API

every tool, over plain HTTP

No SDK, no MCP client, no protocol to learn. One endpoint, one bearer token, and curl. The same tools your AI agent uses — reachable from a script, a cron job, or any no-code platform.

202 endpoints 33 groups
Prefer to connect an AI agent? See the MCP reference

your first call

Two minutes, one token, no dependencies.

1. Who am I?

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

Read-only tools can be called straight from a URL.

2. Search your leads

curl -X POST https://mcp.eesier.com/api/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.

3. Discover every tool

curl https://mcp.eesier.com/api/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 /api/v1/tools/{tool_name} Invoke a tool. The body is a JSON object of named parameters.
GET /api/v1/call/{tool_name} Invoke a read-only tool from the query string. Any other tool returns 405.
GET /api/v1/tools The full catalog: { version, server_version, tool_count, tools[] }.
GET /api/v1/tools/{tool_name} One tool's schema — the same object the catalog lists.

authentication

The same token the MCP surface uses. Every route requires it, including discovery.

Base URL https://mcp.eesier.com
Header Authorization: Bearer <token>
Getting a token eesier console → Account → External Agents (MCP) → Generate Token. The same token works for REST and MCP; revoking it kills both.
Scope A token acts as your account and nothing more — the same data and the same limits you have in the console.

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"
}

responses

The HTTP status tells you whether the call was accepted, never whether the answer was good news.

Tool outcomes are always 200

If the call reached the tool, you get 200 and the tool's own JSON, byte for byte — success, a business-level {"error": ...}, or a plan-gate refusal alike. That keeps retry-on-5xx logic from hammering a call that will never succeed. Read the body, not just the status.

Everything else is transport-level

Status When you get it
200 The tool ran. Its raw JSON is the body — including business-level errors.
400 The arguments do not fit: 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.
404 No tool by that name. The body suggests the nearest real one.
405 Wrong verb — most often a GET invoke on a tool that is not read-only.
500 The dispatcher itself failed, outside the tool body. This is our fault, not your request's.

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"
}
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

Every parameter is a scalar, and coercion is invariant-culture everywhere. Anything lossy is refused rather than 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

All 202 tools, grouped by what they touch. 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 /api/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 /api/v1/tools/list_notification_history GET /api/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 /api/v1/tools/list_pending_notifications GET /api/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 /api/v1/tools/whoami GET /api/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 /api/v1/tools/get_lead GET /api/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 /api/v1/tools/list_lead_emails GET /api/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 /api/v1/tools/list_pending_review GET /api/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 /api/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 /api/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 /api/v1/tools/search_leads GET /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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...). The answer is stored in the business FAQ so EVERY future lead gets it, and if the asking lead is still in the pipeline the answer is relayed on the next touch. Pass open_question_id when known; otherwise pass question_text.

Call it

POST /api/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
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 /api/v1/tools/list_lead_lifecycle_events GET /api/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 Stop the periodic 'how did it go with this lead?' check-in questions for a specific lead, when the customer asks not to be reminded about it anymore. Does NOT change the lead's status or pipeline state.

Call it

POST /api/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
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 /api/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 /api/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 /api/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 /api/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 /api/v1/tools/list_lead_meetings GET /api/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 /api/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 /api/v1/tools/get_lead_timing_intelligence GET /api/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 /api/v1/tools/get_lead_conversation GET /api/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 /api/v1/tools/list_lead_whatsapp_messages GET /api/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 /api/v1/tools/search_lead_conversations GET /api/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 /api/v1/tools/search_my_agent_conversation GET /api/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)

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 /api/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 /api/v1/tools/compare_campaigns GET /api/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 /api/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).
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 /api/v1/tools/get_campaign GET /api/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 /api/v1/tools/list_campaigns GET /api/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 /api/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 /api/v1/tools/pause_campaign

Parameters

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

Call it

POST /api/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 /api/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 /api/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 /api/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).
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 /api/v1/tools/get_prospecting_config GET /api/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 /api/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 /api/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 /api/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 /api/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 /api/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.
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 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 /api/v1/tools/list_prospecting_files GET /api/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 /api/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 /api/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 /api/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 /api/v1/tools/estimate_lead_volume GET /api/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/Lusha data. Optionally filter by campaign.

Call it

POST /api/v1/tools/get_funnel_by_industry GET /api/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 /api/v1/tools/get_funnel_timeline GET /api/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 /api/v1/tools/get_message_performance GET /api/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 /api/v1/tools/get_metrics_by_state_and_industry GET /api/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 /api/v1/tools/get_prospecting_report GET /api/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 /api/v1/tools/get_whatsapp_message_performance GET /api/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 /api/v1/tools/list_prospecting_optimizations GET /api/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 /api/v1/tools/what_changed_since GET /api/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.

7 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 /api/v1/tools/get_campaign_voice_calling_active GET /api/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 /api/v1/tools/get_voice_call GET /api/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 /api/v1/tools/get_voice_calling_active GET /api/v1/call/get_voice_calling_active

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 /api/v1/tools/list_voice_calls GET /api/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 /api/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 /api/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 /api/v1/tools/set_voice_calling_active

Parameters

active boolean required True to enable, false to disable

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 /api/v1/tools/get_whatsapp_line GET /api/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 /api/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 BRL. 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 /api/v1/tools/set_whatsapp_daily_cost_cap

Parameters

daily_cap_brl number required Maximum daily WhatsApp spend in BRL (e.g. 20.00). 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. Square JPG/PNG, at least 192x192, under 5MB. The line must already be live.

Call it

POST /api/v1/tools/set_whatsapp_line_profile_picture

Parameters

image_url string optional Public URL of the image (square JPG/PNG, >=192x192, <=5MB)
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 BRL. 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 /api/v1/tools/set_whatsapp_monthly_cost_cap

Parameters

monthly_cap_brl number required Maximum monthly WhatsApp spend in BRL (e.g. 150.00). 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 /api/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 /api/v1/tools/get_business GET /api/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 /api/v1/tools/get_business_assessment GET /api/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 /api/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 /api/v1/tools/list_business_files GET /api/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 /api/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 /api/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 /api/v1/tools/list_business_faq GET /api/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) — every answer improves all future lead conversations.

Call it

POST /api/v1/tools/list_open_lead_questions GET /api/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 /api/v1/tools/generate_cnae_exclusion_suggestion GET /api/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 /api/v1/tools/generate_cnae_suggestion GET /api/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 /api/v1/tools/generate_icp_suggestion GET /api/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 /api/v1/tools/lookup_city GET /api/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 /api/v1/tools/lookup_cnae GET /api/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 /api/v1/tools/search_knowledge GET /api/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 /api/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 /api/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 /api/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 /api/v1/tools/list_blacklisted_emails GET /api/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 /api/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 /api/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 /api/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 /api/v1/tools/get_email_settings GET /api/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 /api/v1/tools/get_general_settings GET /api/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 /api/v1/tools/get_notification_emails GET /api/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 /api/v1/tools/lookup_municipality_code GET /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/v1/tools/list_members GET /api/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 /api/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 /api/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 /api/v1/tools/list_mcp_tokens GET /api/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 /api/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 /api/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 /api/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), 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 /api/v1/tools/list_account_events GET /api/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
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 /api/v1/tools/list_webhook_subscriptions GET /api/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 /api/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, Lusha and RD Station links.

10 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). 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 /api/v1/tools/connect_crm

Parameters

crm_name string required CRM name: Pipedrive, RdStation, HubSpot, Odoo, Omie, Agendor, ExactSales, Piperun, SystemeIo, Venttra
api_key string optional API key (Pipedrive, Odoo, SystemeIo)
api_token string optional API token (Agendor, ExactSales, Piperun, Venttra)
access_token string optional Access token (HubSpot)
url string optional URL (Odoo)
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 /api/v1/tools/disconnect_crm

Parameters

crm_name string required CRM name: Pipedrive, RdStation, HubSpot, Odoo, Omie, Agendor, ExactSales, Piperun, SystemeIo, Venttra
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 /api/v1/tools/get_crm_sync_status GET /api/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 /api/v1/tools/list_crm_integrations GET /api/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 /api/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 /api/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_lusha_integration write Connect or disconnect the Lusha lead-source integration. Requires an active paid plan. action: 'connect' (needs api_key) or 'disconnect'. The api_key is live-verified against Lusha before being stored — a bad key returns an error and stores nothing.

Call it

POST /api/v1/tools/manage_lusha_integration

Parameters

action string required Action: connect or disconnect
api_key string optional Lusha API key (required for connect)
list_id string optional Lusha list id to sync leads from (optional)
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 /api/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 /api/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 /api/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 /api/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 /api/v1/tools/get_calendly_connection_url GET /api/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 /api/v1/tools/get_calendly_event GET /api/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 /api/v1/tools/get_calendly_status GET /api/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 /api/v1/tools/list_calendly_event_types GET /api/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 /api/v1/tools/list_calendly_upcoming_events GET /api/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 /api/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 /api/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 /api/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 /api/v1/tools/get_google_connection_url GET /api/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 /api/v1/tools/list_calendar_events GET /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/v1/tools/diagnose_google_ads_campaign GET /api/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 /api/v1/tools/get_google_ads_audience_status GET /api/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 /api/v1/tools/get_google_ads_billing GET /api/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 /api/v1/tools/get_google_ads_campaign GET /api/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 /api/v1/tools/get_google_ads_keyword_ideas GET /api/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 /api/v1/tools/get_google_ads_performance_report GET /api/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 /api/v1/tools/list_google_ads_ad_groups GET /api/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 /api/v1/tools/list_google_ads_campaigns GET /api/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 /api/v1/tools/list_google_ads_keywords GET /api/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 /api/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 /api/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 /api/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 /api/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 /api/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.

17 endpoints
archive_website destructive Archive (remove) a website.

Call it

POST /api/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 /api/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 /api/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 /api/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)
crawl_website read Fetch the raw HTML of a webpage, split into 1000-character chunks navigable by index.

Call it

POST /api/v1/tools/crawl_website GET /api/v1/call/crawl_website

Parameters

url string required URL of the webpage to fetch
chunk_index integer optional default 0 Index of the chunk to return (starting at 0)
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 /api/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 /api/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 /api/v1/tools/get_website GET /api/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 /api/v1/tools/get_website_code GET /api/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 /api/v1/tools/get_website_settings GET /api/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 /api/v1/tools/list_website_code GET /api/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 /api/v1/tools/list_website_snapshots GET /api/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 /api/v1/tools/list_websites GET /api/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 /api/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 /api/v1/tools/restore_website_snapshot

Parameters

website_code_id integer required Id of the website code entry to restore
screenshot_website write Take a screenshot of any public URL and analyze it with AI. Saves the screenshot as a customer file and returns the analysis + public image URL. Optionally emails the screenshot.

Call it

POST /api/v1/tools/screenshot_website

Parameters

url string required Public URL to capture
prompt string required Prompt/instructions for the AI analysis
viewport_width integer optional default 1366 Viewport width in px (default 1366)
viewport_height integer optional default 768 Viewport height in px (default 768)
send_to_email string optional Optional email address to send the screenshot to
screenshot_file_name string optional Optional one-word file name for the screenshot
set_website_settings write Update a website's settings. Pass only the fields you want to change.

Call it

POST /api/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 /api/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 /api/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 /api/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 /api/v1/tools/list_lead_capture_pages GET /api/v1/call/list_lead_capture_pages

Parameters

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

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 /api/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 /api/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 /api/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 /api/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 /api/v1/tools/get_drawing GET /api/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 /api/v1/tools/get_image GET /api/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 /api/v1/tools/get_video GET /api/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 /api/v1/tools/list_drawings GET /api/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 /api/v1/tools/list_images GET /api/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 /api/v1/tools/list_videos GET /api/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 /api/v1/tools/list_online_searches GET /api/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 /api/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 /api/v1/tools/list_support_requests GET /api/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 /api/v1/tools/list_incidents GET /api/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.
Why did my call return 200 with an error inside?
Because the tool ran and answered. The status says the request was accepted; the body says what happened. Always read the body.
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 /api/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