calendar_book_appointment
ChatGPTBook an appointment on the business's connected calendar. Use calendar_find_slots first and book one of the returned slots. Confirm the booked day/time from the result's startLocal field verbatim. If it fails because the person already has an upcoming appointment (attendee_already_booked), offer to keep, reschedule, or cancel the existing one instead of booking again. Note: with Calendly, this returns a single-use scheduling link to send the customer instead of a confirmed booking.
calendar_find_slots
ChatGPTFind open appointment slots on the business's connected calendar (Google, Microsoft 365, Calendly, Vagaro, Acuity Scheduling, or CalDAV). Returns up to 3 bookable start/end times.
create_agent
ChatGPTCreate a reusable agent: a named instruction template the business runs against documents (e.g. 'extract line items from invoices as a table'). Agent counts are capped per plan tier.
create_contact
ChatGPTAdd a new contact to the business's CRM. Fires the business's contact_created automations, same as adding from the dashboard.
create_custom_table
ChatGPTBuild a new table for this business. The name is the plural of what is being tracked (Properties, Vehicles). Each column has a label and a kind: text, long_text, number, date, checkbox, select, or multi_select; a select or multi_select needs at least two options. Set link_to_contacts only when every row is about one person in the Contacts list. Managers and owners only.
create_custom_table_row
ChatGPTAdd one row to a table the business built. The table name must be EXACT, never a partial match. Each value is sent as text and converted to the column's kind; a value that does not fit is refused with the reason. Optionally attach the row to a contact by phone, which requires that contact to already exist.
create_employee
ChatGPTAdd someone to the employee roster so lead-routing automations can offer them leads. Read the number back to the owner after adding: a wrong digit sends their leads to a stranger.
create_flow
ChatGPTCreate a new AiFlow automation. The definition is validated (call get_flow_schema for the format); invalid definitions are refused with the exact issues. New flows default to disabled unless enabled is true.
delete_agent
ChatGPTDelete an agent (its past run history is removed with it).
delete_custom_table
ChatGPTDelete a whole table the business built. This takes two calls: the first without confirm deletes nothing and returns how many rows it holds, so you can tell the person that number and wait for a clear yes; only then call again with confirm true. The table can be brought back for 30 days. Managers and owners only.
delete_custom_table_row
ChatGPTDelete one row. This takes two calls: the first without confirm deletes nothing and returns what the row says, so you can read it back to the person and wait for a clear yes; only then call again with confirm true. Never guess which row, read it first and pass the id.
fetch
ChatGPTRead the full record behind an id returned by search: a customer's profile and notes, a whole text conversation, or a call's summary and transcript.
get_business
ChatGPTGet one business's profile: name, plan tier, status, and timezone.
get_business_knowledge
ChatGPTRead the coworker's identity document (services, pricing, greetings, policies) split into its markdown sections, each with a stable index. Call this BEFORE update_business_knowledge so you edit the right section with its real current text. Owner only.
get_contact
ChatGPTGet one contact's full profile: name, email, tags, owner, birthday, pinned notes, and the AI's rolling relationship summary. owner_employee_id is who CLAIMED the contact; when it is null and implicit_owner_employee_id is set, the business is a one-person team and that member holds the contact by default. Never copy an implicit owner into update_contact: it is the roster's answer, not a stored claim.
get_custom_table_rows
ChatGPTRead rows from one of the business's own tables. Optionally filter with free text matched against every cell, or by the phone number of the contact a row belongs to. Returns each row's id plus a one-line summary; the id is what you pass when changing or deleting that row.
get_flow
ChatGPTGet one AiFlow's full definition (trigger, steps, settings).
get_flow_schema
ChatGPTThe AiFlow definition format as JSON Schema, plus the step-type and trigger-channel vocabulary. Read this before authoring or editing a flow definition for create_flow / update_flow.
get_notification_preferences
ChatGPTRead the business's notification/alert toggle settings (which alerts are on or off, and whether an alert phone/email is configured). Managers and owners only.
get_sms_thread
ChatGPTRead the SMS/RCS conversation with one contact, oldest to newest, inbound texts, the AI coworker's replies, and workflow/manual sends.
list_agents
ChatGPTList the business's agents, reusable document-processing task templates (instructions run against uploaded files, manually or from run_agent flow steps).
list_businesses
ChatGPTList every New Coworker business this account can access, with the caller's role on each (owner, manager, or staff). Call this first when other tools report the account has multiple businesses.
list_call_transcripts
ChatGPTList the business's recent phone calls (AI-handled and human-forwarded), newest first, with status, AI summary, and sentiment when available. Pass a row's fetch_id to the fetch tool to read that call's full transcript.
list_custom_tables
ChatGPTList the tables this business built for itself, with each table's columns, the kind of value each column holds, its choices when it is a choice column, and how many rows it has. Call this before any other custom-table tool so you use real table and column names.
list_employees
ChatGPTList the business's employee roster: names, numbers, whether each is active, their working hours, and how each one receives leads (rotation, named group offers, whole-team offers).
list_flow_versions
ChatGPTList the recorded earlier versions of one AiFlow, newest first. Each entry is the state the automation was in BEFORE one edit, with when that edit happened and which surface made it (dashboard, ai_edit_sms, mcp, ...). Use this to answer "what changed and when" before restoring anything.
list_flows
ChatGPTList the business's AiFlows (automations): name, enabled state, trigger channel, and last-run time. Use get_flow for a flow's full definition.
list_outreach_queue
ChatGPTList the cold-outreach drafts waiting for review on Dashboard → Marketing (Drafts to review): prospect name, email, city, subject, the editable body paragraphs (without the auto-appended sign-off and compliance footer), and each draft's include_booking_link override. Also reports the prospecting mode (in auto mode drafts are sent by the sweep without a human pressing Send) and booking_link_on_first_touch, the business default for whether a first email's closing line carries the booking link (normally false: the first email asks for a reply and the follow-up carries the link).
list_recent_events
ChatGPTRecent activity events for the business, newest first. Event types: sms.inbound, sms.outbound, call.completed, email.inbound. Payloads match the business's outbound webhook format.
list_system_logs
ChatGPTList operational system logs (the same rows as the admin System Logs viewer and the System Errors: All Clients feed), newest first. Not bounce-only: pass event (substring on the event name, for example email_delivery_failed) or search (escaped LIKE across event and message, the same filter the admin log search uses) to narrow. Optional level or minLevel (debug/info/warn/error), source, since (ISO), before (keyset cursor created_at|id, or a plain ISO timestamp), and limit. HQ owner of the platform HQ tenant may omit business_id for fleet-wide rows including other tenants and platform (null business_id) rows; any other seat only sees a business they can access. Returns email and domain when the payload or message carries them.
list_tasks
ChatGPTThe business's leads in motion: contacts with active AiFlow workflow runs (with each run's flow and status) plus lead-state tagged contacts, the same data behind the dashboard Task Center.
place_call
ChatGPTPlace a phone call from the business's number. You write a short brief. The coworker dials and speaks that brief in its own voice. You do not speak on the line, and this does not return the live audio. When the call ends, the transcript is in call history (list_call_transcripts). A text summary goes to the business's alert phone. Standard plan and up. Managers and owners only. The first call creates an outbound flow named "Assistant calls" so later calls reuse it.
restore_custom_table
ChatGPTBring back a table that was deleted, with everything that was in it. Use it when the person changes their mind about a deletion. Managers and owners only.
restore_flow_version
ChatGPTPut an earlier version of an AiFlow back. With no version_id this undoes the most recent edit, which is the usual case; pass a version_id from list_flow_versions to go further back. Restores the definition and the name, and deliberately does NOT change whether the automation is enabled. The restore is itself recorded, so it can be undone in turn.
run_flow
ChatGPTRun one of the business's ENABLED automations right now (a manual run), the same as pressing Run now in the dashboard. Use this to hand work to a flow directly, e.g. give a new lead's details to the owner's lead-intake automation. input is passed to the run as its triggering text, so include everything the flow needs to extract. Unlike trigger_flow (which only reaches webhook-triggered flows), this starts a flow by name or id whatever its trigger, except voice flows, which only run on a live call.
search
ChatGPTFind a customer and their text conversation by name or phone number. Returns ids to pass to fetch for the full record. Searches every business this account can access unless business_id is given.
search_contacts
ChatGPTSearch the business's contacts (CRM) by name or phone substring. Returns basic profile info per contact; use get_contact for the full profile including notes and AI memory.
send_sms
ChatGPTSend a text message to a customer from the business's phone number. Counts against the business's monthly SMS quota exactly like a dashboard send; the message appears in the owner's Text history. If the message mentions a clock time, always include the timezone (e.g. "1:00 PM Eastern", never a bare "1:00 PM"), and when the recipient is known to be in a different timezone, give the time in THEIR timezone too.
send_whatsapp
ChatGPTSend a WhatsApp message to a customer from the business's connected WhatsApp Business number. Inside the recipient's 24-hour conversation window the text goes out as written; outside it, an approved template carries the message (Meta bills the business per template message). Fails with guidance when WhatsApp isn't connected. If the message mentions a clock time, always include the timezone (e.g. "1:00 PM Eastern", never a bare "1:00 PM"), and when the recipient is known to be in a different timezone, give the time in THEIR timezone too.
set_flow_enabled
ChatGPTTurn one of the business's AiFlow automations on or off. Enabling makes the flow live immediately, so it can start messaging customers the next time its trigger fires; disabling stops new runs without deleting the flow, its steps, or its history.
trigger_flow
ChatGPTSend an event to the business's webhook-triggered AiFlows: every enabled webhook flow whose conditions match the payload gets a queued run (e.g. forward a new lead into the flow engine). Idempotent per event_id.
update_agent
ChatGPTUpdate an agent's name, instructions, output format, or enabled state.
update_business_knowledge
ChatGPTReplace ONE section of the coworker's identity document, or append one new heading-led section. Whole-document rewrites are refused by design: call get_business_knowledge first, then target the section by heading or index. mode "replace" keeps the section's heading line and swaps its body; mode "append_section" adds new content that must start with its own markdown heading. Content is capped at 8000 characters per edit. The live coworker picks the change up right away. Owner only.
update_business_profile
ChatGPTUpdate the business's weekly hours and/or its IANA timezone. Days you omit stay unchanged; pass null for a day to mark it closed. The live coworker picks the change up right away (prompt grounding refresh + vault sync). This tool can NOT change the business phone number or the owner's phone number; if asked to change a phone number, do not call this tool, direct the owner to Settings or support instead.
update_contact
ChatGPTUpdate an existing contact: name, email, pinned notes, classification, lead-state tags (pipeline stages are tags), owning team member, or birthday. Tag and owner changes fire the same automations as dashboard edits.
update_coworker_tool_settings
ChatGPTEnable or disable one coworker tool on specific channels (surfaces): dashboard, voice, sms, webchat, email, slack. A policy applies ONLY to the channels you list, disabling appointment cancellation on sms still leaves voice able to cancel, so list every channel the owner means. Use the exact tool_key from Settings → Coworker tools (e.g. "calendar_cancel_appointment", "send_sms"); an unknown key is refused with the valid keys listed.
update_custom_table_row
ChatGPTChange cells on one existing row. Read the row first with get_custom_table_rows and pass the id it returned. Only the cells sent are changed, and sending a value of empty text clears one. The table name must be EXACT.
update_employee
ChatGPTChange an existing roster member: their name, number, email, working hours, whether they are active, and how they receive leads. Deactivating someone or turning off lead rotation immediately redirects live leads to other people, so confirm with the owner first.
update_flow
ChatGPTUpdate an AiFlow's name and/or definition. A supplied definition REPLACES the whole definition and is validated like create_flow (fetch the current one with get_flow first).
update_notification_preferences
ChatGPTTurn the business's notification/alert toggles on or off (e.g. customer_reply_alerts to text the owner the moment a client texts the business). Managers and owners only. Booleans only, the alert phone number and email cannot be changed here (dashboard Settings → Notifications). Pass only the toggles the user asked to change.
update_outreach_draft
ChatGPTChange a waiting outreach draft on Dashboard → Marketing: a new subject and/or new body paragraphs (same as the dashboard's Save draft; the closing line, sign-off, and compliance footer are re-appended automatically), and/or include_booking_link to add or remove the booking link from this draft's closing line (for example true once a prospect has replied and should be offered the calendar); or skip=true to retire it (same as the dashboard's Skip: the prospect is never rediscovered). Only a draft that has not been sent can be changed.
upsert_outreach_prospect
ChatGPTAdd a cold-outreach prospect and its draft to Dashboard → Marketing (Drafts to review) for the owner to send, instead of a Gmail draft. Supply the prospect (name, email, city) and the email's subject and body PARAGRAPHS only: the closing line, sign-off, unsubscribe link, and postal address are appended automatically at save and send, and links stay clean. By default the closing line is a soft ask to reply and does NOT carry the booking link (the follow-up does); pass include_booking_link=true to offer the calendar in this prospect's first email. Upsert on the prospect's domain and email: a new prospect is added; one already waiting in the queue (or discovered but not yet drafted) has its draft and details replaced; one already sent, replied, skipped, or unsubscribed is refused. In auto prospecting mode the draft is sent by the sweep without further review, so check list_outreach_queue.mode first.