API Reference — Endpoints

API Reference — Endpoints

Referencia de los endpoints de API (clases APIView y ModelViewSet DRF) expuestos por SIUD. Las vistas web de Django (formularios, dashboards, navegación) no están incluidas.

Autenticación: JWT SimpleJWT en el header Authorization: Bearer <token> salvo que se indique lo contrario. Ver Autenticación para obtener tokens.

JWT — /api/token/

MétodoEndpointAuthClaseDescripción
POST/api/token/NingunaUserLoginViewObtener access + refresh tokens
POST/api/token/refresh/NingunaSimpleJWTRenovar access token con refresh
POST /api/token/
Content-Type: application/json

{"username": "usuario", "password": "contraseña"}
import requests

resp = requests.post(
    "https://TU-DOMINIO/api/token/",
    json={"username": "usuario", "password": "contraseña"}
)
access  = resp.json()["token"]["access"]
refresh = resp.json()["token"]["refresh"]
const { data } = await axios.post(
  'https://TU-DOMINIO/api/token/',
  { username: 'usuario', password: 'contraseña' }
);
const { access, refresh } = data.token;
var body = new StringContent(
    JsonSerializer.Serialize(new { username = "usuario", password = "contraseña" }),
    Encoding.UTF8, "application/json"
);
var response = await client.PostAsync("https://TU-DOMINIO/api/token/", body);
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://TU-DOMINIO/api/token/"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(
        "{\"username\":\"usuario\",\"password\":\"contraseña\"}"
    ))
    .build();

Response 200:

{"token": {"access": "eyJ...", "refresh": "eyJ..."}, "msg": "Login success"}

Response 404: {"errors": {"non_fields_errors": ["User or Password is not Valid"]}}


EjecutarAccion — POST /api/ejecutar/<codigo>

Ejecuta un stored procedure registrado en PROCEDIMIENTO_P. El cuerpo JSON se serializa y pasa como parámetro JSON_FILTROS. Requiere sesión activa (no JWT).

PropiedadValor
MétodoPOST
Ruta/api/ejecutar/<codigo>
AuthSesión Django (IsAuthenticated)
ClaseEjecutarAccion

Response 200:

{"EsCorrecto": true, "resultado": { ... }, "mensaje": "Acción ejecutada con éxito"}

Response 400/404: texto plano con el error.


EjecutarAccionToken — GET /api/ejecutar-token/<codigo>

Ejecuta un SP vía token UUID (modelo APIToken_P), sin requerir sesión Django. Diseñado para clientes externos como PowerBI. El token puede ir en el header Authorization: Bearer <uuid> o en el query param ?token=<uuid>. Rate limit: 30 req/min por IP.

PropiedadValor
MétodoGET
Ruta/api/ejecutar-token/<codigo>
AuthUUID Token (AllowAny + validación propia)
ClaseEjecutarAccionToken
ParámetroUbicaciónDescripción
Authorization: Bearer <uuid>HeaderToken UUID de APIToken_P (preferido)
token=<uuid>QueryAlternativa al header (ej. PowerBI)
otros paramsQuerySe pasan como JSON_FILTROS al SP
GET /api/ejecutar-token/BUSCAR_EMPLEADO?identificacion=12345678
Authorization: Bearer <uuid-token>
import requests

resp = requests.get(
    "https://TU-DOMINIO/api/ejecutar-token/BUSCAR_EMPLEADO",
    headers={"Authorization": f"Bearer {api_token_uuid}"},
    params={"identificacion": "12345678"}
)
data = resp.json()  # {"EsCorrecto": true, "resultado": [...]}
const { data } = await axios.get(
  'https://TU-DOMINIO/api/ejecutar-token/BUSCAR_EMPLEADO',
  {
    params: { identificacion: '12345678' },
    headers: { 'Authorization': `Bearer ${apiTokenUuid}` }
  }
);
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", apiTokenUuid);
var response = await client.GetAsync(
    "https://TU-DOMINIO/api/ejecutar-token/BUSCAR_EMPLEADO?identificacion=12345678");
var json = await response.Content.ReadAsStringAsync();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(
        "https://TU-DOMINIO/api/ejecutar-token/BUSCAR_EMPLEADO?identificacion=12345678"))
    .header("Authorization", "Bearer " + apiTokenUuid)
    .GET()
    .build();

Response 200:

{"EsCorrecto": true, "resultado": [{"nombre": "Juan García", ...}]}

Response 401: {"error": "Token requerido."} / {"error": "Token inválido."}

Response 403: {"error": "Acción no permitida para este token."}

