---
title: "Subir (o reemplazar) un documento de la solicitud"
method: POST
path: "/solicitudes-firma/{id}/documentos"
tags: ["solicitudes-firma"]
---

# Subir (o reemplazar) un documento de la solicitud

`POST /solicitudes-firma/{id}/documentos`

## Request

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

Solo los documentos de origen `contadeo` del tipo de firma: las fotos de cédula y la selfie las entrega el titular en el asistente de NewBest y no pasan por aquí. Un documento por tipo: volver a subir el mismo tipo reemplaza al anterior y borra su objeto. La extensión sale del content-type, nunca del nombre del fichero. Solo mientras la solicitud sea editable. Roles: owner o admin.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `tipoArchivo` integer, required: Id del tipo de archivo en el catálogo de NewBest; debe ser uno de los de origen `contadeo` del tipo de firma de esta solicitud.
  - `nombre` string, required
  - `contentType` 'application/pdf' | 'image/jpeg' | 'image/png', required: Además tiene que estar entre los formatos que admite ese tipo de archivo.
  - `base64` string, byte, required: Contenido del archivo en base64. Máximo 10 MB (~13,3 MB en base64).

## Response `201`

Documento guardado

- SolicitudFirmaDocumento: Documento que Contadeo recoge y sube a NewBest. Nunca incluye la clave del almacenamiento ni la ruta interna en el bucket de NewBest.
  - `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)
- `403`: Rol insuficiente o acceso denegado
- `404`: Recurso inexistente (o de otra cuenta — aislamiento multi-tenant)
- `409`: Conflicto de unicidad

---

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