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"
  }
}
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
E1003API key expirada
E1004Service key inválida
E1005Usuario asociado a la key no encontrado

Permisos (E1100–E1199)

CódigoDescripción
E1100Scopes insuficientes para esta operación
E1101IP no permitida por las restricciones de la key
E1102Feature no disponible en plan Trial
E1103Scope de delegación faltante (app-mode keys)

Validación (E1200–E1299)

CódigoDescripción
E1200Error de validación general — campo con formato incorrecto. Revisa error.field y error.message.
E1201Uno 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ó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)

CódigoDescripción
E1500Has excedido el límite de peticiones. Espera y reintenta.

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: E1000E1005.

  • 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: E1100E1103.

  • 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 header Retry-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:

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 (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:

  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 (E1500)

La API aplica límites por plan:

PlanPeticiones/minuto
Starter60
Professional120
Enterprise300

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

Was this page helpful?