# Spoki — how to use (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.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_spoki?ms=1787291520000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `spoki_add_contact_operator`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/spoki`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/spoki/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/spoki/add/contact/operator` — 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
  - body: { id: string, email: string }
- `POST https://api.mcp.ai/api/spoki/add/service/user` — 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
  - body: { name: string, role: string }
- `POST https://api.mcp.ai/api/spoki/check/role/private/key` — 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.
  - body: { role_id: integer }
- `POST https://api.mcp.ai/api/spoki/clone/template` — 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.
  - body: { template_id: integer }
- `POST https://api.mcp.ai/api/spoki/create/account/onboarding/link` — 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.
  - body: { account_id: integer }
- `POST https://api.mcp.ai/api/spoki/create/custom/field` — 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
  - body: { code: string, label: string, example: string, field_type: integer }
- `POST https://api.mcp.ai/api/spoki/create/list` — 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
  - body: { name: string }
- `POST https://api.mcp.ai/api/spoki/create/media` — 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
  - body: { title: string, format_type: string, content_type: string, external_url: string }
- `POST https://api.mcp.ai/api/spoki/create/or/update/contact` — 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
  - body: { email?: string, phone: string, language?: string, last_name?: string, first_name?: string, custom_fields?: object }
- `POST https://api.mcp.ai/api/spoki/create/template` — 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
  - body: { name: string, category: string, subcategory?: string, templatelocalization_set: object[] }
- `POST https://api.mcp.ai/api/spoki/create/ticket` — 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.
  - body: { title: string, status: string, priority: string, reference?: string, description?: string, contact_phone: string }
- `POST https://api.mcp.ai/api/spoki/delete/contact` — Tool to delete a specific contact. Use after confirming the contact ID. Example prompt: "Delete contact with ID 1091234."
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/delete/custom/field` — Tool to delete a specific custom field. Cannot delete if the custom field is used in automations. Rate limit: 5 requests per minute.
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/delete/list` — Tool to delete a specific list. Use after confirming the list ID. Rate limit: 5 requests per minute.
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/delete/media` — Tool to delete a specific media file. Use after confirming the media ID. Rate limit: 60 requests per minute.
  - body: { id: string }
- `POST https://api.mcp.ai/api/spoki/delete/role` — Tool to delete a specific role. Use after confirming the role ID. Cannot delete the sole admin role. Rate limit: 5 requests per minute.
  - body: { id: string }
- `POST https://api.mcp.ai/api/spoki/delete/template` — Tool to delete a WhatsApp template. Use force_delete=true for templates used in automations. Rate limit: 10/min.
  - body: { id: integer, force_delete?: boolean }
- `POST https://api.mcp.ai/api/spoki/delete/ticket` — Tool to delete a specific ticket. Use after confirming the ticket ID. Rate limit: 60 requests per minute.
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/generate/role/private/key` — 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.
  - body: { id: string }
- `POST https://api.mcp.ai/api/spoki/get/account/current/report` — 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.
  - body: { account_id: integer }
- `POST https://api.mcp.ai/api/spoki/list/accounts` — 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
  - body: { page?: integer, per_page?: integer }
- `POST https://api.mcp.ai/api/spoki/list/agencies` — Tool to list all agencies accessible to the user. Use when you need to retrieve all agencies for the authenticated account.
- `POST https://api.mcp.ai/api/spoki/list/automations` — Tool to list, search, and filter automations. Use after authenticating to retrieve available automations and apply optional search or platform filters.
  - body: { search?: string, is_active?: boolean, webhook_platform?: string }
- `POST https://api.mcp.ai/api/spoki/list/campaigns` — Tool to list, search, and filter campaigns. Use when you need to retrieve campaigns optionally filtered by scheduled datetime.
  - body: { page?: integer, per_page?: integer, scheduled_datetime_gte?: string, scheduled_datetime_lte?: string }
- `POST https://api.mcp.ai/api/spoki/list/contacts` — Tool to list, search, and filter contacts. Use when you need to retrieve contacts with optional search and filters.
  - body: { tag?: integer, page?: integer, email?: string, phone?: string, search?: string, language?: string, per_page?: integer, last_name?: string, first_name?: string, is_blocked?: boolean }
- `POST https://api.mcp.ai/api/spoki/list/custom/fields` — Tool to list, search, and filter custom fields. Use when you need to fetch available custom-field definitions by label or code.
  - body: { code?: string, label?: string }
- `POST https://api.mcp.ai/api/spoki/list/lists` — 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.
  - body: { page?: integer, search?: string, per_page?: integer }
- `POST https://api.mcp.ai/api/spoki/list/media` — 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.
  - body: { page?: integer, per_page?: integer }
