Contactos

Gestión de contactos (CRUD) y polling
Agregar Contacto a Lista
POST /contacts/add
Actualizar Contacto
POST /contacts/update
Eliminar Contacto
POST /contacts/delete
Duplicar Contacto en Otra Lista
POST /contacts/duplicate
Consultar Contactos por Polling
POST /contacts/polling/{action}

Agregar Contacto a Lista

POST https://api.smsmasivos.com.mx/contacts/add
Agrega un contacto a una lista de contactos. Si el contacto ya existe en la lista, se actualiza.

Esta operación funciona como upsert: si el número no existe en la lista, crea el contacto (código contact_13); si ya existe, actualiza sus datos (código contact_15). Revisa el code de la respuesta para saber cuál de los dos casos ocurrió.

Parameters
list_keystringrequerido
Clave de la lista de contactos
numberstringrequerido
Número de teléfono nacional de 10 dígitos, solo números, sin código de país (el país va en country_code). Con find_country_code en 1 puede incluir el código de país.
namestringopcional
Nombre del contacto (máximo 100 caracteres)
emailstringopcional
Email del contacto (máximo 100 caracteres)
country_codestringopcional
Código de país del contacto (por defecto 52 para México)
find_country_codeenumopcional
Con valor 1, el código de país se extrae del propio número.01
birthday_datestringopcional
Fecha de nacimiento en formato YYYY-MM-DD. Si el formato no es válido, el campo se ignora.
custom_field_1stringopcional
Valor del primer campo personalizado de la lista
custom_field_2stringopcional
Valor del segundo campo personalizado de la lista
custom_field_3stringopcional
Valor del tercer campo personalizado de la lista
custom_field_4stringopcional
Valor del cuarto campo personalizado de la lista

Además de los errores globales de autenticación (auth_*, ver Errores y límites), este endpoint puede responder:

Códigos de error

CódigoCuándo ocurreQué hacer
contact_01 / contact_02Falta list_key o number.Envía ambos campos.
contact_03Número con formato incorrecto.Solo dígitos, mínimo 10.
contact_04 / contact_06Nombre o email de más de 100 caracteres.Acorta el campo.
contact_05Email con formato inválido.Corrige el email o no lo envíes.
contact_07La lista no existe.Verifica la list_key con /agendas/get.
contact_17La lista está vinculada a una herramienta y no admite cambios.Usa otra lista o desvincula la herramienta en el panel.

El éxito responde contact_13 (creado) o contact_15 (actualizado).

curl -X POST https://api.smsmasivos.com.mx/contacts/add \
  -H "Content-Type: application/json" \
  -H "apikey: TU_API_KEY" \
  -d '{
    "list_key": "a1b2c3d4e5f6",
    "number": "5512345678",
    "name": "Juan Pérez",
    "email": "juan@example.com"
  }'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.smsmasivos.com.mx/contacts/add');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'apikey: ' . getenv('SMSMASIVOS_API_KEY')
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'list_key' => 'a1b2c3d4e5f6',
    'number' => '5512345678',
    'name' => 'Juan Pérez',
    'email' => 'juan@example.com'
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests

response = requests.post(
    'https://api.smsmasivos.com.mx/contacts/add',
    headers={
        'Content-Type': 'application/json',
        'apikey': 'TU_API_KEY'
    },
    json={
        'list_key': 'a1b2c3d4e5f6',
        'number': '5512345678',
        'name': 'Juan Pérez',
        'email': 'juan@example.com'
    }
)
print(response.json())
const response = await fetch('https://api.smsmasivos.com.mx/contacts/add', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'apikey': process.env.SMSMASIVOS_API_KEY
  },
  body: JSON.stringify({
    list_key: 'a1b2c3d4e5f6',
    number: '5512345678',
    name: 'Juan Pérez',
    email: 'juan@example.com'
  })
});
const data = await response.json();
console.log(data);
const axios = require('axios');

