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": "participants[0].email"
  }
}
CampoTipoDescripción
error.codestringCódigo numérico único (E1000–E1999). Úsalo para soporte técnico y manejo programático.
error.typestringCategoría del error (validation_error, not_found, conflict, etc.)
error.messagestringMensaje legible describiendo el problema.
error.fieldstring?Solo en errores de validación. Indica el campo del request que causó el error (ej. participants[0].email).

Códigos de error (E1XXX)

Autenticación (E1000–E1099)

CódigoDescripción
E1000Falta el header Authorization
E1001Formato de API key inválido (debe ser Bearer allsign_live_sk_xxx)
E1002API key inválida o expirada (mismo código para ambos casos)
E1004Service key inválida

Permisos (E1100–E1199)

Los errores de permisos emiten un código string descriptivo, no el numérico. Los E11XX son solo fallbacks por status code y rara vez aparecen en el wire.

error.code emitidoStatusDescripciónCampos extra
INSUFFICIENT_SCOPE403Scopes insuficientes para esta operaciónrequired_scopes, your_scopes, hint
TRIAL_FEATURE_RESTRICTED / DEV_FEATURE_RESTRICTED403Feature no disponible para tu plan / ambienteupgrade_message
INSUFFICIENT_DELEGATION_SCOPE403Scope de delegación faltante (app-mode keys)required_scopes
E1101403IP no permitida por las restricciones de la key

Validación (E1200–E1299)

CódigoDescripción
E1200Error de validación general — campo con formato incorrecto. Revisa error.field y error.message.

Not Found (E1300–E1399)

CódigoDescripción
E1300Recurso no encontrado o no pertenece a tu cuenta

Pago / Créditos (E1400–E1499)

CódigoDescripción
E1400Créditos insuficientes. El mensaje incluye cuántos se requieren y cuántos tienes disponibles.

Rate Limiting (E1500–E1599)

error.code emitidoDescripción
RATE_LIMIT_EXCEEDEDExcediste el límite de peticiones de tu plan (per-tenant). El body va envuelto en error con limit, remaining, reset, retry_after, environment.

Conflicto (E1600–E1699)

CódigoDescripción
E1600Conflicto 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ódigoDescripción
E1700Petición inválida — lógica de negocio rechazada (ej. firmante no encontrado en documento, estado incompatible).

Internal (E1900–E1999)

CódigoDescripción
E1900Error 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: E1000E1004.

  • 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. El error.code real es un string: INSUFFICIENT_SCOPE, TRIAL_FEATURE_RESTRICTED/DEV_FEATURE_RESTRICTED o INSUFFICIENT_DELEGATION_SCOPE (los E1100E1103 son solo fallback por status).

  • 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), EMAIL_VALIDATION_FAILED (email no entregable).

  • Name
    429 Too Many Requests
    Description

    Rate limit excedido. El error.code real es RATE_LIMIT_EXCEEDED (el E1500 es solo fallback por status). La respuesta incluye el header Retry-After.

  • Name
    500 Internal Server Error
    Description

    Error interno. Código: E1900. Si persiste, contacta soporte.

  • Name
    504 Gateway Timeout
    Description

    Solo en la creación de documentos con mode=sync: el procesamiento excedió el límite del servidor (~10 min). El workflow sigue corriendo en segundo plano — el payload trae errorCode: "WORKFLOW_TIMEOUT" y el workflowId (en ambas convenciones) para rastrearlo por SSE. No reenvíes el create a ciegas. Ver Create document.


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" (INSUFFICIENT_SCOPE)

Tu API key necesita el scope correcto para la operación. Por ejemplo, crear documentos requiere document:write. El error 403 incluye error.required_scopes, error.your_scopes y error.hint para que sepas exactamente qué añadir. 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" (EMAIL_VALIDATION_FAILED)

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:

CapaQué revisaEjemplo 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 de formato (HTTP 422):

Los errores de formato (Pydantic) devuelven un único error con el envelope estándar { "error": { ... } } — solo el primer campo inválido, sin array:

{
  "error": {
    "code": "E1200",
    "type": "validation_error",
    "message": "Invalid email format: 'soyisraelortiz.com'. Expected format: user@example.com",
    "field": "participants[0].email"
  }
}

Para errores de entregabilidad (dominio inválido, buzón inexistente), error.details lista cada correo rechazado:

{
  "error": {
    "code": "EMAIL_VALIDATION_FAILED",
    "type": "validation_error",
    "message": "One or more signer email addresses are not valid.",
    "details": [
      {
        "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('/v2/documents', { ... });
  const data = await response.json();

  if (response.status === 422) {
    const err = data.error;

    // Errores de entregabilidad (SendGrid): error.details lista cada correo
    if (err.code === 'EMAIL_VALIDATION_FAILED' && err.details) {
      err.details.forEach(d => {
        const msg = d.suggestion
          ? `${d.reason} ${d.suggestion}`
          : d.reason;
        showFieldError(d.email, msg);
      });
      return;
    }

    // Errores de formato (Pydantic): un solo campo en error.field
    if (err.field) {
      showFieldError(err.field, err.message);
      return;
    }

    // Error genérico de validación
    showError(err.message);
  }
} catch (error) {
  showError('Error de conexión');
}

Cómo resolverlo:

  1. Verifica que el correo del participante esté escrito correctamente (sin typos)
  2. Confirma con el firmante que su dirección recibe correos externos
  3. Si el dominio es corporativo, puede requerir ser whitelisteado — usa WhatsApp como canal alternativo
  4. Dominios .xyz, .info o 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:

  1. El document_id sea un UUID válido
  2. El documento pertenezca al tenant de tu API key
  3. El documento no haya sido eliminado

Rate limiting (RATE_LIMIT_EXCEEDED)

El límite de peticiones está determinado por tu plan de suscripción activo. El default es 100 req/min. Consulta la página de Rate Limits para ver los headers y el patrón de retry recomendado.

Si necesitas más capacidad, contáctanos para un plan personalizado.

Was this page helpful?