- `POST https://api.mcp.ai/api/spoki/list/partners` — List all partners accessible to the authenticated account. Partners represent business partners or affiliates associated with your Spoki account.
- `POST https://api.mcp.ai/api/spoki/list/reports` — 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.
  - body: { page?: integer, account?: integer, per_page?: integer, granularity?: string, period_start?: string }
- `POST https://api.mcp.ai/api/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.
- `POST https://api.mcp.ai/api/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.
- `POST https://api.mcp.ai/api/spoki/list/templates` — Tool to list, search, and filter WhatsApp templates. Use when you need to retrieve available templates, optionally filtering by keywords.
  - body: { search?: string }
- `POST https://api.mcp.ai/api/spoki/list/tickets` — Tool to list, search, and filter tickets. Use when you need to retrieve tickets with optional pagination and filters.
  - body: { page?: integer, order?: string, sort_by?: string, per_page?: integer }
- `POST https://api.mcp.ai/api/spoki/remove/all/list/contacts` — 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.
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/remove/contact/operator` — 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.
  - body: { id: string, email: string }
- `POST https://api.mcp.ai/api/spoki/remove/list/contacts` — 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.
  - body: { list_id: integer, contacts: integer[] }
- `POST https://api.mcp.ai/api/spoki/resend/invitation` — Tool to resend an invitation email. Use when you need to resend an existing invitation. Rate limit: 5 requests per minute.
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/retrieve/account` — Retrieves detailed information about a specific Spoki WhatsApp Business account. Returns comprehensive account details including credit balance, verification status, messaging limits, quality metrics,
  - body: { account_id: integer }
- `POST https://api.mcp.ai/api/spoki/retrieve/automation` — Tool to retrieve details of a specific automation. Use when you need name, first message, webhooks and timestamps of an existing automation.
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/retrieve/contact` — Tool to retrieve details of a specific contact. Use when you have a contact ID and need full profile details.
  - body: { contact_id: integer }
- `POST https://api.mcp.ai/api/spoki/retrieve/custom/field` — 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.
  - body: { custom_field_id: integer }
- `POST https://api.mcp.ai/api/spoki/retrieve/list` — 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.
  - body: { list_id: integer }
- `POST https://api.mcp.ai/api/spoki/retrieve/media` — Tool to retrieve details of a specific media file by ID. Use when you need media file metadata.
  - body: { id: string }
- `POST https://api.mcp.ai/api/spoki/retrieve/role` — 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.
  - body: { id: string }
- `POST https://api.mcp.ai/api/spoki/retrieve/tag` — Tool to retrieve details of a specific tag. Use when you need tag metadata by ID.
  - body: { id: integer }
- `POST https://api.mcp.ai/api/spoki/retrieve/template` — Tool to retrieve details of a specific template. Use after obtaining a template ID.
  - body: { template_id: integer }
- `POST https://api.mcp.ai/api/spoki/revert/template/to/draft` — 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.
  - body: { template_id: integer }
- `POST https://api.mcp.ai/api/spoki/sync/contacts/bulk` — 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
  - body: { contacts: object[] }
- `POST https://api.mcp.ai/api/spoki/sync/list/contacts` — 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
  - body: { list_id: string, contacts: object[] }
- `POST https://api.mcp.ai/api/spoki/update/campaign` — 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.
  - body: { id: string, name?: string, status?: string, scheduled_datetime?: string }
- `POST https://api.mcp.ai/api/spoki/update/contact` — 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.
  - body: { id: string, email?: string, phone?: string, language?: string, last_name?: string, first_name?: string, custom_fields?: object }
- `POST https://api.mcp.ai/api/spoki/update/custom/field` — Tool to update a specific custom field. Use after retrieving a field to change its label.
  - body: { label: string, custom_field_id: integer }
- `POST https://api.mcp.ai/api/spoki/update/invitation/role` — 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.
  - body: { id: string, role: string }
- `POST https://api.mcp.ai/api/spoki/update/media` — 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.
  - body: { id: integer, title: string }
- `POST https://api.mcp.ai/api/spoki/update/role` — Tool to update a user's role. Use when you need to change a user's role assignment. Rate limit: 10 requests per minute.
  - body: { id: string, role: string }
- `POST https://api.mcp.ai/api/spoki/update/template` — 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.
  - body: { id: integer, name?: string, category?: string, subcategory?: string, templatelocalization_set?: object[] }

## Example prompts
- "What can I do in Spoki?"
- "Show me a summary of my Spoki account"

## More
- Page: https://mcp.ai/spoki
- Agent spec (llms.txt): https://mcp.ai/spoki/llms.txt
- Postman collection: https://mcp.ai/spoki/postman.json