const { data } = await axios.post(
  'https://api.smsmasivos.com.mx/contacts/add',
  {
    list_key: 'a1b2c3d4e5f6',
    number: '5512345678',
    name: 'Juan Pérez',
    email: 'juan@example.com'
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'apikey': process.env.SMSMASIVOS_API_KEY
    }
  }
);
console.log(data);
require 'net/http'
require 'json'

uri = URI('https://api.smsmasivos.com.mx/contacts/add')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.path, {
  'Content-Type' => 'application/json',
  'apikey' => ENV['SMSMASIVOS_API_KEY']
})
request.body = {
  list_key: 'a1b2c3d4e5f6',
  number: '5512345678',
  name: 'Juan Pérez',
  email: 'juan@example.com'
}.to_json

response = http.request(request)
puts JSON.parse(response.body)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("apikey", "TU_API_KEY");

var payload = new
{
    list_key = "a1b2c3d4e5f6",
    number = "5512345678",
    name = "Juan Pérez",
    email = "juan@example.com"
};

var response = await client.PostAsJsonAsync(
    "https://api.smsmasivos.com.mx/contacts/add",
    payload
);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);
OkHttpClient client = new OkHttpClient();

String json = "{"
    + "\"list_key\":\"a1b2c3d4e5f6\","
    + "\"number\":\"5512345678\","
    + "\"name\":\"Juan Pérez\","
    + "\"email\":\"juan@example.com\""
    + "}";

Request request = new Request.Builder()
    .url("https://api.smsmasivos.com.mx/contacts/add")
    .post(RequestBody.create(json, MediaType.parse("application/json")))
    .addHeader("apikey", "TU_API_KEY")
    .build();

Response response = client.newCall(request).execute();
System.out.println(response.body().string());
Response
{
  "success": true,
  "message": "contact_added",
  "status": 200,
  "code": "contact_13",
  "callback": {
    "id": 12345,
    "name": "Juan Perez",
    "number": "525512345678",
    "email": "juan@example.com",
    "custom_field_1": "<string>",
    "custom_field_2": "<string>",
    "custom_field_3": "<string>",
    "custom_field_4": "<string>",
    "list_id": 100,
    "birthday_date": "<string>",
    "facebook": "<string>",
    "twitter": "<string>",
    "linkedin": "<string>",
    "instagram": "<string>",
    "street": "<string>",
    "zip": "<string>"
  }
}
{
  "success": false,
  "message": "Parámetros inválidos.",
  "status": 400,
  "code": "<string>"
}
{
  "success": false,
  "message": "API Key inválida o no existe.",
  "status": 401,
  "code": "auth_05"
}
{
  "success": false,
  "message": "La dirección IP no está autorizada para acceder.",
  "status": 403,
  "code": "auth_04"
}
{
  "success": false,
  "message": "Demasiadas solicitudes. Límite: 100 mensajes/segundo (producción) o 100/día (sandbox).",
  "status": 429,
  "code": "rate_01"
}
{
  "success": false,
  "message": "Error interno del servidor. Contacta a soporte con el request_id.",
  "status": 500,
  "code": "server_01",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Actualizar Contacto

POST https://api.smsmasivos.com.mx/contacts/update
Actualiza información de un contacto en una lista

A diferencia de /contacts/add, esta operación no crea el contacto si no existe: en ese caso responde contact_09 con exist: false.

Parameters
list_keystringrequerido
Clave de la lista de contactos
numberstringrequerido
Número de teléfono
emailstringopcional
Email actualizado

Además de los errores globales de autenticación (auth_*, ver Errores y límites), este endpoint puede responder:

Códigos de error

CódigoCuándo ocurreQué hacer
contact_01 / contact_02 / contact_03list_key o number ausentes o inválidos.Corrige los campos.
contact_05 / contact_06Email inválido o de más de 100 caracteres.Corrige el email.
contact_07La lista no existe.Verifica la list_key.
contact_09El contacto no existe en la lista.Créalo con /contacts/add.
contact_17La lista está vinculada a una herramienta.Usa otra lista o desvincúlala en el panel.

El éxito responde contact_15.

curl -X POST https://api.smsmasivos.com.mx/contacts/update \
  -H "Content-Type: application/json" \
  -H "apikey: TU_API_KEY" \
  -d '{
    "list_key": "a1b2c3d4e5f6",
    "number": "5512345678",
    "email": "nuevo@example.com"
  }'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.smsmasivos.com.mx/contacts/update');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'apikey: ' . getenv('SMSMASIVOS_API_KEY')
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'list_key' => 'a1b2c3d4e5f6',
    'number' => '5512345678',
    'email' => 'nuevo@example.com'
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
response = requests.post(
    'https://api.smsmasivos.com.mx/contacts/update',
    headers={'Content-Type': 'application/json', 'apikey': 'TU_API_KEY'},
    json={'list_key': 'a1b2c3d4e5f6', 'number': '5512345678', 'email': 'nuevo@example.com'}
)
print(response.json())
const response = await fetch('https://api.smsmasivos.com.mx/contacts/update', {
  method: 'POST',
  headers: {'Content-Type': 'application/json', 'apikey': process.env.SMSMASIVOS_API_KEY},
  body: JSON.stringify({list_key: 'a1b2c3d4e5f6', number: '5512345678', email: 'nuevo@example.com'})
});
const data = await response.json();
console.log(data);
require 'net/http'; require 'json'
uri = URI('https://api.smsmasivos.com.mx/contacts/update')
http = Net::HTTP.new(uri.host, uri.port); http.use_ssl = true
request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json', 'apikey' => ENV['SMSMASIVOS_API_KEY']})
request.body = {list_key: 'a1b2c3d4e5f6', number: '5512345678', email: 'nuevo@example.com'}.to_json
response = http.request(request)
puts JSON.parse(response.body)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("apikey", "TU_API_KEY");
var payload = new { list_key = "a1b2c3d4e5f6", number = "5512345678", email = "nuevo@example.com" };
var response = await client.PostAsJsonAsync("https://api.smsmasivos.com.mx/contacts/update", payload);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);
OkHttpClient client = new OkHttpClient();
String json = "{\"list_key\":\"a1b2c3d4e5f6\",\"number\":\"5512345678\",\"email\":\"nuevo@example.com\"}";
Request request = new Request.Builder()
    .url("https://api.smsmasivos.com.mx/contacts/update")
    .post(RequestBody.create(json, MediaType.parse("application/json")))
    .addHeader("apikey", "TU_API_KEY").build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
