Appearance
Presentación de certificados
Presenta certificados de uno o varios recursos en una sola petición. Los documentos quedan acreditados de inmediato: no hay una revisión posterior.
POST /ruc/api/presentaciones| Header | Requerido | Descripción |
|---|---|---|
Authorization | Sí | Bearer <token> (ver) |
Content-Type | Sí | multipart/form-data |
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id_contratista | int | Sí | Todos los recursos del lote deben pertenecerle. |
id_requisito | int | Sí | Requisito de toda la presentación. |
documentos[N] | archivo | Sí | Los PDF del lote, con N desde 0. |
documentos_identificacion[N] | string | No | Identificación del recurso del documento N. |
Cómo se vincula cada documento con su recurso
Hay dos modos, y no se pueden mezclar en un mismo lote.
Por nombre de archivo. El nombre es la identificación del recurso:
bash
curl -s -X POST 'https://auditium.com.ar/ruc/api/presentaciones' \
-H "Authorization: Bearer $TOKEN" \
-F 'id_contratista=9999' \
-F 'id_requisito=424' \
-F 'documentos[0]=@20999999999.pdf' \
-F 'documentos[1]=@20888888888.pdf'Por campo explícito, para cuando no controlás los nombres que genera tu sistema:
bash
curl -s -X POST 'https://auditium.com.ar/ruc/api/presentaciones' \
-H "Authorization: Bearer $TOKEN" \
-F 'id_contratista=9999' \
-F 'id_requisito=424' \
-F 'documentos[0]=@certificado-A7X31.pdf' \
-F 'documentos_identificacion[0]=20-99999999-9' \
-F 'documentos[1]=@certificado-B2K88.pdf' \
-F 'documentos_identificacion[1]=20-88888888-8'Si enviás documentos_identificacion[], tiene que venir para todos los documentos del lote. Un índice sin su identificación es un 400.
Los guiones son indistintos: 20-99999999-9 y 20999999999 se resuelven al mismo recurso.
Límites
| Límite | Valor para los cursos PASE |
|---|---|
| Tamaño por archivo | 500 KB |
| Documentos por petición | 100 |
Se configuran por requisito, así que pueden variar. El mensaje de error siempre trae el valor vigente.
Sólo se reciben PDF. No se admiten archivos comprimidos, ni para agrupar un lote ni para bajar el peso de un documento.
Respuesta
json
{
"data": {
"id_presentacion": 123456,
"id_requisito": 424,
"periodo": "2026-09",
"estado_auditoria": 1,
"aceptados": [
{
"indice": 0,
"nombre": "20999999999.pdf",
"identificacion": "20-99999999-9",
"id_recurso": 152348,
"id_documento": 987654
}
],
"omitidos": [],
"rechazados": [
{
"indice": 1,
"nombre": "20888888888.pdf",
"identificacion": "20888888888",
"type": "urn:auditium:api:error:documento-rechazado",
"title": "Documento rechazado",
"detail": "No se encontró un recurso activo con esa identificación en el contratista indicado."
}
],
"resumen": {
"recibidos": 2,
"aceptados": 1,
"omitidos": 0,
"rechazados": 1
}
},
"_links": [
{ "href": "https://auditium.com.ar/ruc/api/asignaciones_personal", "rel": "asignaciones_personal", "method": "GET" }
]
}id_presentacion identifica la presentación creada, pero no hay un endpoint para consultarla: presentar y acreditar ocurren en el mismo paso, y la respuesta ya trae todo lo que se registró. Por eso _links lleva las transiciones disponibles y no un self.
Las tres listas viajan siempre, aunque estén vacías. Cada entrada lleva su indice, que es el N de documentos[N]: es la forma de saber a qué archivo corresponde, porque las listas están separadas por resultado y su orden no reproduce el del envío.
| Lista | Qué contiene |
|---|---|
aceptados[] | Documentos presentados y acreditados |
omitidos[] | El requisito ya estaba acreditado para ese recurso |
rechazados[] | No se pudieron presentar. Cada uno con su type y su motivo |
Códigos de respuesta
| Código | Cuándo |
|---|---|
201 | Se creó la presentación. Puede haber documentos rechazados |
200 | Todos los documentos estaban ya acreditados. No se creó ninguna presentación |
400 | Falta un parámetro, o se mezclaron los dos modos de vínculo |
403 | El requisito o el contratista están fuera de tu alcance |
413 | El lote excede el máximo de documentos |
415 | El cuerpo no se envió como multipart/form-data |
422 | Ningún documento se pudo presentar |
Un lote parcial es 201, no un error. El criterio es simple: si se creó una presentación, es 201; si no se creó ninguna, es 422. Un documento mal enviado no bloquea los demás del lote.
Reenviar un lote no duplica nada
Los cursos son de presentación única: una vez acreditado el requisito para un recurso, un envío posterior del mismo certificado se informa en omitidos[] y no genera un documento nuevo.
Eso hace que el reintento sea seguro. Si una petición corta por timeout y no sabés si entró, reenviala: lo que ya estaba acreditado vuelve como omitido y lo que falte se presenta.
Si todo el lote estaba ya acreditado, la respuesta es 200 con id_presentacion en null, porque no hubo nada que crear.
Qué queda registrado
Cada documento aceptado queda acreditado contra el requisito en el período en que se presenta —periodo de la respuesta—, con independencia de la fecha de emisión del certificado.
La presentación se crea, se puebla y se confirma en una sola operación. No hay un paso posterior de confirmación, ni forma de eliminarla.
Errores relacionados
formato-no-admitido—415lote-demasiado-grande—413documento-rechazado— por documentoarchivo-demasiado-grande— por documentoauditoria-inexistente— por documento, no requiere acción de tu parteambito-insuficiente—403