GET /api/documentos/documento/{id}/
GET /api/documentos/documento/{id}/
Un documento no se edita: se crea, se emite y, si estaba mal, se borra.
Sin PUT ni PATCH sobre el documento. No es una restricción de
permisos sino de forma: un documento fiscal es un hecho con fecha, número y
firma, y editarlo en sitio abre la puerta a que lo que se emitió y lo que se
guarda dejen de coincidir. Mientras es borrador, corregirlo es borrarlo y
volver a crearlo —que además libera el consecutivo—; una vez emitido, lo que
corrige una factura es una nota, no un PATCH.
Lo que sí cambia el documento son las acciones de más abajo, cada una con su
regla: emitir (firma, envía o consulta), notificar. El estado no es
un campo que se escriba, es la consecuencia de una operación.
operationId: documentos_documento_retrieve
Autenticación
Sección titulada «Autenticación»Cualquiera de estas credenciales:
- LlaveApi — Llave de API de una integración. El valor completo es
Api-Key <prefijo>.<secreto>, tal como lo imprimemanage.py crear_llave_api. La llave alcanza exactamente los mismos emisores que la persona a cuyo nombre se creó.
Parámetros
Sección titulada «Parámetros»| Nombre | En | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
id | path | string (uuid) | sí | Un Cadena UUID que identifique este documento electrónico. |
Ejemplo
Sección titulada «Ejemplo»curl "https://api.rededoc.uk/api/documentos/documento/<id>/" \ -H "Authorization: <llaveapi>"Respuestas
Sección titulada «Respuestas»| Código | Descripción |
|---|---|
200 | |
401 | Error |
404 | Error |
429 | Error |
200 — cuerpo
Sección titulada «200 — cuerpo»| Campo | Tipo | Descripción |
|---|---|---|
id | string (uuid) | Solo lectura. |
documento_tipo | integer | |
documento_tipo_nombre | string | Solo lectura. |
estado | integer | Solo lectura. |
estado_nombre | string | Solo lectura. |
estado_descripcion | string | Solo lectura. |
emisor | integer | |
resolucion | integer | Admite null. |
resolucion_numero | string | Solo lectura. |
adquiriente | any | Solo lectura. |
prefijo | string | |
consecutivo | integer (int64) | |
numero | string | Número del documento (cbc:ID). Si se omite, se arma como prefijo + consecutivo. |
cufe_cude | string | Hash SHA-384 (96 hex). CUFE en facturas, CUDE en notas/soporte. Solo lectura. |
track_id | string | Identificador del envío (ZipKey del Set de Pruebas o trackId), para consultar el estado en la DIAN. Solo lectura. |
envio | any | Con qué operación se envió a la DIAN. Decide cómo se consulta después el estado: GetStatusZip para el Set de Pruebas (el track_id es un ZipKey) y GetStatus para el envío síncrono. Vacío mientras no se haya enviado. * test_set - Set de Pruebas (SendTestSetAsync) * bill_sync - Síncrono (SendBillSync) Solo lectura. |
ambiente | any | ProfileExecutionID del XML: 1 producción, 2 habilitación. Se hereda del emisor al crear y se sella al firmar; no lo decide el ajuste del servidor. * 1 - Producción * 2 - Habilitación Solo lectura. |
fecha_validacion | string (date-time) | Momento en que la DIAN aceptó el documento. Solo lectura. Admite null. |
notificado | boolean | Si ya se le entregó el documento al comprador. Lo marca la acción notificar; mientras el envío por correo no exista, significa que el paquete se armó y se entregó a quien lo pidió. Solo lectura. |
errores | array<DocumentoError> | Solo lectura. |
concepto_correccion | string | ResponseCode del DiscrepancyResponse: por qué se corrige el documento referenciado. Los códigos válidos dependen del tipo de nota (ConceptoNotaCredito, ConceptoNotaDebito, ConceptoNotaAjuste). Vacío en lo que no es nota. |
fecha_vencimiento | string (date) | DueDate del XML: hasta cuándo hay plazo para pagar. La DIAN la exige cuando la forma de pago es a crédito; en contado sobra. Admite null. |
orden_compra | string | Número de la orden de compra del adquiriente, si la hubo. |
orden_compra_fecha | string (date) | Admite null. |
orden_compra_tipo | string | cbc:OrderTypeCode: qué clase de orden es (contrato, pedido…), según la codificación que use el comprador. |
orden_compra_documento | string | cac:DocumentReference/cbc:ID: el soporte de la orden (contrato, acuerdo marco) cuando es distinto del número de la orden. |
fecha_emision | string (date) | IssueDate del XML. Si se omite se toma la fecha de hoy, que es la única con la que se puede firmar (regla FAD09). |
hora_emision | string (time) | IssueTime del XML. Si se omite se toma la hora actual, y al firmar se reescribe con la hora de la firma. |
moneda | integer | |
forma_pago | integer | Admite null. |
medio_pago | integer | Admite null. |
valor_bruto | string (decimal) | LineExtensionAmount: suma de las líneas. Solo lectura. |
total_impuestos | string (decimal) | Solo lectura. |
total_descuentos | string (decimal) | Descuentos globales del documento (no los de línea). |
descuentos_motivo | string | cbc:AllowanceChargeReason del descuento global. |
total_cargos | string (decimal) | |
cargos_motivo | string | cbc:AllowanceChargeReason del cargo global. |
total_a_pagar | string (decimal) | PayableAmount. Solo lectura. |
documento_referencia | string (uuid) | Admite null. |
observaciones | string | |
detalles | array<DocumentoDetalle> | Solo lectura. |
pos | any | Solo lectura. |
creado_en | string (date-time) | Solo lectura. |
actualizado_en | string (date-time) | Solo lectura. |
{ "id": "00000000-0000-0000-0000-000000000000", "documento_tipo": 1, "documento_tipo_nombre": "texto", "estado": 1, "estado_nombre": "texto", "estado_descripcion": "texto", "emisor": 1, "resolucion": 1, "resolucion_numero": "texto", "adquiriente": null, "prefijo": "texto", "consecutivo": 0, "numero": "texto", "cufe_cude": "texto", "track_id": "texto", "envio": null, "ambiente": null, "fecha_validacion": "2026-01-31T10:00:00-05:00", "notificado": true, "errores": [ { "id": 1, "regla": "texto", "tipo": "rechazo", "tipo_display": "texto", "mensaje": "texto" } ], "concepto_correccion": "texto", "fecha_vencimiento": "2026-01-31", "orden_compra": "texto", "orden_compra_fecha": "2026-01-31", "orden_compra_tipo": "texto", "orden_compra_documento": "texto", "fecha_emision": "2026-01-31", "hora_emision": "texto", "moneda": 1, "forma_pago": 1, "medio_pago": 1, "valor_bruto": "0.00", "total_impuestos": "0.00", "total_descuentos": "0.00", "descuentos_motivo": "texto", "total_cargos": "0.00", "cargos_motivo": "texto", "total_a_pagar": "0.00", "documento_referencia": "00000000-0000-0000-0000-000000000000", "observaciones": "texto", "detalles": [ { "id": 1, "numero_linea": 0, "descripcion": "texto", "codigo_producto": "texto", "cantidad": "0.00", "unidad_medida": 1, "valor_unitario": "0.00", "valor_total": "0.00", "descuento": "0.00", "descuento_motivo": "texto", "impuestos": [ { "id": 1, "tributo": 1, "tributo_codigo": "texto", "base_gravable": "0.00", "tarifa": "0.00", "valor": "0.00" } ], "nota": "texto", "marca": "texto", "modelo": "texto", "centro_costo": "texto", "periodo_desde": "2026-01-31", "periodo_hasta": "2026-01-31", "periodo_descripcion": "texto", "periodo_descripcion_codigo": "texto" } ], "pos": null, "creado_en": "2026-01-31T10:00:00-05:00", "actualizado_en": "2026-01-31T10:00:00-05:00"}401 — cuerpo
Sección titulada «401 — cuerpo»| Campo | Tipo | Descripción |
|---|---|---|
detail | string | Mensaje para mostrar a la persona. |
errores | array<object> | Nunca vacía. Cada error trae codigo, que es lo que el cliente mapea —los de DRF tal cual (required, invalid, does_not_exist, not_found…) y los propios en español (campo_desconocido, solicitud_invalida…)—, y mensaje, para la persona. Si el error es de un campo, su ruta va delante del mensaje: detalles[0].impuestos[0].tributo: Este campo es obligatorio. |
{ "detail": "texto", "errores": [ { "codigo": "texto", "mensaje": "texto" } ]}404 — cuerpo
Sección titulada «404 — cuerpo»| Campo | Tipo | Descripción |
|---|---|---|
detail | string | Mensaje para mostrar a la persona. |
errores | array<object> | Nunca vacía. Cada error trae codigo, que es lo que el cliente mapea —los de DRF tal cual (required, invalid, does_not_exist, not_found…) y los propios en español (campo_desconocido, solicitud_invalida…)—, y mensaje, para la persona. Si el error es de un campo, su ruta va delante del mensaje: detalles[0].impuestos[0].tributo: Este campo es obligatorio. |
{ "detail": "texto", "errores": [ { "codigo": "texto", "mensaje": "texto" } ]}429 — cuerpo
Sección titulada «429 — cuerpo»| Campo | Tipo | Descripción |
|---|---|---|
detail | string | Mensaje para mostrar a la persona. |
errores | array<object> | Nunca vacía. Cada error trae codigo, que es lo que el cliente mapea —los de DRF tal cual (required, invalid, does_not_exist, not_found…) y los propios en español (campo_desconocido, solicitud_invalida…)—, y mensaje, para la persona. Si el error es de un campo, su ruta va delante del mensaje: detalles[0].impuestos[0].tributo: Este campo es obligatorio. |
{ "detail": "texto", "errores": [ { "codigo": "texto", "mensaje": "texto" } ]}RedEDoc es un servicio de Semántica Digital S.A.S.