POST /api/documentos/documento/{id}/notificar/
POST /api/documentos/documento/{id}/notificar/
Arma lo que se le entrega al adquiriente y lo deja listo para enviar.
POST /api/documentos/documento/{id}/notificar/ en multipart, con
correo, pdf y adjuntos opcionales (hasta 10 MB entre los
archivos). El resultado es siempre un zip, y dentro va siempre el
AttachedDocument —el documento firmado y el acuse de la DIAN juntos—.
Si viene correo, reemplaza el del adquiriente del documento y el
envío va ahí; si no, va al que ya tenía. El cambio se guarda aunque la
pasarela falle, para que el reintento lo use.
Con ?descargar=1 no envía ni guarda el correo: devuelve el zip
para revisarlo. Es la forma de ver qué se le va a mandar al cliente sin
mandárselo.
Cada envío que llega a la pasarela, salga o falle, queda registrado en
/api/documentos/documento-notificacion/; la descarga no.
operationId: documentos_documento_notificar_create
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 |
|---|---|---|---|---|
descargar | query | boolean | no | Con 1 no envía nada: devuelve el zip (application/zip) para revisarlo. |
id | path | string (uuid) | sí | Un Cadena UUID que identifique este documento electrónico. |
Cuerpo de la petición
Sección titulada «Cuerpo de la petición»Tipo de contenido: multipart/form-data.
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
correo | any | no | |
pdf | string (binary) | no | |
adjuntos | array<string> | no |
Ejemplo
Sección titulada «Ejemplo»curl -X POST "https://api.rededoc.uk/api/documentos/documento/<id>/notificar/" \ -H "Authorization: <llaveapi>"Respuestas
Sección titulada «Respuestas»| Código | Descripción |
|---|---|
200 | |
400 | |
401 | Error |
404 | Error |
429 | Error |
502 |
200 — cuerpo
Sección titulada «200 — cuerpo»| Campo | Tipo | Descripción |
|---|---|---|
destinatario | string (email) | Correo del adquiriente. |
archivo | string | Nombre del zip enviado. |
tipo | string | Tipo MIME del paquete: application/zip. |
tamano | integer | Tamaño del zip, en bytes. |
contenido | array<string> | Nombres de los archivos dentro del zip. |
notificado | boolean | |
enviado | boolean | |
codigo_envio | string | Identificador del envío en la pasarela de correo. |
respuesta | object | Respuesta cruda de la pasarela de correo. |
{ "archivo": "texto", "tipo": "texto", "tamano": 1, "contenido": [ "texto" ], "notificado": true, "enviado": true, "codigo_envio": "texto", "respuesta": null}400 — cuerpo
Sección titulada «400 — 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" } ]}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" } ]}502 — cuerpo
Sección titulada «502 — 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.