Documentos¶
20 endpoints para gestion de documentos (mas 4 de vinculacion a expedientes documentados en Expedientes).
Todos los endpoints usan la base URL https://gateway.your-domain.com/api/v1 y requieren los headers X-API-Key y X-User-ID salvo que se indique lo contrario.
Lectura¶
Buscar documentos¶
Busca documentos con filtros opcionales. Soporta paginacion.
Parametros query:
| Parametro | Tipo | Default | Descripcion |
|---|---|---|---|
page |
int | 1 |
Numero de pagina |
page_size |
int | 20 |
Resultados por pagina (max 100) |
search |
string | - | Busca por document_number |
status |
string | - | Filtrar por estado visual: "En edición", "Firmar ahora", "En proceso de firma", "Firmado" |
document_type |
string | - | Filtrar por acronimo del tipo: INF, DICT, etc. |
case_id |
string | - | Filtrar por expediente |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/search?status=signed&document_type=INF&page=1&page_size=10" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"documents": [
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"document_number": "IF-2025-00012-SMG-ADGEN",
"document_type": "INF",
"reference": "Informe tecnico sobre habilitacion comercial",
"status": "signed",
"created_at": "2025-06-16T09:00:00Z"
}
],
"total": 1,
"page": 1,
"page_size": 10
}
Documentos pendientes de firma¶
Devuelve los documentos que el usuario actual tiene pendientes de firma.
X-User-ID requerido
Este endpoint requiere X-User-ID obligatoriamente para identificar al firmante.
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/pending-signatures" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"documents": [
{
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"document_number": null,
"document_type": "DICT",
"reference": "Dictamen legal sobre habilitacion",
"status": "sent_to_sign",
"requested_at": "2025-06-20T14:00:00Z",
"requested_by": "Maria Garcia"
}
]
}
Detalle de documento¶
Devuelve la informacion completa de un documento.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
X-User-ID opcional
Se requiere X-User-ID para acceder a documentos que estan en proceso de firma. Para documentos en otros estados, es opcional.
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/c3d4e5f6-a7b8-9012-cdef-123456789012" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"document_number": "IF-2025-00012-SMG-ADGEN",
"document_type": {
"acronym": "INF",
"name": "Informe"
},
"reference": "Informe tecnico sobre habilitacion comercial",
"status": "signed",
"content": "<p>Contenido HTML del documento...</p>",
"created_by": {
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"full_name": "Juan Perez"
},
"signers": [
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"full_name": "Juan Perez",
"signed_at": "2025-06-17T10:30:00Z"
}
],
"created_at": "2025-06-16T09:00:00Z",
"signed_at": "2025-06-17T10:30:00Z"
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Documento no encontrado |
403 |
Sin permisos para ver el documento |
Contenido HTML¶
Devuelve el contenido HTML de un documento oficial firmado.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Solo documentos oficiales firmados
Este endpoint solo funciona para documentos que ya fueron firmados y tienen numero oficial. Los borradores no tienen contenido disponible por esta via.
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/c3d4e5f6-a7b8-9012-cdef-123456789012/content" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"document_number": "IF-2025-00012-SMG-ADGEN",
"content": "<html><body><h1>Informe Tecnico</h1><p>Se procede a informar...</p></body></html>"
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Documento no encontrado |
400 |
El documento no es oficial o no esta firmado |
URL temporal de descarga¶
Genera una URL temporal firmada para descargar el PDF del documento. La URL expira en 10 minutos.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/c3d4e5f6-a7b8-9012-cdef-123456789012/url" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"official_number": "IF-2025-00012-SMG-ADGEN",
"pdf_url": "https://r2.your-domain.com/municipio/documents/c3d4e5f6.pdf?X-Amz-Signature=abc123&X-Amz-Expires=600",
"expires_in": 600
}
Tiempo de expiracion
La URL es valida por 600 segundos (10 minutos). Despues de ese tiempo, se debe solicitar una nueva URL.
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Documento no encontrado o sin PDF disponible |
Detalles de firma¶
Devuelve los detalles de firma de un documento (firmantes, fechas, estado de cada firma).
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/c3d4e5f6-a7b8-9012-cdef-123456789012/signature-details" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"document_number": "IF-2025-00012-SMG-ADGEN",
"signature_status": "fully_signed",
"signers": [
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"full_name": "Juan Perez",
"role": "director",
"status": "signed",
"signed_at": "2025-06-17T10:30:00Z"
}
]
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Documento no encontrado |
Buscar documento oficial por numero¶
Busca un documento oficial por su numero exacto.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
doc_number |
string | Numero oficial del documento (ej: IF-2025-00012-SMG-ADGEN) |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/search-official/IF-2025-00012-SMG-ADGEN" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"document_number": "IF-2025-00012-SMG-ADGEN",
"document_type": "INF",
"reference": "Informe tecnico sobre habilitacion comercial",
"status": "signed",
"created_at": "2025-06-16T09:00:00Z"
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
No se encontro documento con ese numero |
Verificar permisos de firma¶
Verifica si un usuario tiene permisos para firmar documentos de un tipo determinado.
Parametros query:
| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
user_id |
UUID | Si | ID del usuario a verificar |
document_type_acronym |
string | Si | Acronimo del tipo de documento (ej: INF, DICT) |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/documents/check-signer-permissions?user_id=550e8400-e29b-41d4-a716-446655440000&document_type_acronym=INF" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"document_type_acronym": "INF",
"can_sign": true,
"reason": "User has signer role for INF documents"
}
Operaciones¶
Crear documento borrador¶
Crea un nuevo documento en estado borrador.
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
document_type_acronym |
string | Si | Acronimo del tipo de documento (INF, DICT, etc.) |
reference |
string | Si | Descripcion o asunto del documento |
case_id |
UUID | No | Vincular directamente a un expediente |
recipients |
list | No | Lista de UUIDs de usuarios destinatarios |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/documents/" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"document_type_acronym": "INF",
"reference": "Informe de inspeccion ocular - Local comercial Av. San Martin 1234",
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}'
Respuesta 201 Created:
{
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"document_type": "INF",
"reference": "Informe de inspeccion ocular - Local comercial Av. San Martin 1234",
"status": "draft",
"created_at": "2025-07-01T11:00:00Z"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
Tipo de documento invalido o campos requeridos faltantes |
404 |
Expediente no encontrado (si se paso case_id) |
Tipos de documentos
Para ver los tipos de documentos disponibles, usar GET /api/v1/system/document-types.
Importar PDF externo¶
Importa un archivo PDF externo como documento en el sistema.
Content-Type: multipart/form-data
Campos del formulario:
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
document_type_acronym |
string | Si | Acronimo del tipo de documento |
reference |
string | Si | Descripcion del documento |
pdf_file |
file | Si | Archivo PDF a importar |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/documents/import" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-F "document_type_acronym=INF" \
-F "reference=Informe pericial externo - Perito Martinez" \
-F "pdf_file=@/ruta/al/archivo/informe-pericial.pdf"
Respuesta 201 Created:
{
"document_id": "a7b8c9d0-e1f2-3456-ghab-567890123456",
"document_type": "INF",
"reference": "Informe pericial externo - Perito Martinez",
"status": "draft",
"is_imported": true,
"created_at": "2025-07-01T12:00:00Z"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
Archivo no es PDF valido o campos requeridos faltantes |
422 |
Archivo excede el tamano maximo permitido |
Guardar cambios en borrador¶
Actualiza el contenido y/o metadatos de un documento en estado borrador.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
content |
string | No | Contenido HTML del documento |
reference |
string | No | Nueva referencia o asunto |
signers |
list | No | Lista de UUIDs de firmantes |
recipients |
list | No | Lista de UUIDs de destinatarios |
proposed_case_ids |
list | No | Lista de UUIDs de expedientes propuestos |
Ejemplo:
curl -X PATCH "https://gateway.your-domain.com/api/v1/documents/f6a7b8c9-d0e1-2345-fgab-456789012345" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"content": "<p>Se informa que el local ubicado en Av. San Martin 1234 cumple con los requisitos de habilitacion vigentes.</p>",
"signers": ["550e8400-e29b-41d4-a716-446655440000"],
"recipients": ["660f9511-f3ac-52e5-b827-557766551111"]
}'
Respuesta 200 OK:
{
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"status": "draft",
"updated_at": "2025-07-01T13:00:00Z"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no esta en estado borrador |
403 |
Sin permisos para editar este documento |
404 |
Documento no encontrado |
Reemplazar PDF importado¶
Reemplaza el archivo PDF de un documento importado.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento importado |
Content-Type: multipart/form-data
Campos del formulario:
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
pdf_file |
file | Si | Nuevo archivo PDF |
Ejemplo:
curl -X PUT "https://gateway.your-domain.com/api/v1/documents/a7b8c9d0-e1f2-3456-ghab-567890123456/imported-pdf" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-F "pdf_file=@/ruta/al/archivo/informe-pericial-v2.pdf"
Respuesta 200 OK:
{
"document_id": "a7b8c9d0-e1f2-3456-ghab-567890123456",
"message": "PDF replaced successfully",
"updated_at": "2025-07-01T14:00:00Z"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no es importado o no esta en estado borrador |
404 |
Documento no encontrado |
422 |
Archivo no es PDF valido |
Eliminar borrador¶
Elimina un documento que se encuentra en estado draft o rejected.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Solo borradores y rechazados
Solo se pueden eliminar documentos en estado draft o rejected. Los documentos firmados o en proceso de firma no pueden eliminarse.
Ejemplo:
curl -X DELETE "https://gateway.your-domain.com/api/v1/documents/f6a7b8c9-d0e1-2345-fgab-456789012345" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no esta en estado draft o rejected |
403 |
Sin permisos para eliminar este documento |
404 |
Documento no encontrado |
Firma¶
Iniciar proceso de firma¶
Envia un documento borrador al circuito de firma. Cambia el estado del documento a sent_to_sign.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/documents/f6a7b8c9-d0e1-2345-fgab-456789012345/start-signing" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"status": "sent_to_sign",
"message": "Document sent for signing"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no esta en estado borrador o no tiene firmantes asignados |
403 |
Sin permisos para enviar a firma |
404 |
Documento no encontrado |
Requisitos previos
Antes de iniciar la firma, asegurar que el documento tenga contenido y firmantes asignados. Usar PATCH /api/v1/documents/{document_id} para configurar los firmantes.
Firmar documento¶
Aplica la firma del usuario actual al documento. Si todos los firmantes requeridos firman, el documento pasa a estado signed y se genera el numero oficial.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/documents/f6a7b8c9-d0e1-2345-fgab-456789012345/sign" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"status": "signed",
"document_number": "IF-2025-00042-SMG-ADGEN",
"signed_at": "2025-07-01T15:00:00Z"
}
Firma digital con token fisico
Este endpoint solo acepta firma electronica. Si el documento requiere firma con token fisico (signature_policy=digital_all, o el usuario es numerador con digital_num), la API devuelve 422 con el mensaje "Este documento requiere firma con token fisico. Firma desde el portal web.". La firma con token se realiza desde el portal web con FirmadorGDI.
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no esta en estado sent_to_sign |
403 |
El usuario no es firmante de este documento |
404 |
Documento no encontrado |
422 |
El documento requiere firma con token fisico |
Rechazar documento¶
Rechaza un documento que se encuentra en proceso de firma. El documento vuelve al estado rejected.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
document_id |
UUID | Identificador del documento |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
reason |
string | Si | Motivo del rechazo |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/documents/f6a7b8c9-d0e1-2345-fgab-456789012345/reject" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"reason": "El informe no incluye los datos del relevamiento de campo"
}'
Respuesta 200 OK:
{
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"status": "rejected",
"rejected_by": "Juan Perez",
"reason": "El informe no incluye los datos del relevamiento de campo"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no esta en estado sent_to_sign o motivo vacio |
403 |
El usuario no es firmante de este documento |
404 |
Documento no encontrado |
Vincular a expediente¶
Vincular documento oficial¶
Vincula un documento oficial (firmado) a un expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
official_document_id |
UUID | Si | ID del documento oficial a vincular |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/documents/link" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"official_document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012"
}'
Respuesta 200 OK:
{
"message": "Document linked to case successfully",
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no es oficial o ya esta vinculado |
403 |
Sin permisos sobre el expediente |
404 |
Expediente o documento no encontrado |
Proponer borrador¶
Propone vincular un documento en estado borrador a un expediente. Requiere aceptacion por parte del responsable del expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
document_draft_id |
UUID | Si | ID del documento borrador a proponer |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/documents/propose" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"document_draft_id": "f6a7b8c9-d0e1-2345-fgab-456789012345"
}'
Respuesta 200 OK:
{
"message": "Document proposed to case",
"proposed_id": "b8c9d0e1-f2a3-4567-hgab-678901234567",
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"status": "pending_approval"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
El documento no esta en estado borrador |
403 |
Sin permisos para proponer documentos a este expediente |
404 |
Expediente o documento no encontrado |
Aceptar propuesta¶
Acepta una propuesta de vinculacion de documento a un expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
proposed_id |
UUID | Si | ID de la propuesta a aceptar |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/documents/accept-proposal" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"proposed_id": "b8c9d0e1-f2a3-4567-hgab-678901234567"
}'
Respuesta 200 OK:
{
"message": "Proposal accepted",
"proposed_id": "b8c9d0e1-f2a3-4567-hgab-678901234567",
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
La propuesta ya fue procesada |
403 |
Sin permisos para aceptar propuestas en este expediente |
404 |
Expediente o propuesta no encontrada |
Rechazar propuesta¶
Rechaza una propuesta de vinculacion de documento.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
proposed_id |
UUID | Si | ID de la propuesta a rechazar |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/documents/reject-proposal" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"proposed_id": "b8c9d0e1-f2a3-4567-hgab-678901234567"
}'
Respuesta 200 OK:
{
"message": "Proposal rejected",
"proposed_id": "b8c9d0e1-f2a3-4567-hgab-678901234567",
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
La propuesta ya fue procesada |
403 |
Sin permisos para rechazar propuestas en este expediente |
404 |
Expediente o propuesta no encontrada |