---
title: "Listar solicitudes de firma del tenant"
method: GET
path: "/solicitudes-firma"
tags: ["solicitudes-firma"]
---

# Listar solicitudes de firma del tenant

`GET /solicitudes-firma`

## Request

- Base URL: `https://contadeo.com/api`
- URL: `https://contadeo.com/api/solicitudes-firma`
- Auth: HTTP bearer

La más reciente primero. Roles: owner, admin, emisor, contador o lector.

## Path parameters

- `emisorId` string, uuid, required

## Response `200`

Solicitudes (sin documentos)

- SolicitudFirma[]
  - `id` string, uuid
  - `emisorId` string, uuid
  - `estado` 'BORRADOR' | 'LISTA' | 'ENVIANDO' | 'EN_REVISION' | 'ERROR_DATOS' | 'ERROR_ENVIO' | 'CERTIFICADO_CARGADO' | 'CANCELADA': BORRADOR → LISTA → ENVIANDO → EN_REVISION → CERTIFICADO_CARGADO, con las ramas ERROR_DATOS (NewBest rechazó los datos), ERROR_ENVIO (red agotada o catálogo pendiente) y CANCELADA.
  - `pasoActual` 'firmacliente' | 'documentos' | 'firma' | 'contador' | 'null', nullable: Último paso que intentó el worker; dice a qué pantalla volver tras un ERROR_DATOS.
  - `envios` integer: Cuántas veces se pulsó enviar. Entra en el jobId para que un reenvío no colisione con el intento anterior.
  - `tipoFirma` 1 | 2 | 3
  - `tipoFirmaEtiqueta` string
  - `vigencia` integer: id_firma_tiempo del catálogo de NewBest (1..7).
  - `vigenciaNombre` string
  - `vigenciaDias` integer, nullable
  - `esRenovacion` boolean
  - `newbestIdPersona` string, nullable: Id numérico que el asistente de NewBest muestra al titular al terminar su registro. Sin GET en su API no hay forma de verificar que sea suyo.
  - `titular` TitularSolicitud: Datos del titular de la firma tal como viajarán a NewBest. Es PII de una persona que puede no ser el usuario de la cuenta: el cron de retención lo pone a null al vencer el plazo (EN_REVISION 60 días, cerrada 30, ERROR_* 90).
    - `nombres` string, required
    - `primerApellido` string, required
    - `segundoApellido` string
    - `identificacion` string, required: Cédula de 10 dígitos. En los tipos 1 y 2 es la del titular (los diez primeros de su RUC); en el tipo 3 es la del REPRESENTANTE LEGAL, no la de la empresa.
    - `email` string, email, required
    - `telefono` string, required: Celular en la forma 09XXXXXXXX. Se acepta 593XXXXXXXXX y se normaliza al guardarlo.
    - `cargo` string: Cargo del representante legal. Obligatorio en el tipo de firma 3.
    - `ruc` string: Tipos 2 y 3. Obligatorio en el 3: es el RUC de la empresa.
    - `razonSocial` string: Tipos 2 y 3. Obligatorio en el 3.
    - `direccion` object, required
      - `calleUno` string, required
      - `calleDos` string
      - `numeracion` string
      - `sector` string
      - `ciudad` string, required
      - `canton` string, required
      - `provincia` string, required
      - `idProvincia` integer: Id del catálogo de NewBest; ausente mientras no entreguen el anexo de provincias.
      - `idCanton` integer
      - `idCiudad` integer
  - `valorOriginalCentavos` integer, nullable: Snapshot del tarifario congelado AL ENVIAR. Null antes de eso: mientras la solicitud es editable el precio se lee del catálogo vivo.
  - `descuentoPorcentaje` integer, nullable: Descuento comercial del distribuidor en PORCENTAJE entero (0..100), no en centavos: es lo que espera descuento_firma en la API de NewBest.
  - `valorRealCentavos` integer, nullable
  - `tarifarioVigenteDesde` string, date, nullable
  - `consentimientoAt` string, date-time, nullable: Evidencia del consentimiento LOPDP con el que el titular autorizó comunicar sus datos a NewBest.
  - `consentimientoVersion` string, nullable
  - `ultimoError` string, nullable: Motivo del último ERROR_DATOS/ERROR_ENVIO, recortado a 500 caracteres.
  - `enviadoAt` string, date-time, nullable
  - `enRevisionAt` string, date-time, nullable
  - `cerradoAt` string, date-time, nullable
  - `certificadoId` string, uuid, nullable: Certificado que cerró el trámite al subir el .p12 emitido por NewBest.
  - `purgarAt` string, date-time, nullable: Cuándo se borrará la PII de la solicitud. Null mientras el plazo no empieza a correr.
  - `purgadoAt` string, date-time, nullable
  - `atascada` boolean: Lleva más de 10 minutos en LISTA o más de 30 en ENVIANDO: la cola o el worker no responden. Desde ENVIANDO atascada se puede volver a enviar.
  - `editable` boolean: true en BORRADOR, ERROR_DATOS y ERROR_ENVIO.
  - `cancelable` boolean: true en todo menos ENVIANDO, CERTIFICADO_CARGADO y CANCELADA.
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `documentos` SolicitudFirmaDocumento[]: Solo en el detalle (GET /solicitudes-firma/{id}) y en las respuestas de POST y PATCH.
    - `id` string, uuid
    - `tipoArchivo` integer: Id del tipo de archivo en el catálogo de NewBest (4 = comprobante de pago, 9..12 = documentos de la empresa).
    - `tipoNombre` string: Nombre literal del tipo en NewBest, p. ej. COMPROBANTE_PAGO.
    - `etiqueta` string: Etiqueta humana del tipo.
    - `nombre` string: Nombre del fichero que subió el usuario, ya saneado.
    - `contentType` 'application/pdf' | 'image/jpeg' | 'image/png'
    - `extension` string: Derivada del content-type, nunca del nombre del fichero.
    - `tamanoBytes` integer
    - `sha256` string
    - `subidoNewbestAt` string, date-time, nullable: Cuándo lo aceptó NewBest; null mientras el worker no lo haya subido.
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `400`: Cuerpo inválido o validación de negocio (previene errores SRI 62/52/65/69/39)

---

[API](https://skmtc.dev/contadeo/apis/api-de-contadeo.md) · [All operations](https://skmtc.dev/contadeo/apis/api-de-contadeo/llms.txt) · [OpenAPI document](https://skmtc.dev/contadeo/apis/api-de-contadeo/revisions/461bbb9a74ce?raw)
