El error 30915 ya no es solo de 10DLC: afecta también tu Toll-Free y tu bot de WhatsApp
Si tienes un bot de WhatsApp corriendo sobre Twilio —ya sea con la API de WhatsApp Business o usando números de EE.UU. para notificaciones A2P— y de repente tus mensajes dejan de salir con un código 30915, bienvenido al club de los que no leyeron bien el formulario de registro. Este tutorial te explica qué cambió, por qué importa, y cómo registrar tu entidad correctamente para no bloquear tu tráfico en producción.

A partir de mediados de 2026, Twilio unificó el comportamiento del error 30915 para que aplique de forma consistente tanto en campañas de A2P 10DLC como en Toll-Free Verification. Antes, el error era más laxo o aparecía en momentos distintos dependiendo del canal. Ahora, si mandas un registro de Sole Proprietor (persona física, autónomo) pero la información disponible —nombre legal, EIN, registros públicos— indica que en realidad eres una LLC, una Corp, o cualquier entidad legalmente constituida, el sistema lo rechaza de inmediato con 30915: Invalid Sole Proprietor Classification. Y eso bloquea tus envíos. No es un warning. Es un bloqueo duro.
¿Por qué te importa esto si tienes un bot de WhatsApp?
Porque en el ecosistema mexicano y latinoamericano que opera con números de EE.UU. para llegar a usuarios en ese mercado —o que usa Twilio como gateway para WhatsApp Business— el registro A2P es obligatorio. No es opcional. Si tu bot manda mensajes de marketing, notificaciones transaccionales o recordatorios desde un número 10DLC sin campaña registrada correctamente, Twilio los filtra. Y desde 2026, el filtro es más agresivo.
Igual aplica si usas un número Toll-Free (800, 888, etc.) para tu bot: la verificación Toll-Free también exige clasificación de entidad correcta.
Requisitos antes de empezar
- Cuenta de Twilio con acceso a la consola (rol de administrador o owner)
- Un número de teléfono de EE.UU. ya comprado (10DLC local o Toll-Free)
- Documentos legales de tu empresa: RFC si eres mexicano con presencia en EE.UU., EIN si tienes entidad en EE.UU., o equivalente
- Saber con certeza qué tipo de entidad eres: Sole Proprietor (persona física sin empresa registrada) vs. Standard/Legal Entity (LLC, Corp, S.A., etc.)
- Node.js 20+ o Python 3.11+ si vas a automatizar el registro vía API
Paso 1: Identifica tu tipo de entidad correctamente
Este es el paso que la gente se salta y luego llora. Antes de tocar la consola de Twilio:
Sole Proprietor aplica si:
- Eres una persona física que opera sin entidad registrada
- No tienes EIN (Employer Identification Number) de EE.UU.
- No tienes LLC, Corp, ni ningún equivalente registrado ante el estado
Standard Business aplica si:
- Tienes una LLC, Inc., Corp, S.A. de C.V., o cualquier entidad registrada
- Tienes EIN
- Tu nombre de negocio está registrado legalmente en cualquier jurisdicción
Si dudas, la regla es simple: si tienes un EIN o equivalente, NO eres Sole Proprietor. Registrarte como tal con esa información disponible es exactamente lo que dispara el 30915.
Paso 2: Registra tu Brand en el Trust Hub de Twilio
Ve a Twilio Console → Trust Hub → Customer Profiles.
- Crea un nuevo Customer Profile
- En el campo Business Type, selecciona el que corresponde:
Sole Proprietorsolo si cumples los criterios del Paso 1Private Profitpara LLC, Corp, etc.
- Llena el EIN o equivalente fiscal
- Nombre legal exacto (debe coincidir con registros públicos)
- Dirección registrada
- Sube documentos de soporte si los pides (en cuentas nuevas o de alto volumen)
Advertencia de producción: Twilio cruza tu información contra bases de datos públicas de registros empresariales. Si tu nombre legal en los registros del estado dice "Acme Media LLC" pero tú pusiste "Sole Proprietor", el sistema lo detecta y lanza
30915. No es manual: es automatizado.
Paso 3: Crea tu Brand A2P (para 10DLC)
Desde la consola o vía API:
curl -X POST https://messaging.twilio.com/v1/a2p/BrandRegistrations \
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN" \
-d "CustomerProfileSid=$CUSTOMER_PROFILE_SID" \
-d "A2PProfileBundleSid=$A2P_BUNDLE_SID"
O en Node.js:
const twilio = require('twilio');
const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
async function registerBrand(customerProfileSid, a2pBundleSid) {
try {
const brand = await client.messaging.v1.brandRegistrations.create({
customerProfileSid,
a2PProfileBundleSid: a2pBundleSid,
});
console.log('Brand SID:', brand.sid);
console.log('Status:', brand.status);
return brand;
} catch (err) {
// Aquí cachamos el 30915 antes de que rompa producción
if (err.code === 30915) {
console.error('ERROR 30915: Clasificación de entidad inválida. Revisa tu Customer Profile.');
console.error('Detalle:', err.message);
}
throw err;
}
}
Paso 4: Manejo del error 30915 en tu bot
Si ya tienes un bot corriendo y quieres detectar este error en tiempo real para no perder mensajes silenciosamente:
// En tu handler de envío de mensajes con Twilio
async function sendWhatsAppMessage(to, body) {
try {
const message = await client.messages.create({
from: 'whatsapp:+1XXXXXXXXXX',
to: `whatsapp:${to}`,
body,
});
return message.sid;
} catch (err) {
switch (err.code) {
case 30915:
// Alerta crítica: el registro está mal, no solo este mensaje falla
await notifyOps('CRÍTICO: Error 30915 - Clasificación Sole Proprietor inválida. Revisar Trust Hub inmediatamente.');
break;
case 30007:
// Carrier filtering, diferente problema
console.warn('Mensaje filtrado por carrier:', err.message);
break;
default:
console.error('Error Twilio:', err.code, err.message);
}
throw err;
}
}
Paso 5: Verificación Toll-Free (si usas número 800/888)
El proceso es análogo pero va por otro flujo:
- Console → Phone Numbers → Manage → Active Numbers → tu número Toll-Free
- Click en Set up Toll-Free Verification
- En Business Information, mismas reglas: entidad legal = no Sole Proprietor
- Llena use case, volumen estimado, ejemplos de mensajes
# Verificación Toll-Free vía API (Python)
from twilio.rest import Client
import os
client = Client(os.environ['TWILIO_ACCOUNT_SID'], os.environ['TWILIO_AUTH_TOKEN'])
verification = client.messaging \
.v1 \
.tollfree_verifications \
.create(
business_name='Acme Media LLC',
business_website='https://example.com',
notification_email='ops@example.com',
use_case_summary='Notificaciones transaccionales para usuarios de plataforma DJ',
production_message_sample='Tu set de esta noche empieza en 30 minutos. Entra aquí: https://example.com/live',
opt_in_image_urls=['https://example.com/assets/optin-screenshot.png'],
opt_in_type='VERBAL',
message_volume='10000',
tollfree_phone_number_sid='PNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
customer_profile_sid='BUXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
)
print(f"Verification SID: {verification.sid}")
print(f"Status: {verification.status}")
Advertencias reales de producción
- No intentes registrarte como Sole Proprietor para evitar el proceso largo. El proceso largo existe por algo y el shortcut te quema.
- El
30915bloquea la campaña completa, no solo un mensaje. Todos los envíos de ese número quedan en riesgo hasta que corriges el registro. - Twilio no siempre notifica proactivamente. Puedes estar perdiendo mensajes días antes de notarlo si no tienes monitoreo de errores en tu bot.
- Para México: si tu empresa es una S.A. de C.V. o una SAS, registra como
Private Profitcon documentación que pruebe la constitución. El RFC no es suficiente por sí solo; necesitas equivalente al EIN si operas en EE.UU. - El tiempo de revisión para correcciones de Brand puede ser de 1 a 5 días hábiles. Planea con anticipación si tienes campañas programadas.
Resumen rápido
| Situación | Clasificación correcta |
|---|---|
| Persona física sin empresa registrada | Sole Proprietor |
| LLC, Inc., Corp, S.A. de C.V. | Standard Business / Private Profit |
| Tienes EIN | Standard Business |
| Operas bajo nombre comercial registrado | Standard Business |
Registra bien desde el inicio, monitorea el código 30915 en tu bot, y no dejes que un formulario mal llenado tumbe tu tráfico de producción.