Skip to content

Scheduled messages, calendar, tasks, contact details and the auto-reply log for your AI assistant ​

A connected AI assistant can manage the messages you scheduled, work on shared calendar events and tasks, fill in a contact's details, see who opted out, and read the log of automatic replies. This page lists every tool, the permission it needs, what the Free plan includes, and what each refusal means in plain words.

New to connecting an assistant? Start with Connect ChatGPT, Claude or another AI assistant to Spun.

At a glance ​

  • Nothing here sends a message by itself. Changing a scheduled message changes what goes out later, under your approval settings. Calendar invitations and cancellation notices go out only after a person approves them.
  • The assistant works on shared items only. A private scheduled message, a private event or a task in a private project answers not_found, as if it did not exist.
  • Recurring events are changed in Spun. Every calendar change refuses a repeating series.
  • Opted-out contacts stay protected. The assistant can see that a contact opted out, but no tool adds or removes the DONOTSEND label, and a preview of a send to an opted-out contact says it would be blocked.
  • The auto-reply log is read-only. It shows which rule answered which chat and when, never the message text.

Permissions for these tools ​

A key only reaches the tools its permissions allow. A tool the key has no permission for is hidden from the assistant. You tick permissions when you create or edit a key in Settings → AI Assistant (MCP) → Manage API keys.

PermissionScopeWhat it lets the assistant doIn an access level
Schedule Sendsschedule_messageReschedule, cancel and retry scheduled messagesAssistant with sends
Read Calendarread_calendarRead events and check for conflictsAll three
Manage Calendarmanage_calendarCreate and change events, attendees, reminders and status. Asking for invitations to be sent also needs Propose SendsAssistant, no sends and Assistant with sends
Propose Sendsmcp_send_messageTogether with Manage Calendar: ask for invitations to be sent, and for attendees to be told about a cancellationAssistant with sends
Read Tasks & Projectsread_tasksRead tasks, projects and commentsAll three
Manage Tasksmanage_tasksChange tasks, checklists, followers and archive stateAssistant, no sends and Assistant with sends
Create & Update Contactsmcp_manage_contactsCreate contacts and fill in their detailsAssistant, no sends and Assistant with sends (since 10 November 2026)
Read Contactsread_contactsRead contacts, including their opt-out stateAll three
Read Bots & Auto-Reply Rulesread_botsRead the auto-reply logAssistant, no sends and Assistant with sends

Reading the list of scheduled messages needs Read Conversations, which all three access levels include. An app you connected earlier gains nothing by itself. For a key, add the permission to it, or select its access level again. For an app that signed in with your Spun account, an organization manager presses Review and update access under Settings → AI Assistant (MCP) → Connected AI apps. Then let the assistant read the tool list again, as described in What's new for connected AI assistants.

Free plan ​

On the Free plan, every successful tool call counts toward your 100 Connected AI calls a month. Failed or refused calls do not count.

AreaFree planStarter and up
Scheduled messagesList themAlso reschedule, cancel and retry
CalendarReads are coming to the Free plan. Until they reach your account, a Free key gets plan_requiredRead, check conflicts and change events
TasksReads are coming to the Free plan. Until they reach your account, a Free key gets plan_requiredRead and change tasks
Contact details and opt-outRead, create and update, with every new fieldThe same
Auto-reply logNot includedRead

When a tool is on a paid plan, the assistant gets the refusal plan_required with a sentence such as "Scheduled sends are on paid plans." or "Changing calendar events from Connected AI is on the Starter plan and up." Nothing changes. Automatic replies do not run on the Free plan, so there is no log to read there.

Scheduled messages ​

ToolWhat it doesPermission
list_scheduled_messagesLists the messages waiting to go out, from the inbox and from the assistantRead Conversations
reschedule_scheduled_messageMoves a scheduled message to a new time, changes its text, or bothSchedule Sends
cancel_scheduled_messageCancels one scheduled message. Cancelling one that is already cancelled is not an errorSchedule Sends
cancel_scheduled_messagesCancels up to 100 scheduled messages for one chat or one contact in a call, with a result for eachSchedule Sends
retry_scheduled_messageTries a failed inbox message againSchedule Sends

What the assistant can reach. Only the messages list_scheduled_messages shows it. A message someone scheduled privately in the inbox is not visible and cannot be changed. There is no pause tool: cancel the message and schedule it again.

New times. A new time must be at least 60 seconds ahead and no more than 90 days out.

