Ir al contenido

Referencia de API

SMS y verificación

Envía un SMS suelto o verifica un número con un código de un solo uso, sin pasar por el Flow Studio y sin contratar un proveedor de SMS.

Son los mismos servicios que usa el nodo Waiify del Flow Studio, así que puedes combinarlos: enviar el código desde un flujo y verificarlo desde tu backend, o al revés.

Todos los endpoints se autentican con tu API key y consumen créditos del workspace.

El WORKSPACE_ID de los ejemplos lo copias en Configuración → Desarrolladores, en la tarjeta ID del workspace — ver Obtener el WORKSPACE_ID.

POST /workspaces/:workspaceId/messaging/sms
CampoTipoDescripción
tostringObligatorio. Número de destino. Se acepta con +, con 00 o en formato local.
messagestringObligatorio. Texto del SMS. Máximo 1.530 caracteres.
defaultCountryCodestringPrefijo país a aplicar si to viene en formato local. Por defecto 52.
CampoDescripción
toNúmero normalizado a E.164 sin el +.
countryPaís del destino en ISO alpha-2, o null si el prefijo no permite determinarlo (el +1 lo comparten cuatro países).
segmentsSegmentos en que se dividió el mensaje. Cada uno se cobra como un SMS.
creditsCréditos consumidos.
messageIdIdentificador del envío en el proveedor.

Un SMS cabe en 160 caracteres. Una sola tilde, una ñ o un emoji cambian la codificación y bajan ese límite a 70, así que un texto de 100 caracteres con acentos cuesta el doble que sin ellos. El campo segments de la respuesta te dice exactamente cuántos se cobraron.

POST /workspaces/:workspaceId/messaging/otp/send

Genera un código de un solo uso y lo envía por SMS. El código se guarda cifrado, vence solo y se invalida al pedir uno nuevo para el mismo número.

CampoTipoDescripción
tostringObligatorio. Número al que enviar el código.
templatestringTexto del SMS. Debe contener {{code}}. Admite también {{minutes}}. Si lo omites se usa el mensaje por defecto de Waiify.
defaultCountryCodestringPrefijo país si to viene en formato local.
CampoDescripción
toNúmero normalizado. Guárdalo: es el que hay que enviar al verificar.
expiresAtFecha ISO en que vence el código.
resendAvailableInSecondsSegundos que hay que esperar para poder reenviarlo. Úsalo para el contador de tu pantalla.

Para protegerte (y protegernos) del fraude de bombeo de SMS hay tres topes. Al superar cualquiera la respuesta es 429:

  • 1 código cada 60 segundos por número.
  • 5 códigos por hora por número.
  • 200 códigos al día por workspace.
POST /workspaces/:workspaceId/messaging/otp/verify
CampoTipoDescripción
tostringObligatorio. El mismo número al que se envió el código.
codestringObligatorio. El código que escribió el usuario.
defaultCountryCodestringPrefijo país si to viene en formato local.

Responde 200 tanto si el código es correcto como si no: un código equivocado es un resultado previsto, no un error de la petición. Ramifica con valid.

CampoDescripción
validtrue si el código es correcto y no ha vencido.
reasonPor qué no es válido: not_found, expired, too_many_attempts o mismatch. null si valid es true.
attemptsLeftIntentos que le quedan al código antes de quedar inutilizado.

Un código correcto solo vale una vez: al canjearlo queda consumido, y un segundo intento con el mismo código responde valid: false con reason: "not_found".

Tras 3 intentos fallidos el código queda inutilizado aunque no haya vencido, y hay que pedir uno nuevo.

Además de los errores generales:

CódigoCuándo
400Número inválido, mensaje vacío, plantilla sin {{code}} o un campo desconocido en el cuerpo.
402El workspace no tiene créditos suficientes para el envío.
429Se superó uno de los topes de códigos, o el límite de peticiones por minuto.
502El proveedor de SMS rechazó el envío por una causa nuestra. Reintentable.

El límite de peticiones se aplica por workspace, no por IP: 120 envíos por minuto y 600 verificaciones por minuto.