Response
{
  "success": true,
  "message": "contact_added",
  "status": 200,
  "code": "contact_13",
  "callback": {
    "id": 12345,
    "name": "Juan Perez",
    "number": "525512345678",
    "email": "juan@example.com",
    "custom_field_1": "<string>",
    "custom_field_2": "<string>",
    "custom_field_3": "<string>",
    "custom_field_4": "<string>",
    "list_id": 100,
    "birthday_date": "<string>",
    "facebook": "<string>",
    "twitter": "<string>",
    "linkedin": "<string>",
    "instagram": "<string>",
    "street": "<string>",
    "zip": "<string>"
  }
}
{
  "success": false,
  "message": "Parámetros inválidos.",
  "status": 400,
  "code": "<string>"
}
{
  "success": false,
  "message": "API Key inválida o no existe.",
  "status": 401,
  "code": "auth_05"
}
{
  "success": false,
  "message": "La dirección IP no está autorizada para acceder.",
  "status": 403,
  "code": "auth_04"
}
{
  "success": false,
  "message": "Demasiadas solicitudes. Límite: 100 mensajes/segundo (producción) o 100/día (sandbox).",
  "status": 429,
  "code": "rate_01"
}
{
  "success": false,
  "message": "Error interno del servidor. Contacta a soporte con el request_id.",
  "status": 500,
  "code": "server_01",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Eliminar Contacto

POST https://api.smsmasivos.com.mx/contacts/delete
Elimina un contacto de una lista
Parameters
list_keystringrequerido
Clave de la lista de contactos
numberstringrequerido
Número de teléfono
emailstringopcional
Filtro por email

Además de los errores globales de autenticación (auth_*, ver Errores y límites), este endpoint puede responder:

Códigos de error

CódigoCuándo ocurreQué hacer
contact_01 / contact_02 / contact_03list_key o number ausentes o inválidos.Corrige los campos.
contact_07La lista no existe.Verifica la list_key.
contact_19El contacto no existe (o no se pudo eliminar).Verifica el número o email con /agendas/get_contacts.

El éxito responde contact_12.

curl -X POST https://api.smsmasivos.com.mx/contacts/delete \
  -H "Content-Type: application/json" \
  -H "apikey: TU_API_KEY" \
  -d '{"list_key": "a1b2c3d4e5f6", "number": "5512345678"}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.smsmasivos.com.mx/contacts/delete');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'apikey: ' . getenv('SMSMASIVOS_API_KEY')
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'list_key' => 'a1b2c3d4e5f6',
    'number' => '5512345678'
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
response = requests.post(
    'https://api.smsmasivos.com.mx/contacts/delete',
    headers={'Content-Type': 'application/json', 'apikey': 'TU_API_KEY'},
    json={'list_key': 'a1b2c3d4e5f6', 'number': '5512345678'}
)
print(response.json())
const response = await fetch('https://api.smsmasivos.com.mx/contacts/delete', {
  method: 'POST',
  headers: {'Content-Type': 'application/json', 'apikey': process.env.SMSMASIVOS_API_KEY},
  body: JSON.stringify({list_key: 'a1b2c3d4e5f6', number: '5512345678'})
});
const data = await response.json();
console.log(data);
require 'net/http'; require 'json'
uri = URI('https://api.smsmasivos.com.mx/contacts/delete')
http = Net::HTTP.new(uri.host, uri.port); http.use_ssl = true
request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json', 'apikey' => ENV['SMSMASIVOS_API_KEY']})
request.body = {list_key: 'a1b2c3d4e5f6', number: '5512345678'}.to_json
response = http.request(request)
puts JSON.parse(response.body)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("apikey", "TU_API_KEY");
var payload = new { list_key = "a1b2c3d4e5f6", number = "5512345678" };
var response = await client.PostAsJsonAsync("https://api.smsmasivos.com.mx/contacts/delete", payload);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);
OkHttpClient client = new OkHttpClient();
String json = "{\"list_key\":\"a1b2c3d4e5f6\",\"number\":\"5512345678\"}";
Request request = new Request.Builder()
    .url("https://api.smsmasivos.com.mx/contacts/delete")
    .post(RequestBody.create(json, MediaType.parse("application/json")))
    .addHeader("apikey", "TU_API_KEY").build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
