API V1.0 · STABLE

API Reference

Documentación técnica completa para integrar RufiAR en tus plataformas. API de verificación OTP por SMS y email con autenticación segura mediante API Key.

🔑

Autenticación

Todas las solicitudes a la API requieren autenticación mediante una API Key privada. Debés incluirla en el header X-API-KEY en cada request. Podés generar o regenerar tu clave desde el Dashboard → API Key.

Header Requerido

X-API-KEY: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Formato de Error de Auth

{
  "code": "UNAUTHORIZED",
  "message": "Invalid or missing API Key",
  "timestamp": "2026-04-15T18:00:00Z"
}

⚠️Tu API Key otorga acceso completo a tu cuenta. Nunca la expongas en código cliente (browser). Usala exclusivamente en tu backend o scripts de servidor.

📱

Enviar OTP por SMS

Envía un código OTP de 6 dígitos a un número de teléfono vía SMS. Cuesta 1 crédito por envío exitoso. El mensaje contendrá automáticamente el nombre de tu aplicación registrada. Podés configurar la longitud del código y el tiempo de expiración. Para reintentos seguros, enviá una clave única en Idempotency-Key; repetirla devuelve el mismo OTP sin generar otro envío.

POSThttps://api.rufiar.com/api/v1/otp
v1.0

Envía el OTP al teléfono especificado vía SMS. Requiere saldo suficiente y autenticación via X-API-KEY.

bash
curl -X POST "https://api.rufiar.com/api/v1/otp" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Idempotency-Key: checkout-otp-2026-0001" \
  -d '{
    "channel": "SMS",
    "destinationPhone": "+5491112345678",
    "expiresInMinutes": 5,
    "otpLength": 6
  }'
Estados posibles:CREATEDSENTVERIFIEDEXPIREDFAILED

📧

Enviar OTP por Email

Envía un código OTP a una dirección de email. Cuesta 0.1 créditos por envío. El asunto y cuerpo del email se generan automáticamente. Podés reintentar de forma segura usando la misma clave Idempotency-Key; no la reutilices con otro payload.

POSThttps://api.rufiar.com/api/v1/otp
v1.0

Envía el OTP al email especificado. Requiere saldo suficiente y autenticación via X-API-KEY.

bash
curl -X POST "https://api.rufiar.com/api/v1/otp" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Idempotency-Key: email-otp-2026-0001" \
  -d '{
    "channel": "EMAIL",
    "destinationEmail": "user@example.com",
    "expiresInMinutes": 10,
    "otpLength": 4
  }'
✅

Verificar OTP

Valida el código ingresado por el usuario contra el OTP enviado. Necesitás el id retornado por el endpoint de envío y el código de 6 dígitos. Un OTP solo puede verificarse una vez; si ya fue verificado, expirado o falló, retorna error.

POSThttps://api.rufiar.com/api/v1/otp/{id}/verify
v1.0

Verifica el código OTP. Reemplazá {id} por el UUID retornado en el envío. El código es comparado usando BCrypt.

bash
curl -X POST "https://api.rufiar.com/api/v1/otp/e8a9b3d2-1f4c-4a2e-9c7d-0f3b8e6a1d5f/verify" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -d '{
    "code": "482916"
  }'

💡El campo verified: false en HTTP 200 indica código incorrecto sin bloquear. Si el OTP ya expiró o fue usado, la respuesta será HTTP 422.

💰

Consultar Saldo

Consultá el saldo de créditos disponibles para tu cuenta. Cada SMS exitoso descuenta 1 crédito. Podés recargar créditos desde el Dashboard → Billing.

GEThttps://api.rufiar.com/api/v1/balance/me
v1.0

Retorna el saldo actual de créditos asociado a tu API Key. Requiere autenticación mediante X-API-KEY o Bearer Token JWT.

bash
curl -X GET "https://api.rufiar.com/api/v1/balance/me" \
  -H "X-API-KEY: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"
📋

Historial de OTPs

Obtiene el historial paginado de todos los OTPs enviados desde tu cuenta, ordenados por fecha de creación descendente. Útil para auditoría, debugging y monitoreo de tus flujos de verificación.

GEThttps://api.rufiar.com/api/v1/otp/history?page=0&size=10&sortDir=desc
v1.0

Retorna una página de OTPs enviados. Soporta paginación y ordenamiento. Los parámetros son opcionales.

bash
curl -X GET "https://api.rufiar.com/api/v1/otp/history?page=0&size=10&sortDir=desc" \
  -H "X-API-KEY: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"

Parámetros de Query

ParámetroTipoDefaultDescripción
pageinteger0Número de página (base 0).
sizeinteger10Cantidad de resultados por página.
sortBystringcreatedAtCampo por el que se ordena.
sortDirstringdescDirección: asc | desc.
⚠️

Códigos de Error

Todos los errores siguen el mismo formato JSON con los campos code, message y timestamp.

json
// Formato estándar de error
{
  "code": "INSUFFICIENT_CREDITS",     // Código de error interno
  "message": "Descripción del error", // Mensaje legible
  "timestamp": "2026-04-15T21:00:00Z",// ISO 8601
  "fieldErrors": [ ... ]              // Solo en errores de validación (400)
}
HTTPCódigoEscenario
200 OK—Operación exitosa.
201 Created—OTP creado y enviado correctamente.
400VALIDATION_ERRORCampos faltantes o con formato inválido.
401UNAUTHORIZEDAPI Key inválida, ausente o expirada.
402INSUFFICIENT_CREDITSSaldo insuficiente. Recargá créditos.
403FORBIDDENNo tenés permisos para este recurso.
404OTP_NOT_FOUND / USER_NOT_FOUNDEl recurso solicitado no existe.
409CONFLICTEstado inconsistente, por ej. OTP ya procesado.
422INVALID_OTPOTP expirado, ya verificado, o fallido.
429RATE_LIMIT_EXCEEDEDSuperaste el límite de 5 envíos/hora por número.
503OTP_SEND_FAILEDError del proveedor SMS al enviar el mensaje.
500INTERNAL_ERRORError inesperado del servidor.
🧪

Sandbox (Entorno Seguro)

Para correr tests automatizados (CI/CD) o verificar tu integración sin consumir créditos, disponemos de un número mágico de sandbox que siempre responde exitosamente pero no envía mensajes a la red telefónica real.

Número de Test (SMS)

+54900000000

Comportamiento:

  • Devuelve HTTP 201 Created inmediatamente.
  • No descuenta créditos de tu balance de cuenta (costCredits: 0).
  • Genera un UUID válido que podés usar para probar el endpoint de Historial.
  • Para probar la verificación, podés consultar el OTP Code: "123456" simulado.