Messages the assistant scheduled itself. A request that is a draft, approved, or held for quiet hours can be changed. Changing the time of an approved request keeps the approval. Changing its text sends it back for approval, and the answer says so. A request already waiting for a person to decide cannot be changed: cancel it and schedule again.

Cancelling many at once. Give either a chat or a contact, not both. When more than 20 messages match, nothing is cancelled until the assistant asks again with confirmation. When more than 100 match, the answer says more remain, and the assistant calls again.

Retrying. Only an inbox message that failed can be retried. A request the assistant scheduled is never retried: schedule it again instead.

RefusalWhat it meansWhat to do
not_foundThere is no such scheduled message, or it is privateCheck the id with list_scheduled_messages
invalid_paramsNo new time or text was given, the time is less than 60 seconds ahead or more than 90 days out, the text is empty, or both a chat and a contact were given for a bulk cancelFix the request
confirm_requiredMore than 20 messages match the bulk cancelCheck with the person, then ask again with confirmation
conflictThe message cannot be changed in its current state. The reason comes with it, see the next tableFollow the reason
plan_requiredChanging scheduled messages is on a paid planSee Pricing

The reason that comes with conflict:

ReasonWhat it meansWhat to do
not_pendingThe message already went out, failed or was cancelled. Its status comes with it. In a bulk cancel, a message in this state gets this code in its own result and the others still go aheadNothing to change, or schedule a new one
managed_by_group_scheduleThe message belongs to a group scheduleChange the schedule in the inbox
not_whatsappIt is a scheduled emailChange it in the inbox
pending_approvalThe request is waiting for a person to decideCancel it and schedule again
no_retry_unconfirmedThe message may already have been delivered, so it is never retriedCheck the chat before sending again
not_retryableOnly a failed inbox message can be retried. A request the assistant scheduled is never retriedSchedule a new message
permanent_failureRetrying would fail the same way. The failure comes with it: the number was rejected, blocked or invalid, the contact has no phone, there is nothing to send to, the line is unknown, the text or status content is empty, or a forward has nothing to forwardFix the target and schedule a new message
(no reason)The request changed while the assistant was editing itRead it again and retry

A failure caused by a passing send error, a line that was not connected, or a trial pause can be retried.

Calendar ​

ToolWhat it doesPermission
check_calendar_conflictsLists the events that overlap a time window, including the occurrences of repeating events. The window can be up to 62 days, and up to 200 events come backRead Calendar
add_event_attendeesAdds up to 50 attendees: team members, or contacts by phone number. Sends nothingManage Calendar
remove_event_attendeeTakes one attendee off the event. Sends nothingManage Calendar
set_event_remindersReplaces the event's reminders, up to 10, each at most 28 days beforeManage Calendar
send_event_invitesAsks for invitations, or an update to people already invited, to go out on WhatsAppManage Calendar and Propose Sends
cancel_calendar_eventCancels an event. Nothing is deleted. It can also ask for attendees to be toldManage Calendar. Telling attendees also needs Propose Sends
restore_calendar_eventBrings back a cancelled event, or one moved to the trash in the last 30 daysManage Calendar

The same permissions cover the tools that were already there: list_calendar_events and get_calendar_event with Read Calendar, create_calendar_event and update_calendar_event with Manage Calendar. When a date range holds more events than the list returns, the answer carries truncated: true and a note to narrow the range or ask for more. Giving update_calendar_event a new start time alone moves the event and keeps its length; a new end time alone changes only the end.

Invitations and cancellation notices need a person. send_event_invites, and cancel_calendar_event when it is asked to tell the attendees, send nothing themselves. They file a request in Spun Tools → Automate → AI Sends, and a person approves or rejects it there. Asking again while the same request is still waiting reuses it. Requests are approved one at a time and cannot be edited before approval; if the event changed after the request was filed, the request no longer applies and a new one is needed. When a cancelled event has nobody to tell, it is cancelled straight away and the answer says so.

Which events. Any shared event, whoever created it. An event the assistant creates is always shared; a private event is made in Spun. Changes are recorded under the key's name and reach Google Calendar the same way as changes made in the app. A repeating series, deleting an event, meeting links and answering an invitation on someone's behalf stay in Spun.

RefusalWhat it meansWhat to do
not_foundThere is no such event, it is private, it left the trash more than 30 days ago, or the attendee is not on the eventCheck the id
recurring_not_supportedThe event is part of a repeating seriesChange it in Spun
invalid_paramsThe request does not fit: more than 50 attendees, someone who is not a member of your team, a hidden number instead of a phone number, a repeated or too many reminders, a window that ends before it starts or is over 62 days, a new event asked for as private, a time zone on an all-day event, an event that would run longer than 14 days, an event that is neither cancelled nor in the trash for a restore, a cancelled event for invitations, or nobody waiting for an invitation (the answer lists who was skipped and why)Fix the request
feature_not_readySending invitations through an approval request is not switched on for this workspace yetA person sends them from the event in Spun
plan_requiredCalendar changes are on the Starter plan and upSee Pricing

