# Spoki — MCP server on mcp.ai > Connect your Spoki account and use 57 tools for marketing automation straight from your AI agent. Connect with your own API key. Spoki is an Italian platform that integrates WhatsApp's official APIs to automate communication for marketing, sales, customer support, and payments. By: mcp.ai · official Page: https://mcp.ai/spoki ## Connect (MCP protocol) Remote MCP endpoint (HTTP, streamable): https://api.mcp.ai/p_spoki?ms=1787291520000 Add it as a custom/remote MCP connector, then authenticate when prompted. ## REST API (no MCP client required) Every tool is also a REST endpoint, authed with a workspace API key. Discover: GET https://api.mcp.ai/api/spoki/_endpoints # public; lists every endpoint Call: POST https://api.mcp.ai/api/spoki/ Authorization: Bearer sk_live_… # create one at https://mcp.ai/settings/api-keys Content-Type: application/json Body: { …args } → { "ok": true, "tool": "", "result": { … } } ## Developer docs How to use (MCP or REST), markdown: https://mcp.ai/spoki/skill.md Postman collection (v2.1): https://mcp.ai/spoki/postman.json ## Tools - spoki_add_contact_operator(id: string, email: string) — Tool to assign an operator to a contact's chat. Use this when you need to assign a team member to handle a specific contact's conversation. The operator must have been invited to the account first. Ra - spoki_add_service_user(name: string, role: string) — Adds a new service user with a specific role to your Spoki account. Use this when you need to create service accounts for automation, API integrations, or specialized operator roles. Rate limit: 10 re - spoki_check_role_private_key(role_id: integer) — Tool to check if a service user role has a private key configured. Use when you need to verify key status for a role. Rate limit: 10 requests per minute. - spoki_clone_template(template_id: integer) — Tool to create a duplicate copy of an existing template. Clone starts in DRAFT status. Use when you need to duplicate a template by ID. - spoki_create_account_onboarding_link(account_id: integer) — Tool to create an onboarding link for a specific Spoki account. Use when you need to generate a setup link to help users configure their account. - spoki_create_custom_field(code: string, label: string, example: string, field_type: integer) — Creates a new custom field in Spoki for storing additional contact data. Use this action when you need to define extra data points that can be stored on contacts beyond the standard fields. Custom fie - spoki_create_list(name: string) — Creates a new contact list in Spoki for organizing and managing contacts. Use this action when you need to create a new list for grouping contacts by campaigns, segments, or any other organizational c - spoki_create_media(title: string, format_type: string, content_type: string, external_url: string) — Tool to create a new media file entry in Spoki. Use when you need to register external media files (images, videos, documents) that can be used in campaigns, messages, or other Spoki features. Rate li - spoki_create_or_update_contact(email?: string, phone: string, language?: string, last_name?: string, first_name?: string, custom_fields?: object) — Creates a new contact or updates an existing contact in Spoki using the phone number as the unique identifier. This action performs an "upsert" operation: - If a contact with the provided phone number - spoki_create_template(name: string, category: string, subcategory?: string, templatelocalization_set: object[]) — Creates a new WhatsApp message template with localizations, buttons, and media headers. Use when you need to define a reusable template for marketing campaigns, transactional notifications, or authent - spoki_create_ticket(title: string, status: string, priority: string, reference?: string, description?: string, contact_phone: string) — Tool to create a new support ticket in Spoki. Use when you need to create a ticket for tracking customer support issues or requests. Rate limit: 120 requests per minute. - spoki_delete_contact(id: integer) — Tool to delete a specific contact. Use after confirming the contact ID. Example prompt: "Delete contact with ID 1091234." - spoki_delete_custom_field(id: integer) — Tool to delete a specific custom field. Cannot delete if the custom field is used in automations. Rate limit: 5 requests per minute. - spoki_delete_list(id: integer) — Tool to delete a specific list. Use after confirming the list ID. Rate limit: 5 requests per minute. - spoki_delete_media(id: string) — Tool to delete a specific media file. Use after confirming the media ID. Rate limit: 60 requests per minute. - spoki_delete_role(id: string) — Tool to delete a specific role. Use after confirming the role ID. Cannot delete the sole admin role. Rate limit: 5 requests per minute. - spoki_delete_template(id: integer, force_delete?: boolean) — Tool to delete a WhatsApp template. Use force_delete=true for templates used in automations. Rate limit: 10/min. - spoki_delete_ticket(id: integer) — Tool to delete a specific ticket. Use after confirming the ticket ID. Rate limit: 60 requests per minute. - spoki_generate_role_private_key(id: string) — Tool to generate a private key for a service user role. Use when you need to create API credentials for service users. Rate limit: 10 requests per minute. - spoki_get_account_current_report(account_id: integer) — Tool to get the current report for a specified account. Use when you need up-to-date metrics on messages and conversations for an account. Note: result is cached for 30 minutes. - spoki_list_accounts(page?: integer, per_page?: integer) — Tool to retrieve a list of Spoki WhatsApp Business accounts with their details. Use when you need to view all accounts accessible to the authenticated user, including their credit balances, status, an - spoki_list_agencies() — Tool to list all agencies accessible to the user. Use when you need to retrieve all agencies for the authenticated account. - spoki_list_automations(search?: string, is_active?: boolean, webhook_platform?: string) — Tool to list, search, and filter automations. Use after authenticating to retrieve available automations and apply optional search or platform filters. - spoki_list_campaigns(page?: integer, per_page?: integer, scheduled_datetime_gte?: string, scheduled_datetime_lte?: string) — Tool to list, search, and filter campaigns. Use when you need to retrieve campaigns optionally filtered by scheduled datetime. - spoki_list_contacts(tag?: integer, page?: integer, email?: string, phone?: string, search?: string, language?: string, per_page?: integer, last_name?: string, first_name?: string, is_blocked?: boolean) — Tool to list, search, and filter contacts. Use when you need to retrieve contacts with optional search and filters. - spoki_list_custom_fields(code?: string, label?: string) — Tool to list, search, and filter custom fields. Use when you need to fetch available custom-field definitions by label or code. - spoki_list_lists(page?: integer, search?: string, per_page?: integer) — Tool to list, search, and filter contact lists. Use when you need to retrieve all lists or find specific lists by name. Rate limit: 5 requests per minute. - spoki_list_media(page?: integer, per_page?: integer) — Tool to list media files. Returns all media files with their details including title, content type, format, and URLs. Use when you need to retrieve or browse available media files in the account. - spoki_list_partners() — List all partners accessible to the authenticated account. Partners represent business partners or affiliates associated with your Spoki account. - spoki_list_reports(page?: integer, account?: integer, per_page?: integer, granularity?: string, period_start?: string) — Tool to list, search, and filter usage reports. Use when you need to retrieve historical usage metrics with optional filters. Note: results are cached for 30 minutes. - spoki_list_roles() — Tool to list user roles in the system. Use when you need to retrieve all role assignments for users in the account. - spoki_list_tags() — Lists all tags in the account. Returns tag details including id, name, color, and order. Use this when you need to view all available tags or find a specific tag by name. - spoki_list_templates(search?: string) — Tool to list, search, and filter WhatsApp templates. Use when you need to retrieve available templates, optionally filtering by keywords. - spoki_list_tickets(page?: integer, order?: string, sort_by?: string, per_page?: integer) — Tool to list, search, and filter tickets. Use when you need to retrieve tickets with optional pagination and filters. - spoki_remove_all_list_contacts(id: integer) — Tool to remove all contacts from a list. Use when you need to clear all contacts from a specific list. Rate limit: 5 requests per minute. - spoki_remove_contact_operator(id: string, email: string) — Tool to remove an operator from a contact's chat. Use when you need to unassign an operator from handling a specific contact's conversations. Rate limit: 5 requests per minute. - spoki_remove_list_contacts(list_id: integer, contacts: integer[]) — Tool to remove specific contacts from a list. Use when you need to unsubscribe or remove multiple contacts from a particular list. Rate limit: 5 requests per minute. - spoki_resend_invitation(id: integer) — Tool to resend an invitation email. Use when you need to resend an existing invitation. Rate limit: 5 requests per minute. - spoki_retrieve_account(account_id: integer) — Retrieves detailed information about a specific Spoki WhatsApp Business account. Returns comprehensive account details including credit balance, verification status, messaging limits, quality metrics, - spoki_retrieve_automation(id: integer) — Tool to retrieve details of a specific automation. Use when you need name, first message, webhooks and timestamps of an existing automation. - spoki_retrieve_contact(contact_id: integer) — Tool to retrieve details of a specific contact. Use when you have a contact ID and need full profile details. - spoki_retrieve_custom_field(custom_field_id: integer) — Tool to retrieve details of a specific custom field. Use when you have a field ID and need its metadata before using it in automations. - spoki_retrieve_list(list_id: integer) — Tool to retrieve details of a specific list by ID. Use when you need list metadata and contact count. Rate limit: 5 requests per minute. - spoki_retrieve_media(id: string) — Tool to retrieve details of a specific media file by ID. Use when you need media file metadata. - spoki_retrieve_role(id: string) — Tool to retrieve details of a specific role by ID. Use when you need role information for a given role ID. Rate limit: 5 requests per minute. - spoki_retrieve_tag(id: integer) — Tool to retrieve details of a specific tag. Use when you need tag metadata by ID. - spoki_retrieve_template(template_id: integer) — Tool to retrieve details of a specific template. Use after obtaining a template ID. - spoki_revert_template_to_draft(template_id: integer) — Tool to revert a WhatsApp template back to DRAFT status, removing it from WhatsApp. Use when you need to unpublish a template and return it to draft mode for editing. - spoki_sync_contacts_bulk(contacts: object[]) — Tool to bulk sync (create or update) multiple contacts in a single request. Rate limit: 1 request per minute. This action performs bulk "upsert" operations: - If a contact with the provided phone numb - spoki_sync_list_contacts(list_id: string, contacts: object[]) — Tool to create or update contacts and add them to a specific list in Spoki. Rate limit: 1 request per minute. This action performs bulk "upsert" operations and list assignment: - If a contact with the - spoki_update_campaign(id: string, name?: string, status?: string, scheduled_datetime?: string) — Tool to update an existing campaign's name, status, or scheduled time. Use when you need to modify campaign details after creation. Rate limited to 5 requests per minute. - spoki_update_contact(id: string, email?: string, phone?: string, language?: string, last_name?: string, first_name?: string, custom_fields?: object) — Tool to update an existing contact in Spoki. Use when you need to modify contact information for a specific contact ID. Only the fields provided will be updated; other fields remain unchanged. - spoki_update_custom_field(label: string, custom_field_id: integer) — Tool to update a specific custom field. Use after retrieving a field to change its label. - spoki_update_invitation_role(id: string, role: string) — Tool to update the role of a pending invitation. Use when you need to change the role assigned to an existing invitation. Rate limit: 5 requests per minute. - spoki_update_media(id: integer, title: string) — Tool to update an existing media file in Spoki. Use when you need to modify media file details like title. Rate limit: 120 requests per minute. - spoki_update_role(id: string, role: string) — Tool to update a user's role. Use when you need to change a user's role assignment. Rate limit: 10 requests per minute. - spoki_update_template(id: integer, name?: string, category?: string, subcategory?: string, templatelocalization_set?: object[]) — Tool to update an existing WhatsApp template in Spoki. Use when you need to modify template name, category, subcategory, or localization details. Rate limit: 10 requests per minute. ## Example prompts - "What can I do in Spoki?" - "Show me a summary of my Spoki account" ## Links Docs: https://mcp.ai/docs/mcps/spoki Website: https://mcp.ai/mcps/spoki