Response
{
  "success": true,
  "message": "contact_deleted",
  "status": 200,
  "code": "contact_12"
}
{
  "success": false,
  "message": "Parámetros inválidos.",
  "status": 400,
  "code": "<string>"
}
{
  "success": false,
  "message": "API Key inválida o no existe.",
  "status": 401,
  "code": "auth_05"
}
{
  "success": false,
  "message": "La dirección IP no está autorizada para acceder.",
  "status": 403,
  "code": "auth_04"
}
{
  "success": false,
  "message": "Demasiadas solicitudes. Límite: 100 mensajes/segundo (producción) o 100/día (sandbox).",
  "status": 429,
  "code": "rate_01"
}
{
  "success": false,
  "message": "Error interno del servidor. Contacta a soporte con el request_id.",
  "status": 500,
  "code": "server_01",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Duplicar Contacto en Otra Lista

POST https://api.smsmasivos.com.mx/contacts/duplicate
Copia un contacto de una lista a otra
Parameters
current_list_keystringrequerido
Clave de lista de contactos origen
new_list_keystringrequerido
Clave de lista de contactos destino
contact_idstringrequerido
ID del contacto a duplicar

Además de los errores globales de autenticación (auth_*, ver Errores y límites), este endpoint puede responder:

Códigos de error

CódigoCuándo ocurreQué hacer
contact_01Falta new_list_key o current_list_key.Envía ambas claves.
contact_16Falta contact_id.Envía el identificador del contacto.
contact_07Alguna de las listas no existe.Verifica las claves con /agendas/get.
contact_10El contacto ya existe en la lista destino.No se duplica; puedes tratarlo como éxito idempotente.

El éxito responde contact_13.

curl https://api.smsmasivos.com.mx/contacts/duplicate \
  -d current_list_key=value \
  -d new_list_key=value \
  -d contact_id=value
const Contacto = await sms.contactos.create({
  current_list_key: 'value',
  new_list_key: 'value',
  contact_id: 'value',
})
Contacto = sms.contactos.create(
    current_list_key="value",
    new_list_key="value",
    contact_id="value",
)
Contacto, err := client.Contactos.Create(ctx, &sms.ContactoParams{
    CurrentListKey: sms.String("value"),
    NewListKey: sms.String("value"),
    ContactId: sms.String("value"),
})
Response
{
  "success": true,
  "message": "contact_added",
  "status": 200,
  "code": "contact_13",
  "callback": {
    "id": 12345,
    "name": "Juan Perez",
    "number": "525512345678",
    "email": "juan@example.com",
    "custom_field_1": "<string>",
    "custom_field_2": "<string>",
    "custom_field_3": "<string>",
    "custom_field_4": "<string>",
    "list_id": 100,
    "birthday_date": "<string>",
    "facebook": "<string>",
    "twitter": "<string>",
    "linkedin": "<string>",
    "instagram": "<string>",
    "street": "<string>",
    "zip": "<string>"
  }
}
{
  "success": false,
  "message": "Parámetros inválidos.",
  "status": 400,
  "code": "<string>"
}
{
  "success": false,
  "message": "API Key inválida o no existe.",
  "status": 401,
  "code": "auth_05"
}
{
  "success": false,
  "message": "La dirección IP no está autorizada para acceder.",
  "status": 403,
  "code": "auth_04"
}
{
  "success": false,
  "message": "Demasiadas solicitudes. Límite: 100 mensajes/segundo (producción) o 100/día (sandbox).",
  "status": 429,
  "code": "rate_01"
}
{
  "success": false,
  "message": "Error interno del servidor. Contacta a soporte con el request_id.",
  "status": 500,
  "code": "server_01",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Consultar Contactos por Polling

POST https://api.smsmasivos.com.mx/contacts/polling/{action}
Consulta cambios en contactos. Dispara webhook Zapier con los datos del contacto
Path parameters
actionstringrequerido
Tipo de acción
Parameters
list_keystringrequerido
Clave de la lista de contactos
contact_idstringrequerido
ID del contacto
curl https://api.smsmasivos.com.mx/contacts/polling/value \
  -d list_key=value \
  -d contact_id=value
const Contacto = await sms.contactos.create({
  list_key: 'value',
  contact_id: 'value',
})
Contacto = sms.contactos.create(
    list_key="value",
    contact_id="value",
)
Contacto, err := client.Contactos.Create(ctx, &sms.ContactoParams{
    ListKey: sms.String("value"),
    ContactId: sms.String("value"),
})
Response
{
  "success": true,
  "message": "Ok",
  "status": 200,
  "code": "sms_11",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}
{
  "success": false,
  "message": "Parámetros inválidos.",
  "status": 400,
  "code": "<string>"
}
{
  "success": false,
  "message": "API Key inválida o no existe.",
  "status": 401,
  "code": "auth_05"
}
{
  "success": false,
  "message": "La dirección IP no está autorizada para acceder.",
  "status": 403,
  "code": "auth_04"
}
{
  "success": false,
  "message": "Demasiadas solicitudes. Límite: 100 mensajes/segundo (producción) o 100/día (sandbox).",
  "status": 429,
  "code": "rate_01"
}
{
  "success": false,
  "message": "Error interno del servidor. Contacta a soporte con el request_id.",
  "status": 500,
  "code": "server_01",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Objeto de respuesta

Estructura de la respuesta que devuelven estos endpoints.

Atributos
successboolean
messagestring
Mensaje de estado
statusinteger
codestring
Código de respuesta
callbackobject
Detalles del contacto
Objeto de respuesta
{
  "success": true,
  "message": "contact_added",
  "status": 200,
  "code": "contact_13",
  "callback": {}
}