Tasks ​

ToolWhat it doesPermission
add_checklist_itemAdds an item to a task's checklist, up to 200 items, 500 characters eachManage Tasks
archive_taskArchives a task. It is hidden, not deletedManage Tasks
unarchive_taskBrings back an archived taskManage Tasks
set_task_followersAdds and removes followers, up to 50 in a call, from your teamManage Tasks
bulk_update_tasksChanges the status or the person responsible on up to 50 tasks, with a result for each. Tasks that fit are changed even when others are refusedManage Tasks

The same permissions cover the tools that were already there: list_tasks, get_task, list_projects and list_task_comments with Read Tasks & Projects, and create_task, update_task, complete_task, create_project, add_task_comment and toggle_checklist_item with Manage Tasks. Task history shows these changes as made by "API key" and the key's name. Deleting a task and inviting a guest to it stay in Spun.

RefusalWhat it meansWhat to do
not_foundThere is no such task, it is in a private project, or there is no active team member with that idCheck the id
invalid_paramsThe checklist is full, a follower is not an active member of your team or is both added and removed, there is nothing to add or remove, more than 50 tasks were given, or no status or person was givenFix the request
plan_requiredTask changes are on the Starter plan and upSee Pricing

Contact details and opt-out ​

update_contact fills in more of the contact card:

FieldWhat it holds
companyThe company, saved the same way as on the contact card
birthdayA full date, or a month and day without a year
addressA postal address
websiteA web address starting with http or https
tags_add, tags_removeTags, up to 50 in a call and 60 characters each
custom_fieldsYour own named details, up to 50 in a call. A name is up to 60 characters and a value up to 500. A contact holds up to 30 of them

Setting a field to empty (null) clears it, and in custom_fields it removes that detail. Notes stay append-only: the assistant can add a note but never change or remove one. The answer lists the fields that were written.

get_contact and search_contacts return these fields too, plus whether the contact opted out and how (today, by the DONOTSEND label). search_contacts and list_conversations can filter by opted out or not.

Opt-out is protected. No tool adds or removes the DONOTSEND label, and update_labels refuses any system label. create_label refuses the reserved names DONOTSEND, SPUN SUPPORT and GROUP ADMIN. A send preview to an opted-out contact answers that it would not be submitted, with the reason contact_opted_out, and queues nothing.

ToolPermission
update_contact, create_contactCreate & Update Contacts
get_contact, search_contactsRead Contacts
list_conversationsRead Conversations
preview_sendPropose Sends
RefusalWhat it meansWhat to do
invalid_paramsA field does not fit: the website is not http or https, a tag or detail is too long, too many were given, the contact would hold more than 30 custom details (the answer says how many it holds), or a label name is reservedFix the request, or remove a detail first
ai_protected_label_immutableThe label is a system label, such as DONOTSEND, that an assistant may not add or removeA person changes it in Spun
not_foundThere is no such contactCheck the id

Auto-reply log ​

ToolWhat it doesPermission
list_auto_reply_logLists when an auto-reply rule answered a chat, newest first: the rule, its current name, the chat and the timeRead Bots & Auto-Reply Rules

The assistant can filter by chat, by rule and by a start time, and read up to 100 entries a call (20 when it does not say). A rule deleted since shows no name. The log never includes the message text, and it only shows chats the key may see: its lines, groups and labels apply.

RefusalWhat it meansWhat to do
invalid_paramsMore than 100 entries were asked for, the start time is not a valid date and time, or the rule id is not a numberFix the request
invalid_cursorThe page marker belongs to another list or another organization, or is damagedStart from the first page
missing_scopeThe key does not have Read Bots & Auto-Reply RulesAdd it to the key in Settings
plan_requiredThe auto-reply log is on a paid planSee Pricing

Refusals that can come from any of these tools ​

The refusals every tool can give, such as missing_scope, tool_not_enabled, plan_limit_reached, kill_switch_engaged, key_inactive and rate_limited, are listed with what to do in Pipeline, Circles, reminders and the contact timeline.

Was this page helpful?

Spun Docs - the documentation for Spun, the WhatsApp team inbox by Spun Life LLC.