---
title: "Emitir un comprobante (factura, NC, ND o retención)"
method: POST
path: "/documents"
tags: ["Comprobantes"]
---

# Emitir un comprobante (factura, NC, ND o retención)

`POST /documents`

## Request

- Base URL: `https://facturacobra.com/api/v1`
- URL: `https://facturacobra.com/api/v1/documents`
- Auth: API key in header `X-API-Key`

Crea y emite al SRI en una llamada. `idempotency_key` obligatorio. El comprador se DERIVA/valida; los totales se recalculan server-side. Para NC/ND envía `doc_modificado_*`; para retención (06) envía `retention_items` y un sujeto retenido identificado.

## Request body

- object
  - `tipo_comprobante` '01' | '04' | '05' | '06'
  - `idempotency_key` string, required
  - `fecha_emision` string, date: Default: hoy (Ecuador).
  - `allOf` unknown
  - `items` Item[]: Factura/NC/ND.
    - `descripcion` string, required
    - `cantidad` number, required
    - `precio_unitario` number, required: Sin IVA.
    - `descuento` number
    - `codigo_principal` string
    - `iva_codigo_porcentaje` '0' | '4' | '5' | '6' | '7' | '8': 4=15% (default), 0=0%, 5=5%, 6=no objeto, 7=exento, 8=8% feriados turísticos (solo en fechas decretadas; responsabilidad del emisor).
  - `retention_items` RetentionItem[]: Sólo retención (06).
    - `codigo_impuesto` '1' | '2' | '6', required: 1=Renta, 2=IVA, 6=ISD.
    - `codigo_retencion` string, required
    - `base_imponible` number, required
    - `porcentaje_retener` number, required: Debe coincidir con la parametrización del SRI (p.ej. 312=2%).
    - `tipo_doc_sustento` string, required
    - `numero_doc_sustento` string, required: Formato EEE-PPP-SSSSSSSSS (con guiones).
    - `fecha_emision_sustento` string, date, required
    - `sustento_iva_codigo` string: Código de IVA del documento sustento (0=sin IVA, 4=15%…).
  - `doc_modificado_tipo` string: NC/ND: tipo del documento modificado (01).
  - `doc_modificado_numero` string: NC/ND: EEE-PPP-SSSSSSSSS (con guiones).
  - `doc_modificado_fecha` string, date
  - `doc_modificado_razon` string
  - `periodo_fiscal` string: Retención: MM/YYYY.

## Response `200`

Replay idempotente (documento ya existía)

## Other responses

- `201`: Emitido (revisa emit.status = authorized)
- `400`: Validación (comprador, %, formato, etc.)
- `402`: Cuota del plan agotada
- `403`: Falta el scope 'emit'
- `422`: Firma inactiva, sin punto de emisión, o el SRI devolvió/rechazó

---

[API](https://skmtc.dev/facturacobra/apis/cobra-api-de-facturacion-electronica-sri.md) · [All operations](https://skmtc.dev/facturacobra/apis/cobra-api-de-facturacion-electronica-sri/llms.txt) · [OpenAPI document](https://skmtc.dev/facturacobra/apis/cobra-api-de-facturacion-electronica-sri/revisions/ca7de81e465d?raw)
