Errores
Cuando una petición a la API falla, recibirás un código HTTP que indica qué salió mal. Todos los errores v2 usan un formato estandarizado con códigos numéricos para soporte técnico.
Formato de respuesta de error
Todos los errores de la API v2 devuelven un JSON con esta estructura:
{
"error": {
"code": "E1200",
"type": "validation_error",
"message": "Invalid email format: 'correo-sin-arroba'",
"field": "participant.email"
}
}
| Campo | Tipo | Descripción |
|---|---|---|
error.code | string | Código numérico único (E1000–E1999). Úsalo para soporte técnico y manejo programático. |
error.type | string | Categoría del error (validation_error, not_found, conflict, etc.) |
error.message | string | Mensaje legible describiendo el problema. |
error.field | string? | Solo en errores de validación. Indica el campo del request que causó el error (ej. participants[0].email). |
El campo field usa dot-notation con índices de array. Ejemplo: participants[0].email indica el email del primer participante.
Códigos de error (E1XXX)
Autenticación (E1000–E1099)
| Código | Descripción |
|---|---|
E1000 | Falta el header Authorization |
E1001 | Formato de API key inválido (debe ser Bearer allsign_live_sk_xxx) |
E1002 | API key inválida o expirada |
E1003 | API key expirada |
E1004 | Service key inválida |
E1005 | Usuario asociado a la key no encontrado |
Permisos (E1100–E1199)
| Código | Descripción |
|---|---|
E1100 | Scopes insuficientes para esta operación |
E1101 | IP no permitida por las restricciones de la key |
E1102 | Feature no disponible en plan Trial |
E1103 | Scope de delegación faltante (app-mode keys) |
Validación (E1200–E1299)
| Código | Descripción |
|---|---|
E1200 | Error de validación general — campo con formato incorrecto. Revisa error.field y error.message. |
E1201 | Uno o más correos de participantes no pueden recibir mensajes (verificación de entregabilidad fallida). El campo error.invalid_emails lista cada correo con el motivo específico. |
Not Found (E1300–E1399)
| Código | Descripción |
|---|---|
E1300 | Recurso no encontrado o no pertenece a tu cuenta |
Pago / Créditos (E1400–E1499)
| Código | Descripción |
|---|---|
E1400 | Créditos insuficientes. El mensaje incluye cuántos se requieren y cuántos tienes disponibles. |
Rate Limiting (E1500–E1599)
| Código | Descripción |
|---|---|
E1500 | Has excedido el límite de peticiones. Espera y reintenta. |
Conflicto (E1600–E1699)
| Código | Descripción |
|---|---|
E1600 | Conflicto de estado — el recurso ya fue modificado, completado, anulado, o está en un estado que no permite la operación. |
Bad Request (E1700–E1799)
| Código | Descripción |
|---|---|
E1700 | Petición inválida — lógica de negocio rechazada (ej. firmante no encontrado en documento, estado incompatible). |
Internal (E1900–E1999)
| Código | Descripción |
|---|---|
E1900 | Error interno del servidor. Si persiste, contacta soporte con el código. |
Códigos de estado HTTP
- Name
400 Bad Request- Description
Los datos que enviaste no son válidos o la lógica de negocio los rechaza. Código:
E1700.
- Name
401 Unauthorized- Description
No se reconoce tu API key. Verifica el header
Authorization: Bearer allsign_live_sk_xxx. Códigos:E1000–E1005.
- Name
402 Payment Required- Description
Créditos insuficientes para la operación. Código:
E1400.
- Name
403 Forbidden- Description
Tu API key no tiene permisos para esta acción. Códigos:
E1100–E1103.
- Name
404 Not Found- Description
El recurso no existe o no pertenece a tu cuenta. Código:
E1300.
- Name
409 Conflict- Description
El recurso está en un estado incompatible. Código:
E1600.
- Name
422 Unprocessable Entity- Description
Datos con formato incorrecto o validación fallida. Códigos:
E1200(formato),E1201(email no entregable).
- Name
429 Too Many Requests- Description
Rate limit excedido. Código:
E1500. La respuesta incluye el headerRetry-After.
- Name
500 Internal Server Error- Description
Error interno. Código:
E1900. Si persiste, contacta soporte.
Errores comunes y soluciones
"API key no válida" (E1001 / E1002)
# ❌ Incorrecto — falta el prefijo Bearer
curl -H "Authorization: allsign_live_sk_xxx" ...
# ✅ Correcto
curl -H "Authorization: Bearer allsign_live_sk_xxx" ...
"Scope insuficiente" (E1100)
Tu API key necesita el scope correcto para la operación. Por ejemplo, crear documentos requiere document:write. Genera una nueva key con los scopes necesarios en el Dashboard.
"Créditos insuficientes" (E1400)
{
"error": {
"code": "E1400",
"type": "payment_required",
"message": "Insufficient credits. Required: 3, Available: 1"
}
}
Agrega créditos desde el Dashboard antes de reintentar.
"Email de participante no entregable" (E1201)
Ocurre cuando uno o más correos en el array participants no pueden recibir mensajes (mailbox inválido, dominio sin MX records, etc.). La validación sucede antes de crear el documento — no habrá registros huérfanos.
AllSign valida emails en dos capas:
| Capa | Qué revisa | Ejemplo de error |
|---|---|---|
| Formato (instantánea) | Que el email tenga @, dominio válido, sin espacios | "soyisraelortiz.com" — falta @ |
| Entregabilidad (SendGrid) | Que el buzón exista, dominio tenga MX records, no sea desechable | "israel@gmail.con" — dominio sin MX records |
Solo los emails con veredicto Invalid son rechazados. Los emails Risky (sospechosos pero posiblemente válidos) se envían con una advertencia interna.
Respuesta de error (HTTP 422):
{
"detail": {
"success": false,
"message": "Invalid email format: 'soyisraelortiz.com'. Expected format: user@example.com",
"validation_errors": [
{
"field": "0.email",
"message": "Invalid email format: 'soyisraelortiz.com'. Expected format: user@example.com",
"input": "soyisraelortiz.com"
}
]
}
}
Para errores de entregabilidad (dominio inválido, buzón inexistente):
{
"detail": {
"success": false,
"error_code": "EMAIL_VALIDATION_FAILED",
"message": "One or more signer email addresses are not valid.",
"invalid_emails": [
{
"email": "israel@gmail.con",
"reason": "domain cannot receive email (no MX records)",
"suggestion": "Did you mean israel@gmail.com?"
}
]
}
}
Cómo manejar el error en tu código:
try {
const response = await fetch('/v1/documents/create_document', { ... });
const data = await response.json();
if (response.status === 422) {
const detail = data.detail || data;
// Errores de formato (Pydantic)
if (detail.validation_errors) {
detail.validation_errors.forEach(err => {
showFieldError(err.field, err.message);
});
return;
}
// Errores de entregabilidad (SendGrid)
if (detail.invalid_emails) {
detail.invalid_emails.forEach(err => {
const msg = err.suggestion
? `${err.reason} ${err.suggestion}`
: err.reason;
showFieldError(err.email, msg);
});
return;
}
// Error genérico de validación
showError(detail.message);
}
} catch (error) {
showError('Error de conexión');
}
Cómo resolverlo:
- Verifica que el correo del participante esté escrito correctamente (sin typos)
- Confirma con el firmante que su dirección recibe correos externos
- Si el dominio es corporativo, puede requerir ser whitelisteado — usa WhatsApp como canal alternativo
- Dominios
.xyz,.infoo genéricos a menudo tienen filtros estrictos — solicita un correo personal de respaldo
Recomendación UX: Valida el formato del email en tu formulario antes de enviar a la API. Usa un regex como ^[^\s@]+@[^\s@]+\.[^\s@]+$ para atrapar errores obvios y dar retroalimentación instantánea al usuario.
"Documento no encontrado" (E1300)
Verifica que:
- El
document_idsea un UUID válido - El documento pertenezca al tenant de tu API key
- El documento no haya sido eliminado
Rate limiting (E1500)
La API aplica límites por plan:
| Plan | Peticiones/minuto |
|---|---|
| Starter | 60 |
| Professional | 120 |
| Enterprise | 300 |
Si necesitas más capacidad, contáctanos para un plan personalizado.

