---
title: "Pedir una firma electrónica sin tener cuenta"
method: POST
path: "/pedidos-firma"
tags: ["pedidos-firma"]
---

# Pedir una firma electrónica sin tener cuenta

`POST /pedidos-firma`

## Request

- Base URL: `https://contadeo.com/api`
- URL: `https://contadeo.com/api/pedidos-firma`
- Auth: none required

Público, sin sesión. La firma electrónica es un producto DISTINTO del ERP: quien la pide no se registra, no necesita RUC y no pasa por la plataforma de facturación.

Rate-limit: 5 pedidos por IP cada 10 min (429), en un contador propio (`rl:pedido-firma:`) que NO comparte cupo con el alta de cuentas ni con el formulario de contacto.

Qué campos hacen falta lo decide `tipoFirma`, no el tipo de cliente: el 1 (persona natural) no lleva RUC, el 2 sí, y el 3 (representante legal) añade razón social y cargo.

Retención: las fotos de identidad y los datos del `titular` se borran a las 48 horas; el `contacto` (nombre, correo, teléfono) se conserva 180 días para poder dar seguimiento. Los dos plazos empiezan a contar al recibir el pedido, no al tramitarlo, y la purga corre cada hora para que las 48 sean ciertas.

Detrás del flag `PEDIDOS_FIRMA_HABILITADO`; apagado, responde 404.

Con PEDIDOS_FIRMA_CANAL=api, el titular acepta por separado la finalidad obligatoria de NewBest, aporta fecha de nacimiento, género, título y dirección del catálogo, sube todos los documentos y confirma por POST /pedidos-firma/{referencia}/enviar. Los pedidos previos en canal manual no cambian.

## Request body

- object
  - `tipoFirma` 1 | 2 | 3, required: 1 persona natural, 2 persona natural con RUC, 3 representante legal.
  - `vigencia` integer, required: Id del catálogo de vigencias de NewBest.
  - `esRenovacion` boolean
  - `contacto` object, required: Sobrevive al plazo corto: es lo que permite el seguimiento.
    - `nombres` string, required
    - `primerApellido` string, required
    - `segundoApellido` string
    - `email` string, email, required: A este correo le llega el archivo .p12 desde NewBest.
    - `telefono` string, required: 9 a 13 dígitos; se limpia todo lo que no sea número.
  - `titular` object, required: Datos sensibles; se borran con las fotos a las 48 horas. En canal API se exigen fecha de nacimiento, género, título y ubicación del catálogo; para representante legal, vencimiento del nombramiento.
    - `identificacion` string, required: Cédula; se valida el dígito verificador.
    - `codigoDactilar` string: 10 alfanuméricos, al REVERSO de la cédula.
    - `fechaNacimiento` string, date
    - `ruc` string: Obligatorio en los tipos 2 y 3; nunca en el 1.
    - `razonSocial` string: Tipo 3.
    - `cargo` string: Tipo 3.
    - `direccion` object: En canal API incluye calleUno, provincia, canton, ciudad e ids del catálogo geográfico.
      - `calleUno` string
      - `provincia` string
      - `canton` string
      - `ciudad` string
      - `idProvincia` integer
      - `idCanton` integer
      - `idCiudad` integer
    - `idGenero` integer: Id del catálogo de géneros; obligatorio en canal API.
    - `idTitulo` integer: Id del catálogo de títulos; obligatorio en canal API.
    - `nombramientoVigenteHasta` string, date: Obligatorio para representante legal en canal API.
  - `aceptaConsentimiento` boolean, required: Autorización para comunicar los datos a NewBest. Sin ella se rechaza.
  - `aceptaFinalidadOpcional` boolean
  - `codigoDistribuidor` string: Código del distribuidor que recomendó la firma. Opcional y SIN descuento: el importe a transferir es el mismo. Se normaliza (sin espacios ni guiones, en mayúsculas). Si viene no vacío y no corresponde a un distribuidor activo, 400 con el problema en el campo `codigoDistribuidor`. Con `DISTRIBUIDORES_FIRMA_HABILITADO` apagado se ignora.
  - `sitio` string: Honeypot: déjalo vacío.
  - `aceptaFinalidadObligatoria` boolean: Consentimiento separado de NewBest; debe ser true en canal API.

## Response `200`

Pedido recibido

- object
  - `referencia` string: Lo que la persona apunta para preguntar por su trámite.
  - `estado` string
  - `pvpConIvaCentavos` integer, nullable

## Other responses

- `400`: Datos incompletos o mal formados, o un `codigoDistribuidor` que no es de un distribuidor activo. Cuerpo: `{ mensaje, problemas: [{ campo, mensaje }] }`
- `404`: El módulo está apagado (`PEDIDOS_FIRMA_HABILITADO`)
- `429`: Demasiados pedidos desde esa IP

---

[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)