Response 429: {"error": "Demasiadas solicitudes. Intente más tarde."}


ImprimirPDFView — POST /api/imprimir/

Recibe HTML y lo convierte a PDF. Usado por el frontend para generar documentos descargables.

PropiedadValor
MétodoPOST
Ruta/api/imprimir/
AuthJWT o Sesión (IsAuthenticated)
ClaseImprimirPDFView

Body JSON: {"html": "<html>...</html>"}. Retorna el PDF como application/pdf.


ViewSets CRUD — Home base: /

Router DRF estándar. Todos requieren JWT o sesión (IsAuthenticated). Soportan GET (list/retrieve), POST, PUT, PATCH, DELETE.

RecursoURL baseModelo
Usuarios/usuario/USUARIO_P
Módulos/modulo/MODULO_P
Menús/menu/MENU_P
Vigencias/vigencia/VIGENCIA_P
Menú-Usuario/fmenu/MENU_F

ViewSets CRUD — Global base: /global/

Mismos métodos CRUD que los ViewSets de Home. Datos maestros del sistema.

RecursoURL baseModelo
Consecutivos/global/Consecutivo/FCONSECUTIVO_P
Barrios/global/barrio/PBARRIO_P
CIIU/global/CIIU/PCIIU_P
Dependencias/global/dependencia/PDEPENDENCIA_P
Informes/global/informe/PINFORME_P
Localidades/global/localidad/PLOCALIDAD_P
Tipos de ID/global/tipoidentificacion/PTIPOIDENTIFICACION_P
Unidades comuneras/global/unidadcomunera/PUNIDADCOMUNERA_P

GenerarCertificadoAPIView — POST /api-siud/documentos/generar/

Genera y descarga un documento firmado a partir de un código de certificado y una llave de instancia. Requiere JWT.

PropiedadValor
MétodoPOST
Ruta/api-siud/documentos/generar/
AuthJWT (IsAuthenticated)
Body{"codigo": "CERT_RESIDENCIA", "llave": "<uuid>"}

Workflow — APIs de instancia

Todos los endpoints de workflow usan base /workflow/ y requieren sesión o JWT (IsAuthenticated) salvo reconciliar-bpm que usa header propio.

Tareas y acciones

MétodoEndpointClaseDescripción
POST/workflow/api/ejecutar-accion/EjecutarAccionAPIViewEjecutar SP desde formulario BPM; opcionalmente avanza estado
POST/workflow/api/tomar-tarea/TomarTareaAPIViewTomar tarea del pool (select_for_update, libre de race condition)
POST/workflow/api/pool-status/PoolStatusAPIViewConsultar qué IDs del pool ya fueron tomados
POST/workflow/api/soportes-visibles/SoportesVisiblesAPIViewSoportes visibles de una tarea evaluando condiciones de contexto
Body de ejecutar-accion: sp_code (requerido), instf_llave (UUID del F record), jsonfiltros (objeto JSON para el SP), bpm_accion (opcional — código de acción para avanzar el proceso).

Soportes y documentos

MétodoEndpointClaseDescripción
POST/workflow/api/soportes/crear/WorkflowCrearSoporteAPIViewCrear soporte (requiere IsWorkflowDesigner)

Builder de procesos (Admin)

Todos requieren permiso IsWorkflowDesigner.

MétodoEndpointClaseDescripción
GET/workflow/api/catalogos/WorkflowCatalogosAPIViewFormularios, menús y SPs disponibles para el builder
GET/workflow/api/procesos/<llave>/tareas/<codigo>/detalle/TareaDetalleAPIViewDetalle técnico de una tarea
POST/workflow/api/procesos/<llave>/staging/guardar/StagingGuardarAPIViewGuardar cambios en staging sin afectar producción
GET/workflow/api/procesos/<llave>/refrescar/RefrescarProcesoAPIViewRecargar estado del proceso desde BD
POST/workflow/api/procesos/<llave>/publicar/PublishProcesoAPIViewPromover staging a versión activa

Formularios dinámicos

MétodoEndpointClaseDescripción
POST/workflow/api/formularios/<codigo>/guardar/FormularioSaveAPIViewGuardar JSON Schema del formulario dinámico
GET/workflow/api/formularios/<codigo>/preview/FormularioPreviewAPIViewVista previa del formulario

Webhook de reconciliación

MétodoEndpointAuthDescripción
POST/workflow/api/reconciliar-bpm/Header X-Reconcile-TokenReconciliar estado de instancia desde sistema externo

Ver Workflow / BPM para el ejemplo de código completo.