### GET /v1/users - Example request Source: https://www.manycontacts.com/en/api Curl command to list users with their id, name, and AI flag. No parameters are required; replace TU_API_KEY with your API key. ```bash curl https://api.manycontacts.com/v1/users \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### GET /v2/contact/:phone - Example response Source: https://www.manycontacts.com/en/api Example JSON response for a successful GET request. Includes contact details such as id, name, number, open status, tags, and internal notes. ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [], "internal_notes": [ { "text": "Cliente VIP", "createdAt": "2026-07-09T13:00:00.000Z" } ] } ``` -------------------------------- ### POST /v2/contact/:phone/open - Example response Source: https://www.manycontacts.com/en/api Example JSON response for a successful open. Shows 'open' set to true. ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` -------------------------------- ### GET /v1/users - Example response Source: https://www.manycontacts.com/en/api JSON array of user objects, each containing id, name, and ai flag. The ai flag indicates whether the user is an AI agent. ```json [ { "id": "5d2a...", "name": "Ana", "ai": false }, { "id": "9f8e...", "name": "Agente IA", "ai": true } ] ``` -------------------------------- ### GET /v2/contact/:phone - Example request Source: https://www.manycontacts.com/en/api Retrieves a contact by phone number. The phone must be in international format with digits only. Requires an API key in the 'apikey' header. ```bash curl https://api.manycontacts.com/v2/contact/34600111222 \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### POST /v2/contact/:phone/unassign - Example response Source: https://www.manycontacts.com/en/api Example JSON response for a successful unassignment. Shows 'last_user_id' as null. ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "last_user_id": null, "open": true, "tags": [] } ``` -------------------------------- ### POST /v2/contact/:phone/close - Example response Source: https://www.manycontacts.com/en/api Example JSON response for a successful close. Shows 'open' set to false. ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": false, "tags": [] } ``` -------------------------------- ### POST /v2/contact/:phone/open - Example request Source: https://www.manycontacts.com/en/api Opens the contact's conversation by phone. Requires API key. ```bash curl -X POST https://api.manycontacts.com/v2/contact/34600111222/open \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### PUT /v2/contact/:phone - Example response Source: https://www.manycontacts.com/en/api Example JSON response for a successful PUT request. Shows the updated contact with id, name, number, email, open status, and tags. ```json { "id": "8f3c...", "name": "Juan Pérez", "number": "34600111222", "email": "juan@example.com", "open": true, "tags": [] } ``` -------------------------------- ### POST /v2/contact/:phone/assign/:userId - Example response Source: https://www.manycontacts.com/en/api Example JSON response for a successful assignment. Shows the contact with the assigned user ID in 'last_user_id'. ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "last_user_id": "5d2a...", "open": true, "tags": [] } ``` -------------------------------- ### POST /v2/contact/:phone/close - Example request Source: https://www.manycontacts.com/en/api Closes the contact's conversation by phone. Requires API key. ```bash curl -X POST https://api.manycontacts.com/v2/contact/34600111222/close \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### GET /v2/contact/:phone/bot/init Source: https://www.manycontacts.com/en/api Triggers the chatbot's first message to a contact identified by phone number. ```APIDOC ## GET /v2/contact/:phone/bot/init ### Description Trigger the chatbot's first message to the contact (by phone). ### Method GET ### Endpoint /v2/contact/:phone/bot/init ### Parameters #### Path Parameters - **phone** (string) - Required - Contact phone in international format (digits only), in the path. ### Request Example ``` curl https://api.manycontacts.com/v2/contact/34600111222/bot/init \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) Returns 200 with no body when the operation succeeds. #### Response Example ``` HTTP/1.1 200 OK ``` ``` -------------------------------- ### GET /v1/templates Source: https://www.manycontacts.com/en/api Lists all approved and visible WhatsApp templates. This endpoint takes no parameters and returns an array of template objects. ```APIDOC ## GET /v1/templates ### Description List approved and visible WhatsApp templates. ### Method GET ### Endpoint /v1/templates ### Parameters This endpoint takes no parameters. ### Request Example ``` curl https://api.manycontacts.com/v1/templates \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **name** (string) - Template name - **text** (string) - Template text with placeholders - **hasImage** (boolean) - Whether the template has an image - **hasDocument** (boolean) - Whether the template has a document - **hasVideo** (boolean) - Whether the template has a video #### Response Example ``` [ { "name": "bienvenida", "text": "Hola {{1}}, tu cita es el {{2}}", "hasImage": false, "hasDocument": false, "hasVideo": false } ] ``` ``` -------------------------------- ### List templates response Source: https://www.manycontacts.com/en/api Example JSON response from the /v1/templates endpoint, showing an array of template objects with name, text, and media flags. ```json [ { "name": "bienvenida", "text": "Hola {{1}}, tu cita es el {{2}}", "hasImage": false, "hasDocument": false, "hasVideo": false } ] ``` -------------------------------- ### GET /v1/contact/:id/bot/init Source: https://www.manycontacts.com/en/api Triggers the chatbot's first message to the contact. Returns 200 with no body on success. ```APIDOC ## GET /v1/contact/:id/bot/init ### Description Trigger the chatbot's first message to the contact. ### Method GET ### Endpoint /v1/contact/:id/bot/init ### Parameters #### Path Parameters - **id** (string) - Required - Contact ID (UUID), in the path. ### Request Example ``` curl https://api.manycontacts.com/v1/contact/8f3c.../bot/init \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) Returns 200 with no body when the operation succeeds. ``` -------------------------------- ### List templates with curl Source: https://www.manycontacts.com/en/api Send a GET request to /v1/templates to list approved and visible templates. No parameters are required. Replace TU_API_KEY with your actual API key. ```bash curl https://api.manycontacts.com/v1/templates \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### PUT /v2/contact/:phone - Example request Source: https://www.manycontacts.com/en/api Creates or updates a contact by phone. Accepts optional fields like name, email, open, notes, and locked. Requires API key and Content-Type headers. ```bash curl -X PUT https://api.manycontacts.com/v2/contact/34600111222 \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Juan Pérez", "email": "juan@example.com" }' ``` -------------------------------- ### PUT /v2/contact/:phone/customField - Example response Source: https://www.manycontacts.com/en/api Example JSON response for a successful custom field update. Shows the contact with the custom field added under 'customFields'. ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "customFields": { "dni": "12345678Z" }, "tags": [] } ``` -------------------------------- ### POST /v2/contact/:phone/unassign - Example request Source: https://www.manycontacts.com/en/api Removes the assignment of a contact by phone. Requires API key. ```bash curl -X POST https://api.manycontacts.com/v2/contact/34600111222/unassign \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### List teams response Source: https://www.manycontacts.com/en/api Example JSON response from the /v1/teams endpoint, showing an array of team objects with id, name, and members. ```json [ { "id": "7c9d...", "name": "Ventas", "members": [ { "id": "5d2a...", "name": "Ana" }, { "id": "6e3b...", "name": "Luis" } ] } ] ``` -------------------------------- ### List teams with curl Source: https://www.manycontacts.com/en/api Send a GET request to /v1/teams to list all teams and their members. No parameters are required. Replace TU_API_KEY with your actual API key. ```bash curl https://api.manycontacts.com/v1/teams \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### POST /v2/contact/:phone/assign/:userId - Example request Source: https://www.manycontacts.com/en/api Assigns a contact to a user by phone and user ID. If the user is an AI agent and the organization has no AI credits, returns 402 with error 'no_ai_credits'. ```bash curl -X POST https://api.manycontacts.com/v2/contact/34600111222/assign/5d2a... \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### GET /v1/contact/phone/:phone Source: https://www.manycontacts.com/en/api Fetches a contact by its phone number in international format. ```APIDOC ## GET /v1/contact/phone/:phone ### Description Get a contact by phone number. If no contact exists with that number, it returns an empty object { }. ### Method GET ### Endpoint /v1/contact/phone/:phone ### Parameters #### Path Parameters - **phone** (string) - Required - Contact phone in international format (digits only), in the path. ### Request Example ``` curl https://api.manycontacts.com/v1/contact/phone/34600111222 \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Contact ID (UUID). - **name** (string) - Contact name. - **number** (string) - Contact phone number. - **open** (boolean) - Conversation state. - **tags** (array) - List of tags. #### Response Example ``` { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` ``` -------------------------------- ### GET /v1/users Source: https://www.manycontacts.com/en/api Lists the users (agents) in your organization with their id, name and AI flag. This endpoint takes no parameters. ```APIDOC ## GET /v1/users ### Description List the users (agents) in your organization with their id, name and AI flag. ### Method GET ### Endpoint /v1/users ### Parameters This endpoint takes no parameters. ### Request Example ``` curl https://api.manycontacts.com/v1/users \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - The user's unique identifier. - **name** (string) - The user's name. - **ai** (boolean) - Indicates whether the user is an AI agent. #### Response Example ``` [ { "id": "5d2a...", "name": "Ana", "ai": false }, { "id": "9f8e...", "name": "Agente IA", "ai": true } ] ``` ``` -------------------------------- ### PUT /v2/contact/:phone/customField - Example request Source: https://www.manycontacts.com/en/api Creates or updates a custom field for a contact. If the contact does not exist, it is created. Requires 'key' and 'value' in the JSON body. ```bash curl -X PUT https://api.manycontacts.com/v2/contact/34600111222/customField \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "key": "dni", "value": "12345678Z" }' ``` -------------------------------- ### GET /v1/contact/:id Request and Response Source: https://www.manycontacts.com/en/api Retrieve a specific contact by its UUID. ```bash curl https://api.manycontacts.com/v1/contact/8f3c... \ -H "apikey: TU_API_KEY" ``` ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` -------------------------------- ### Send template with text variable response Source: https://www.manycontacts.com/en/api Example JSON response from the POST /v1/template/:templateName/:number endpoint, showing the message id and error field. ```json { "id": "8f3c...", "error": null } ``` -------------------------------- ### GET /v1/contact/:id Source: https://www.manycontacts.com/en/api Fetches a single contact by its unique identifier. ```APIDOC ## GET /v1/contact/:id ### Description Get a contact by its ID. ### Method GET ### Endpoint /v1/contact/:id ### Parameters #### Path Parameters - **id** (string) - Required - Contact ID (UUID), in the path. ### Request Example ``` curl https://api.manycontacts.com/v1/contact/8f3c... \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Contact ID (UUID). - **name** (string) - Contact name. - **number** (string) - Contact phone number. - **open** (boolean) - Conversation state. - **tags** (array) - List of tags. #### Response Example ``` { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` ``` -------------------------------- ### GET /v2/contact/:phone Source: https://www.manycontacts.com/en/api Retrieves a contact by phone number, including internal notes. ```APIDOC ## GET /v2/contact/:phone ### Description Get the contact (includes internal notes) by phone. ### Method GET ### Endpoint /v2/contact/:phone ### Parameters #### Path Parameters - **phone** (string) - Required - Contact phone in international format (digits only), in the path. ### Request Example ``` curl https://api.manycontacts.com/v2/contact/34600111222 \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Contact ID. - **name** (string) - Contact name. - **number** (string) - Contact phone number. - **open** (boolean) - Conversation state. - **tags** (array) - Contact tags. - **internal_notes** (array) - Internal notes. #### Response Example ``` { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [], "internal_notes": [ { "text": "Cliente VIP", "createdAt": "2026-07-09T13:00:00.000Z" } ] } ``` ``` -------------------------------- ### GET /v1/contacts Request and Response Source: https://www.manycontacts.com/en/api Retrieve a list of contacts with optional filters. The response is an array of contact objects. ```bash curl "https://api.manycontacts.com/v1/contacts?filter=1&page=0&closed=false" \ -H "apikey: TU_API_KEY" ``` ```json [ { "id": "8f3c...", "name": "Juan", "email": null, "open": true, "last_user_id": null, "number": "34600111222", "notes": null, "locked": false, "customFields": {}, "tags": [] } ] ``` -------------------------------- ### Trigger chatbot first message (GET /v1/contact/:id/bot/init) Source: https://www.manycontacts.com/en/api Triggers the chatbot's first message to the contact. Requires contact ID in the path. Returns HTTP/1.1 200 OK with no body on success. ```bash curl https://api.manycontacts.com/v1/contact/8f3c.../bot/init \ -H "apikey: TU_API_KEY" ``` ```http HTTP/1.1 200 OK ``` -------------------------------- ### GET /v1/contact/phone/:phone Request and Response Source: https://www.manycontacts.com/en/api Retrieve a contact by their international phone number. Returns an empty object if no contact is found. ```bash curl https://api.manycontacts.com/v1/contact/phone/34600111222 \ -H "apikey: TU_API_KEY" ``` ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` -------------------------------- ### GET /v2/contact/:phone/bot/init - Trigger bot first message Source: https://www.manycontacts.com/en/api Triggers the chatbot's first message to the contact (by phone). The request uses curl with an apikey header. The response is HTTP 200 with no body. ```bash curl https://api.manycontacts.com/v2/contact/34600111222/bot/init \ -H "apikey: TU_API_KEY" ``` ```http HTTP/1.1 200 OK ``` -------------------------------- ### GET /v1/tags - List tags with filter Source: https://www.manycontacts.com/en/api Lists tags, optionally filtered by name (partial, case-insensitive search). The filter is passed as a query parameter. ```bash curl "https://api.manycontacts.com/v1/tags?filter=cliente" \ -H "apikey: TU_API_KEY" ``` ```json [ { "id": "a1b2...", "name": "Cliente", "color": "#55efc4", "createdAt": "2026-07-09T13:00:00.000Z" } ] ``` -------------------------------- ### Webhook event payload example Source: https://www.manycontacts.com/en/api JSON body sent as a POST to your configured webhook URL. Contains the event name, a delta object with contact and message details, and the full contact object. ```json { "event": "message_new", "delta": { "contactId": "8f3c...", "message": { "id": "...", "text": "Hola", "type": "received", "metadata": { "time": "2026-07-09T13:00:00.000Z" } } }, "contact": { "id": "8f3c...", "name": "Juan", "email": null, "open": true, "last_user_id": null, "number": "34600111222", "notes": null, "locked": false, "customFields": {}, "tags": [] } } ``` -------------------------------- ### GET /v1/teams Source: https://www.manycontacts.com/en/api Lists all teams in the organization along with their members. This endpoint takes no parameters and returns an array of team objects. ```APIDOC ## GET /v1/teams ### Description List your organization's teams with their members. ### Method GET ### Endpoint /v1/teams ### Parameters This endpoint takes no parameters. ### Request Example ``` curl https://api.manycontacts.com/v1/teams \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Team ID - **name** (string) - Team name - **members** (array) - List of members, each with **id** (string) and **name** (string) #### Response Example ``` [ { "id": "7c9d...", "name": "Ventas", "members": [ { "id": "5d2a...", "name": "Ana" }, { "id": "6e3b...", "name": "Luis" } ] } ] ``` ``` -------------------------------- ### POST /v1/tag - Create a tag Source: https://www.manycontacts.com/en/api Creates a tag with a required name and optional color (hexadecimal, max 7 characters). If color is omitted, a random one is assigned. ```bash curl -X POST https://api.manycontacts.com/v1/tag \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "VIP", "color": "#e84393" }' ``` ```json { "id": "c3d4...", "name": "VIP", "color": "#e84393", "createdAt": "2026-07-09T13:00:00.000Z" } ``` -------------------------------- ### GET /v1/contacts Source: https://www.manycontacts.com/en/api Retrieves a list of contacts with optional filters for assignment, page, closed, users, and tags. ```APIDOC ## GET /v1/contacts ### Description List contacts with filters for assignment, page, closed, users, and tags. ### Method GET ### Endpoint /v1/contacts ### Parameters #### Query Parameters - **filter** (integer) - Optional - 0 = only unassigned and open chats; 1 = all chats. - **page** (integer) - Optional - Results page. - **closed** (boolean) - Optional - If 'true', returns only closed conversations. - **users** (string[]) - Optional - Filter by assigned user IDs (repeatable parameter). - **tags** (string[]) - Optional - Filter by tag IDs; the contact must have all of them (repeatable parameter). ### Request Example ``` curl "https://api.manycontacts.com/v1/contacts?filter=1&page=0&closed=false" \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Contact ID (UUID). - **name** (string) - Contact name. - **email** (string) - Contact email. - **open** (boolean) - Conversation state. - **last_user_id** (string) - Last assigned user ID. - **number** (string) - Contact phone number. - **notes** (string) - Contact notes. - **locked** (boolean) - Whether the contact is locked. - **customFields** (object) - Custom fields. - **tags** (array) - List of tags. #### Response Example ``` [ { "id": "8f3c...", "name": "Juan", "email": null, "open": true, "last_user_id": null, "number": "34600111222", "notes": null, "locked": false, "customFields": {}, "tags": [] } ] ``` ``` -------------------------------- ### Send template with media (POST /v2/template/:templateName/:number/media) Source: https://www.manycontacts.com/en/api Sends a template with a media attachment using multipart/form-data. The request includes the file and variables as form fields. The response contains an id and error field. ```bash curl -X POST https://api.manycontacts.com/v2/template/bienvenida/34600111222/media \ -H "apikey: TU_API_KEY" \ -F 'variables=["Juan", "10:00"]' \ -F "file=@catalogo.pdf" ``` ```json { "id": "8f3c...", "error": null } ``` -------------------------------- ### Open contact conversation (POST /v1/contact/:id/open) Source: https://www.manycontacts.com/en/api Opens the contact's conversation. Requires contact ID in the path. Response shows open: true. ```bash curl -X POST https://api.manycontacts.com/v1/contact/8f3c.../open \ -H "apikey: TU_API_KEY" ``` ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` -------------------------------- ### POST /v1/contact Request and Response Source: https://www.manycontacts.com/en/api Create a new contact or return an existing one. Requires the phone number. ```bash curl -X POST https://api.manycontacts.com/v1/contact \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "number": "34600111222", "name": "Juan" }' ``` ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` -------------------------------- ### POST /v1/message/media - Send media file Source: https://www.manycontacts.com/en/api Sends a file (image, audio, video, or document) as a multipart attachment. The type is detected from the file. Use 'number' to specify the contact phone. ```bash curl -X POST https://api.manycontacts.com/v1/message/media \ -H "apikey: TU_API_KEY" \ -F "number=34600111222" \ -F "caption=Tu factura" \ -F "file=@factura.pdf" ``` ```json { "id": "8f3c...", "error": null } ``` -------------------------------- ### GET /v1/tags Source: https://www.manycontacts.com/en/api Lists all tags with an optional name filter. The filter parameter performs a partial, case-insensitive search on tag names. ```APIDOC ## GET /v1/tags ### Description List tags with an optional name filter. ### Method GET ### Endpoint /v1/tags ### Parameters #### Query Parameters - **filter** (string) - Optional - Filter tags by name (partial, case-insensitive search). ### Request Example ``` curl "https://api.manycontacts.com/v1/tags?filter=cliente" \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Tag ID. - **name** (string) - Tag name. - **color** (string) - Tag color in hexadecimal format. - **createdAt** (string) - Creation timestamp. #### Response Example ``` [ { "id": "a1b2...", "name": "Cliente", "color": "#55efc4", "createdAt": "2026-07-09T13:00:00.000Z" } ] ``` ``` -------------------------------- ### POST /v2/template/:templateName/:number/media Source: https://www.manycontacts.com/en/api Send a v2 template with a media attachment. ```APIDOC ## POST /v2/template/:templateName/:number/media ### Description Send a v2 template with a media attachment. ### Method POST ### Endpoint /v2/template/:templateName/:number/media ### Parameters #### Path Parameters - **templateName** (string) - Required - Exact name of the Meta-approved template. - **number** (string) - Required - Destination phone in international format, in the path. #### Request Body - **file** (file) - Required - File to send (multipart/form-data). - **header_variables** (string[]) - Optional - Values for the template header variables (array). - **variables** (string[]) - Optional - Values for the template body variables (array). ### Request Example ``` curl -X POST https://api.manycontacts.com/v2/template/bienvenida/34600111222/media \ -H "apikey: TU_API_KEY" \ -F 'variables=["Juan", "10:00"]' \ -F "file=@catalogo.pdf" ``` ### Response #### Success Response (200) - **id** (string) - Identifier of the sent message. - **error** (string|null) - Error message, null if successful. #### Response Example ``` { "id": "8f3c...", "error": null } ``` ``` -------------------------------- ### POST /v1/template/:templateName/:number/media Source: https://www.manycontacts.com/en/api Sends a Meta-approved WhatsApp template with a media attachment. The file is sent as multipart/form-data. ```APIDOC ## POST /v1/template/:templateName/:number/media ### Description Send a Meta-approved WhatsApp template with a media attachment. ### Method POST ### Endpoint /v1/template/:templateName/:number/media ### Parameters #### Path Parameters - **templateName** (string) - Required - Exact name of the Meta-approved template. - **number** (string) - Required - Destination phone in international format, in the path. #### Request Body (multipart/form-data) - **file** (file) - Required - File to send (multipart/form-data). - **text** (string) - Optional - Value for the template body variable. ### Request Example ``` curl -X POST https://api.manycontacts.com/v1/template/bienvenida/34600111222/media \ -H "apikey: TU_API_KEY" \ -F "text=Juan" \ -F "file=@catalogo.pdf" ``` ### Response #### Success Response (200) - **id** (string) - Message ID - **error** (null) - Error field, null on success #### Response Example ``` { "id": "8f3c...", "error": null } ``` ``` -------------------------------- ### Send template with variables (POST /v2/template/:templateName/:number) Source: https://www.manycontacts.com/en/api Sends a template with header and body variables as arrays. The request uses the apikey header and a JSON body with header_variables and variables arrays. The response contains an id and error field. ```bash curl -X POST https://api.manycontacts.com/v2/template/bienvenida/34600111222 \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "header_variables": ["ManyContacts"], "variables": ["Juan", "10:00"] }' ``` ```json { "id": "8f3c...", "error": null } ``` -------------------------------- ### POST /v2/contact/:phone/open Source: https://www.manycontacts.com/en/api Opens the contact's conversation by phone. ```APIDOC ## POST /v2/contact/:phone/open ### Description Open the contact's conversation (by phone). ### Method POST ### Endpoint /v2/contact/:phone/open ### Parameters #### Path Parameters - **phone** (string) - Required - Contact phone in international format (digits only), in the path. ### Request Example ``` curl -X POST https://api.manycontacts.com/v2/contact/34600111222/open \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Contact ID. - **name** (string) - Contact name. - **number** (string) - Contact phone number. - **open** (boolean) - Conversation state (true after open). - **tags** (array) - Contact tags. #### Response Example ``` { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` ``` -------------------------------- ### POST /v1/message/interactive - Send interactive message Source: https://www.manycontacts.com/en/api Sends an interactive message with quick-reply buttons or a list. With 1-3 buttons, reply buttons are sent (max 20 chars); with 4-10, a list is generated (max 24 chars). Requires WhatsApp API or Coexistence and the contact must have messaged within the last 24 hours. ```bash curl -X POST https://api.manycontacts.com/v1/message/interactive \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "number": "34600111222", "text": "¿Confirmas tu cita?", "header": "Recordatorio", "footer": "Clínica ManyContacts", "buttons": ["Sí, confirmo", "Reprogramar", "Cancelar"] }' ``` ```json { "id": "8f3c...", "error": null } ``` -------------------------------- ### Authenticate with apikey header using curl Source: https://www.manycontacts.com/en/api Every request must include the apikey header with your organization's key. Replace TU_API_KEY with your actual key. The key is not available during the trial period. ```bash curl https://api.manycontacts.com/v1/contacts \ -H "apikey: TU_API_KEY" ``` -------------------------------- ### PUT /v2/contact/:phone/stage/:column - Move contact to funnel stage Source: https://www.manycontacts.com/en/api Moves the contact to the funnel stage identified by its order. The column parameter is an integer index starting at 0. The request uses curl with an apikey header. The response is HTTP 200 with no body. ```bash curl -X PUT https://api.manycontacts.com/v2/contact/34600111222/stage/2 \ -H "apikey: TU_API_KEY" ``` ```http HTTP/1.1 200 OK ``` -------------------------------- ### Send template with media using curl Source: https://www.manycontacts.com/en/api Send a POST request to /v1/template/:templateName/:number/media to send a template with a media attachment. The file is sent as multipart/form-data, and the text parameter is optional. Replace TU_API_KEY with your actual API key. ```bash curl -X POST https://api.manycontacts.com/v1/template/bienvenida/34600111222/media \ -H "apikey: TU_API_KEY" \ -F "text=Juan" \ -F "file=@catalogo.pdf" ``` -------------------------------- ### POST /v1/tag Source: https://www.manycontacts.com/en/api Creates a new tag. The name is required, while the color is optional and defaults to a random value if not provided. ```APIDOC ## POST /v1/tag ### Description Create a new tag with a required name and optional color. ### Method POST ### Endpoint /v1/tag ### Parameters #### Request Body - **name** (string) - Required - Tag name. - **color** (string) - Optional - Color in hexadecimal format (max. 7 characters). If omitted, a random one is assigned. ### Request Example ``` curl -X POST https://api.manycontacts.com/v1/tag \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "VIP", "color": "#e84393" }' ``` ### Response #### Success Response (200) - **id** (string) - Tag ID. - **name** (string) - Tag name. - **color** (string) - Tag color in hexadecimal format. - **createdAt** (string) - Creation timestamp. #### Response Example ``` { "id": "c3d4...", "name": "VIP", "color": "#e84393", "createdAt": "2026-07-09T13:00:00.000Z" } ``` ``` -------------------------------- ### Assign contact to team (POST /v1/contact/:id/team/:teamId) Source: https://www.manycontacts.com/en/api Assigns the contact to a team. Requires contact ID and team ID in the path. Response shows contact with empty tags. ```bash curl -X POST https://api.manycontacts.com/v1/contact/8f3c.../team/7c9d... \ -H "apikey: TU_API_KEY" ``` ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "tags": [] } ``` -------------------------------- ### POST /v1/message/media Source: https://www.manycontacts.com/en/api Sends a file (image, audio, video or document) as a multipart attachment. The type is detected from the file. ```APIDOC ## POST /v1/message/media ### Description Sends a file (image, audio, video or document) as a multipart attachment. The type is detected from the file. ### Method POST ### Endpoint /v1/message/media ### Parameters #### Request Body - **number** (string) - Required - Contact phone in international format, without the '+' sign. Required if contactid is not provided. - **file** (file multipart) - Required - File to send (multipart/form-data). - **caption** (string) - Optional - Text accompanying the file. ### Request Example ``` curl -X POST https://api.manycontacts.com/v1/message/media \ -H "apikey: TU_API_KEY" \ -F "number=34600111222" \ -F "caption=Tu factura" \ -F "file=@factura.pdf" ``` ### Response #### Success Response (200) - **id** (string) - Message ID. - **error** (null) - Error field, null on success. #### Response Example ``` { "id": "8f3c...", "error": null } ``` ``` -------------------------------- ### POST /v2/contact/:phone/tag/name/:tagName Source: https://www.manycontacts.com/en/api Adds a tag by name to a contact, creating the tag and contact if they do not exist. ```APIDOC ## POST /v2/contact/:phone/tag/name/:tagName ### Description Add a tag by name (creates tag and contact if they don't exist). ### Method POST ### Endpoint /v2/contact/:phone/tag/name/:tagName ### Parameters #### Path Parameters - **phone** (string) - Required - Contact phone in international format (digits only), in the path. - **tagName** (string) - Required - Tag name (created if it doesn't exist). ### Request Example ``` curl -X POST https://api.manycontacts.com/v2/contact/34600111222/tag/name/Cliente \ -H "apikey: TU_API_KEY" ``` ### Response #### Success Response (200) - **id** (string) - Contact ID. - **name** (string) - Contact name. - **number** (string) - Contact phone number. - **tags** (array) - List of tags assigned to the contact. #### Response Example ``` { "id": "8f3c...", "name": "Juan", "number": "34600111222", "tags": [{ "id": "a1b2...", "name": "Cliente", "color": "#55efc4" }] } ``` ``` -------------------------------- ### POST /v2/template/:templateName/:number Source: https://www.manycontacts.com/en/api Send a template with header and body variables (arrays). ```APIDOC ## POST /v2/template/:templateName/:number ### Description Send a template with header and body variables (arrays). ### Method POST ### Endpoint /v2/template/:templateName/:number ### Parameters #### Path Parameters - **templateName** (string) - Required - Exact name of the Meta-approved template. - **number** (string) - Required - Destination phone in international format, in the path. #### Request Body - **header_variables** (string[]) - Optional - Values for the template header variables (array). - **variables** (string[]) - Optional - Values for the template body variables (array). ### Request Example ``` curl -X POST https://api.manycontacts.com/v2/template/bienvenida/34600111222 \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "header_variables": ["ManyContacts"], "variables": ["Juan", "10:00"] }' ``` ### Response #### Success Response (200) - **id** (string) - Identifier of the sent message. - **error** (string|null) - Error message, null if successful. #### Response Example ``` { "id": "8f3c...", "error": null } ``` ``` -------------------------------- ### PUT /v1/contact/:id/customField Request and Response Source: https://www.manycontacts.com/en/api Create or update a custom field for a contact using a key-value pair. ```bash curl -X PUT https://api.manycontacts.com/v1/contact/8f3c.../customField \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "key": "dni", "value": "12345678Z" }' ``` ```http HTTP/1.1 200 OK ``` -------------------------------- ### POST /v1/contact Source: https://www.manycontacts.com/en/api Creates a new contact or returns an existing one based on the provided number. ```APIDOC ## POST /v1/contact ### Description Create a contact (or return the existing one). Requires number. ### Method POST ### Endpoint /v1/contact ### Parameters #### Request Body - **number** (string) - Required - Contact phone in international format, without the '+' sign. Required if contactid is not provided. - **name** (string) - Optional - Contact name. - **assigned** (string) - Optional - ID of the user to assign the contact to on creation. ### Request Example ``` curl -X POST https://api.manycontacts.com/v1/contact \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "number": "34600111222", "name": "Juan" }' ``` ### Response #### Success Response (200) - **id** (string) - Contact ID (UUID). - **name** (string) - Contact name. - **number** (string) - Contact phone number. - **open** (boolean) - Conversation state. - **tags** (array) - List of tags. #### Response Example ``` { "id": "8f3c...", "name": "Juan", "number": "34600111222", "open": true, "tags": [] } ``` ``` -------------------------------- ### POST /v1/template/:templateName/:number Source: https://www.manycontacts.com/en/api Sends a Meta-approved WhatsApp template to a specified number. The template body variable is provided via the `text` parameter. ```APIDOC ## POST /v1/template/:templateName/:number ### Description Send a Meta-approved WhatsApp template to a number. The template body variable is provided via the `text` parameter. ### Method POST ### Endpoint /v1/template/:templateName/:number ### Parameters #### Path Parameters - **templateName** (string) - Required - Exact name of the Meta-approved template. - **number** (string) - Required - Destination phone in international format, in the path. #### Request Body - **text** (string) - Optional - Value for the template body variable. ### Request Example ``` curl -X POST https://api.manycontacts.com/v1/template/bienvenida/34600111222 \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "Juan" }' ``` ### Response #### Success Response (200) - **id** (string) - Message ID - **error** (null) - Error field, null on success #### Response Example ``` { "id": "8f3c...", "error": null } ``` ``` -------------------------------- ### Assign contact to user (POST /v1/contact/:id/assign/:userId) Source: https://www.manycontacts.com/en/api Assigns a contact to a specified user. Requires contact ID and user ID in the path. If the user is an AI agent and the organization has no AI credits, returns 402 with { "error": "no_ai_credits" }. ```bash curl -X POST https://api.manycontacts.com/v1/contact/8f3c.../assign/5d2a... \ -H "apikey: TU_API_KEY" ``` ```json { "id": "8f3c...", "name": "Juan", "number": "34600111222", "last_user_id": "5d2a...", "open": true, "tags": [] } ``` -------------------------------- ### PUT /v1/tag/:id - Update a tag Source: https://www.manycontacts.com/en/api Updates a tag's name or color. The id is in the path. Color is optional and if omitted, a random one is assigned. ```bash curl -X PUT https://api.manycontacts.com/v1/tag/c3d4... \ -H "apikey: TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "VIP Gold", "color": "#fdcb6e" }' ``` ```json { "id": "c3d4...", "name": "VIP Gold", "color": "#fdcb6e", "createdAt": "2026-07-09T13:00:00.000Z" } ```