check_message_status
ChatGPTCheck the delivery status of a message by the message_id returned from send_message (drip, instant, or voice memo): pending/sent/delivered/failed, scheduled and sent timestamps, the sending device, and any error.
get_bot_status
ChatGPTCheck whether this workspace's AI bot will reply to a contact, and why. Returns the per-contact setting (active / active_always / inactive / snooze), any active snooze, and an effective block computed from the reply engine's own gate chain — so it distinguishes "switched on and replying" from "switched on but no bot is assigned, it is outside the bot's hours, a person took over, or AI is off for the account". Check this before assuming an unanswered conversation means the bot failed.
get_call_transcript
ChatGPTRead one call's full transcript, AI summary and recording link. Use an id from list_call_logs. transcript is null until transcript_status is completed.
get_conversation
ChatGPTFetch message history, oldest-first — for one phone number (phone) or one group thread (group_chat_id, from list_groups; group rows carry from = the sender's phone). Pass exactly one. Each message includes direction, text, media/voice type, delivery status, the actual transport used (imessage vs sms), tapback reactions, and the sending device name. Paginate with limit (max 200) and pass the returned next_cursor as before.
get_opt_out_status
ChatGPTCheck whether a contact phone number has opted out of messaging in this workspace (and when). Check this before initiating outreach to a contact you have not messaged recently.
list_call_logs
ChatGPTList recent calls in the consented workspace, newest first, with each call's AI summary, transcript status and recording link. Pass transcribed_only: true to list only calls that have a transcript, then read one with get_call_transcript.
list_contacts
ChatGPTSearch and list this workspace's contacts. Filter by exact phone, email, tag, created_after, or free-text search across name and phone. Paginate with page / per_page (max 100). Same contract as GET /contacts-api.
list_devices
ChatGPTList this workspace's Mac sender devices with live capacity: online status, today's cold-outreach count vs the daily cap, remaining availability, pending queue depth, and warmup state. Useful before picking an explicit device_id for send_message.
list_groups
ChatGPTList existing group iMessage threads in the consented workspace for read-only inspection. Use a returned id with get_conversation to read that thread.
lookup_imessage
ChatGPTReturn only cached/observed iMessage capability for 1-100 numbers. Public v1 never queues a live device probe; unknown numbers remain unknown.
opt_out
ChatGPTSet a contact's opt-out state. opted_out:true suppresses all future sends (and syncs DND to the connected CRM) — call it immediately when a contact asks to stop. Re-subscribing (opted_out:false) additionally requires confirm_resubscribe:true and must only be done when the contact has explicitly asked to hear from you again. Returns 404 if no contact with that phone exists in the workspace.
send_message
ChatGPTSend text, HTTPS media, or an iMessage effect to exactly one E.164 1:1 recipient in the consented workspace using to. The host must show the exact workspace, recipient, and final content for confirmation immediately before calling.
set_bot_status
ChatGPTControl the AI bot for ONE contact. "inactive" mutes it for this contact; "snooze" pauses it for snooze_minutes (default 60, max 90 days) and is the right call when a human is taking over a conversation; "active" returns it to the bot's own schedule; "active_always" makes it reply 24/7 to this contact, OVERRIDING the business hours configured on the bot, and therefore requires confirm_always_on: true. The state is always persisted, but warnings will say so when an account-level, workspace-level or plan gate means the bot still will not reply.