{"openapi":"3.1.0","info":{"title":"Alfil API","version":"v1","description":"API pública de transparencia política de Alfil. Read-only. Cada respuesta incluye su fuente oficial y fecha de corte. Ver la política de datos personales en ADR-020."},"servers":[{"url":"https://api.alfil.co"}],"security":[{"oauth2":["buscar:read"]}],"paths":{"/v1/buscar":{"get":{"summary":"Búsqueda federada","description":"Descubre y desambigua sobre políticos, partidos, contratos e investigaciones.","tags":["Búsqueda"],"parameters":[{"in":"query","name":"cursor","schema":{"type":"string"},"description":"Cursor de paginación"},{"in":"query","name":"limit","schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"description":"Máximo de resultados (1-100, default 25)"},{"in":"query","name":"q","schema":{"type":"string","minLength":2},"description":"Término de búsqueda (mín. 2 caracteres)","required":true},{"in":"query","name":"tipos","schema":{"type":"array","items":{"type":"string","enum":["politico","partido","contrato","investigacion"]}},"description":"Filtrar por tipo de entidad"},{"in":"query","name":"response_format","schema":{"default":"concise","type":"string","enum":["concise","detailed"]},"description":"detailed agrega el bloque acciones a cada resultado"}],"responses":{"200":{"description":"Resultados de búsqueda","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuscarResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/geografias":{"get":{"summary":"Resolver geografías (DIVIPOLA)","description":"Resuelve nombres de lugares a códigos DIVIPOLA. Reutilizada por electoral/contratación/finanzas.","tags":["Geografías"],"parameters":[{"in":"query","name":"q","schema":{"type":"string"},"description":"Nombre a resolver (p. ej. cali)"},{"in":"query","name":"departamento","schema":{"type":"string"},"description":"DIVIPOLA del departamento — lista sus municipios"},{"in":"query","name":"nivel","schema":{"type":"string","enum":["departamento","municipio"]},"description":"Nivel a listar"}],"responses":{"200":{"description":"Entradas geográficas","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeografiasResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/contratos":{"get":{"summary":"Buscar contratos (SECOP)","tags":["Contratación"],"parameters":[{"in":"query","name":"cursor","schema":{"type":"string"},"description":"Cursor de paginación"},{"in":"query","name":"limit","schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"description":"Máximo de resultados (1-100, default 25)"},{"in":"query","name":"q","schema":{"type":"string","minLength":2},"description":"Texto libre: objeto, entidad o contratista"},{"in":"query","name":"nit","schema":{"type":"string"},"description":"NIT de la entidad contratante"},{"in":"query","name":"cedula","schema":{"type":"string"},"description":"Cédula como filtro de búsqueda (cruce legítimo de control social)"}],"responses":{"200":{"description":"Contratos en listado (sin cédula)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContratosBuscarResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/contratos/{id}":{"get":{"summary":"Detalle de contrato","description":"Incluye la cédula del contratista persona natural en identifier (solo en detalle, ADR-020).","tags":["Contratación"],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"description":"Id del contrato","required":true}],"responses":{"200":{"description":"Detalle de contrato","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contrato"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/contratacion/procesos/{id}":{"get":{"summary":"Proponentes de un proceso de contratación","description":"Ganadores y no ganadores de un proceso — un único proponente se declara explícitamente.","tags":["Contratación"],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"description":"Id del proceso de contratación (SECOP)","required":true}],"responses":{"200":{"description":"Proceso con sus proponentes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcesoContratacion"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/contratos/{id}/adiciones":{"get":{"summary":"Adiciones de un contrato (SECOP II)","description":"Modificaciones de valor en orden cronológico, nunca un total corregido.","tags":["Contratación"],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"description":"Id del contrato","required":true}],"responses":{"200":{"description":"Adiciones del contrato","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContratoAdicionesResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/electoral/resultados":{"get":{"summary":"Resultados electorales","description":"Drill-down dept→mun→puesto→mesa. Etiqueta preconteo|escrutinio siempre presente.","tags":["Electoral"],"parameters":[{"in":"query","name":"cursor","schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Cursor de paginación (posición del ranking desde la que continuar)"},{"in":"query","name":"limit","schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"description":"Máximo de resultados (1-100, default 25)"},{"in":"query","name":"eleccion","schema":{"type":"string"},"description":"Código público {tipo}-{año}[-{ámbito}] (p. ej. presidencia-2026, presidencia-2026-2v, camara-2026-antioquia, alcalde-2023-medellin) o id interno numérico","required":true},{"in":"query","name":"departamento","schema":{"type":"string"},"description":"Nombre de departamento (accent-insensitive); ignorado si el código ya trae ámbito departamental"},{"in":"query","name":"municipio","schema":{"type":"string"},"description":"Nombre de municipio + departamento resuelto; ambiguo → error accionable"},{"in":"query","name":"zona","schema":{"type":"string"},"description":"Nombre de zona/localidad (hoy solo localidades de Bogotá)"},{"in":"query","name":"puesto","schema":{"type":"string"},"description":"Nombre/código de puesto de votación, acotado al municipio resuelto; ambiguo → no se resuelve (queda en el nivel anterior)"},{"in":"query","name":"orden","schema":{"default":"votos_desc","type":"string","enum":["votos_desc"]},"description":"Orden de los resultados (hoy solo votos_desc, el único que soporta el RPC)"},{"in":"query","name":"partido","schema":{"type":"string"},"description":"Nombre del partido para filtrar (case-insensitive; no es un slug real pese al nombre del parámetro RPC)"}],"responses":{"200":{"description":"Resultados por ámbito","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadosElectorales"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/electoral/desglose":{"get":{"summary":"Desglose geográfico de una elección","description":"Votos totales (o de un candidato) por cada hijo geográfico del ámbito consultado (dept→mun→zona/puesto→mesa).","tags":["Electoral"],"parameters":[{"in":"query","name":"eleccion","schema":{"type":"string"},"description":"Código público {tipo}-{año}[-{ámbito}] (p. ej. presidencia-2026, camara-2026-antioquia) o id interno numérico","required":true},{"in":"query","name":"departamento","schema":{"type":"string"},"description":"Nombre de departamento (accent-insensitive); ignorado si el código ya trae ámbito departamental"},{"in":"query","name":"municipio","schema":{"type":"string"},"description":"Nombre de municipio + departamento resuelto; ambiguo → error accionable"},{"in":"query","name":"zona","schema":{"type":"string"},"description":"Nombre de zona/localidad (hoy solo localidades de Bogotá); alias de \"localidad\""},{"in":"query","name":"localidad","schema":{"type":"string"},"description":"Alias de \"zona\" — localidades de Bogotá"},{"in":"query","name":"candidato","schema":{"type":"string","pattern":"^[1-9]\\d{5,11}$"},"description":"Cédula del candidato para desglosar SUS votos por hijo geográfico (en vez del total). Cruce legítimo de control social (ADR-020)."},{"in":"query","name":"orden","schema":{"default":"votos_desc","type":"string","enum":["votos_desc","votos_asc"]},"description":"votos_desc (default) o votos_asc. Combinado con \"candidato\", votos_asc responde \"¿dónde debería fortalecerme?\" (los hijos donde el candidato sacó menos votos primero)."}],"responses":{"200":{"description":"Desglose por hijo geográfico","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectoralDesglose"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/electoral/puestos":{"get":{"summary":"Puestos de votación geolocalizados","description":"Puestos de un municipio con coordenadas, para razonamiento espacial y mapas.","tags":["Electoral"],"parameters":[{"in":"query","name":"eleccion","schema":{"type":"string"},"description":"Código público {tipo}-{año}[-{ámbito}] (p. ej. presidencia-2026, alcalde-2023-medellin) o id interno numérico","required":true},{"in":"query","name":"departamento","schema":{"type":"string"},"description":"Departamento del municipio (accent-insensitive). Requerido salvo que el código de elección ya lo traiga embebido (p. ej. alcalde-2023-medellin)"},{"in":"query","name":"municipio","schema":{"type":"string"},"description":"Nombre del municipio (requerido) + departamento resuelto","required":true},{"in":"query","name":"candidato","schema":{"type":"string","pattern":"^[1-9]\\d{5,11}$"},"description":"Cédula del candidato para agregar votos_candidato por puesto. Cruce legítimo de control social (ADR-020)."},{"in":"query","name":"partido","schema":{"type":"string"},"description":"Slug del partido (catálogo de Alfil) para agregar votos_partido por puesto"}],"responses":{"200":{"description":"Puestos con geolocalización","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectoralMapa"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/electoral/censo":{"get":{"summary":"Censo electoral por edad y sexo","description":"Votantes habilitados de una elección por sexo y, cuando la fuente lo trae, por rango etario, a nivel nacional/departamental/municipal/puesto. Cita el radicado oficial (RNEC) o DIVIPOL como fuente.","tags":["Electoral"],"parameters":[{"in":"query","name":"eleccion","schema":{"type":"string"},"description":"Código público {tipo}-{año}[-{ámbito}] (p. ej. presidencia-2026, camara-2026-antioquia) o id interno numérico","required":true},{"in":"query","name":"geografia","schema":{"type":"string","pattern":"^\\d{2}(\\d{3})?$"},"description":"Código DIVIPOLA del departamento (2 dígitos) o municipio (5 dígitos) a consultar; obligatorio salvo nivel=nacion"},{"in":"query","name":"nivel","schema":{"default":"nacion","type":"string","enum":["nacion","departamento","municipio","puesto"]},"description":"Nivel de agregación del censo"},{"in":"query","name":"cursor","schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Posición desde la que continuar el desglose `filas` (para recuperar el resto cuando la respuesta anterior trae truncado=true / pagina.has_more=true)"}],"responses":{"200":{"description":"Censo por sexo y edad","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectoralCenso"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/politicos":{"get":{"summary":"Buscar políticos","tags":["Políticos"],"parameters":[{"in":"query","name":"cursor","schema":{"type":"string"},"description":"Cursor de paginación"},{"in":"query","name":"limit","schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"description":"Máximo de resultados (1-100, default 25)"},{"in":"query","name":"q","schema":{"type":"string"},"description":"Nombre del político"},{"in":"query","name":"partido","schema":{"type":"string"},"description":"Filtrar por partido"},{"in":"query","name":"cargo","schema":{"type":"string"},"description":"Filtrar por cargo"}],"responses":{"200":{"description":"Políticos en listado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoliticosBuscarResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/politicos/{slug}":{"get":{"summary":"Perfil de político","description":"Incluye cédula + cedula_fuente si hay participación política pública (ADR-020).","tags":["Políticos"],"parameters":[{"in":"path","name":"slug","schema":{"type":"string"},"description":"Slug público del político","required":true}],"responses":{"200":{"description":"Perfil del político","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoliticoPerfil"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/partidos/{slug}":{"get":{"summary":"Perfil de partido","tags":["Partidos"],"parameters":[{"in":"path","name":"slug","schema":{"type":"string"},"description":"Slug del partido","required":true}],"responses":{"200":{"description":"Perfil del partido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartidoPerfil"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/congreso/actividad":{"get":{"summary":"Actividad del Congreso","description":"Votaciones, proyectos y autorías (atribución Congreso Visible — Uniandes).","tags":["Congreso"],"parameters":[{"in":"query","name":"cursor","schema":{"type":"string"},"description":"Cursor de paginación"},{"in":"query","name":"limit","schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"description":"Máximo de resultados (1-100, default 25)"},{"in":"query","name":"politico","schema":{"type":"string"},"description":"Slug del congresista"},{"in":"query","name":"tipo","schema":{"type":"string","enum":["votacion","proyecto","autoria"]},"description":"Tipo de actividad"}],"responses":{"200":{"description":"Actividad legislativa","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CongresoResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/congreso/votaciones":{"get":{"summary":"Buscar votaciones del Congreso","description":"Votaciones nominales por tema (vocabulario cerrado) y fecha, con el id que acepta el detalle.","tags":["Congreso"],"parameters":[{"in":"query","name":"cursor","schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Cursor de paginación (posición desde la que continuar)"},{"in":"query","name":"limit","schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"description":"Máximo de resultados (1-100, default 25)"},{"in":"query","name":"tema","schema":{"type":"string","enum":["Paz y posconflicto","Reforma pensional","Reforma laboral","Reforma a la salud","Presupuesto y hacienda","Justicia","Seguridad y defensa","Ambiente y clima","Educación","Derechos humanos","Tierras y agro","Anticorrupción","Régimen político","Relaciones exteriores","Vivienda y territorio","Transporte e infraestructura","Economía y comercio","Honores y conmemoraciones"]},"description":"Tema legislativo (vocabulario cerrado)"}],"responses":{"200":{"description":"Votaciones en listado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotacionesResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/congreso/votaciones/{id}":{"get":{"summary":"Detalle de una votación del Congreso","description":"Resultado, conteo y la respuesta tipada de cada miembro (atribución Congreso Visible — Uniandes).","tags":["Congreso"],"parameters":[{"in":"path","name":"id","schema":{"type":"string","minLength":1,"pattern":"^[1-9]\\d*$"},"description":"Id de la votación","required":true}],"responses":{"200":{"description":"Detalle de la votación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotoDetalle"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/congreso/proyectos/{slug}":{"get":{"summary":"Detalle de un proyecto de ley","description":"Estado, autores y votaciones que referenciaron el proyecto (atribución Congreso Visible — Uniandes).","tags":["Congreso"],"parameters":[{"in":"path","name":"slug","schema":{"type":"string","minLength":1},"description":"Slug público del proyecto de ley","required":true}],"responses":{"200":{"description":"Detalle del proyecto de ley","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProyectoDetalle"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/congreso/congresistas/{slug}/votos":{"get":{"summary":"Registro de votación de un congresista","description":"Historial de votos de un congresista, con el proyecto referenciado en cada uno.","tags":["Congreso"],"parameters":[{"in":"path","name":"slug","schema":{"type":"string","minLength":1},"description":"Slug público del congresista","required":true}],"responses":{"200":{"description":"Registro de votación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CongresistaVotosResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/finanzas/territoriales":{"get":{"summary":"Finanzas territoriales","tags":["Finanzas"],"parameters":[{"in":"query","name":"entidad","schema":{"type":"string"},"description":"DIVIPOLA o nombre de la entidad territorial"},{"in":"query","name":"anio","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Año fiscal"}],"responses":{"200":{"description":"Presupuesto y ejecución (CUIPO)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinanzasResponse"}}}},"401":{"description":"Token faltante, expirado o de emisor inesperado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Scope insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota agotada o rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"BuscarResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ResultadoBusqueda"}},"page":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["data","page","fuente"],"additionalProperties":false},"ResultadoBusqueda":{"type":"object","properties":{"tipo":{"type":"string","enum":["politico","partido","contrato","investigacion"]},"id":{"type":"string","description":"Conector tipado a la tool de detalle","example":"gustavo-bolivar"},"titulo":{"type":"string"},"resumen":{"type":"string"},"destacado":{"description":"Campos de desambiguación por tipo","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"url":{"type":"string"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}},"acciones":{"description":"Solo en response_format=detailed","type":"array","items":{"$ref":"#/components/schemas/AccionSugerida"}}},"required":["tipo","id","titulo","resumen","url","referencias"],"additionalProperties":false},"Referencia":{"type":"object","properties":{"tipo":{"type":"string","enum":["pagina_alfil","registro_oficial","documento_oficial","coleccion_oficial"]},"titulo":{"type":"string"},"url":{"type":"string","pattern":"^[hH][tT][tT][pP][sS]:\\/\\/[^/?#@]+(?:[/?#].*)?$","format":"uri"},"proveedor":{"type":"string"},"id_externo":{"type":"string"}},"required":["tipo","titulo","url","proveedor"],"additionalProperties":false,"description":"Enlace HTTPS navegable a Alfil o a una fuente oficial"},"AccionSugerida":{"type":"object","properties":{"tool":{"type":"string","description":"Tool MCP para profundizar","example":"alfil_politico_perfil"},"args":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Argumentos ya armados"}},"required":["tool","args"],"additionalProperties":false},"Page":{"type":"object","properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor opaco de la siguiente página; null si no hay más"},"has_more":{"type":"boolean","description":"Indica si existen más resultados"}},"required":["cursor","has_more"],"additionalProperties":false,"description":"Paginación por cursor opaco (no offset)"},"Fuente":{"type":"object","properties":{"nombre":{"type":"string","description":"Fuente oficial del dato","example":"SECOP II — datos.gov.co"},"url":{"description":"URL de la fuente oficial","type":"string"},"corte":{"type":"string","description":"Fecha de corte del dato (ISO 8601)","example":"2026-07-09"},"licencia":{"description":"Licencia de la fuente","example":"CC BY-SA 4.0","type":"string"}},"required":["nombre","corte"],"additionalProperties":false,"description":"Proveniencia: fuente oficial y fecha de corte (atribución Ley 1712)"},"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Código de error estable (ASCII)","example":"quota_exceeded"},"message":{"type":"string"},"metric":{"type":"string"},"resetAt":{"type":"string"}},"required":["code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false},"GeografiasResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Geografia"}}},"required":["data"],"additionalProperties":false},"Geografia":{"type":"object","properties":{"divipola":{"type":"string","description":"Código DIVIPOLA (5 dígitos para municipio)","example":"76001"},"nombre":{"type":"string","example":"Cali"},"nivel":{"type":"string","enum":["departamento","municipio"]},"departamento":{"type":"object","properties":{"divipola":{"type":"string"},"nombre":{"type":"string"}},"required":["divipola","nombre"],"additionalProperties":false}},"required":["divipola","nombre","nivel"],"additionalProperties":false,"description":"Entrada geográfica DIVIPOLA"},"ContratosBuscarResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ContratoListItem"}},"page":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["data","page","fuente"],"additionalProperties":false},"ContratoListItem":{"type":"object","properties":{"id":{"type":"string","example":"CO1.PCCNTR.4821993"},"objeto":{"type":"string"},"entidad":{"type":"object","properties":{"nombre":{"type":"string"},"nit":{"type":"string"}},"required":["nombre","nit"],"additionalProperties":false},"contratista":{"type":"object","properties":{"nombre":{"type":"string"},"tipo":{"type":"string","enum":["persona_juridica","persona_natural"]}},"required":["nombre","tipo"],"additionalProperties":false},"valor_cop":{"type":"string","description":"Valor en COP (bigint como string)","example":"54000000"},"valor_dudoso":{"type":"boolean","description":"true cuando el valor publicado no pasa la regla de plausibilidad de Alfil y ninguna fuente lo confirmó como está","example":false},"veredicto_valor":{"type":"string","enum":["plausible","recovered","document_verified","unverifiable"],"description":"Veredicto de Alfil sobre el valor publicado: plausible, recuperado de las fuentes de financiación, verificado en el contrato firmado o sin verificar","example":"plausible"},"valor_corregido":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Valor en COP que confirman las fuentes de financiación o el contrato firmado; null cuando no hay corrección","example":null},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}},"origen":{"description":"Dataset SECOP de origen del contrato (búsqueda dual, fix 2026-07-13)","example":"SECOP II","type":"string","enum":["SECOP I","SECOP II"]}},"required":["id","objeto","entidad","contratista","valor_cop","valor_dudoso","veredicto_valor","valor_corregido","referencias"],"additionalProperties":false,"description":"Contrato en listado (sin cédula)"},"Contrato":{"type":"object","properties":{"id":{"type":"string"},"objeto":{"type":"string"},"entidad":{"type":"object","properties":{"nombre":{"type":"string"},"nit":{"type":"string"}},"required":["nombre","nit"],"additionalProperties":false},"contratista":{"type":"object","properties":{"nombre":{"type":"string"},"tipo":{"type":"string","enum":["persona_juridica","persona_natural"]},"identifier":{"anyOf":[{"$ref":"#/components/schemas/Identifier"},{"type":"null"}],"description":"Cédula/NIT completo — solo en detalle (ADR-020)"}},"required":["nombre","tipo","identifier"],"additionalProperties":false},"valor_cop":{"type":"string"},"valor_dudoso":{"type":"boolean","description":"true cuando el valor publicado no pasa la regla de plausibilidad de Alfil y ninguna fuente lo confirmó como está","example":false},"veredicto_valor":{"type":"string","enum":["plausible","recovered","document_verified","unverifiable"],"description":"Veredicto de Alfil sobre el valor publicado: plausible, recuperado de las fuentes de financiación, verificado en el contrato firmado o sin verificar","example":"plausible"},"valor_corregido":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Valor en COP que confirman las fuentes de financiación o el contrato firmado; null cuando no hay corrección","example":null},"fecha_firma":{"type":"string"},"fuente":{"$ref":"#/components/schemas/Fuente"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["id","objeto","entidad","contratista","valor_cop","valor_dudoso","veredicto_valor","valor_corregido","fuente","referencias"],"additionalProperties":false,"description":"Detalle de contrato SECOP (sin datos de contacto semiprivados)"},"Identifier":{"type":"object","properties":{"scheme":{"type":"string","enum":["COL-NIT","COL-IDCARD"],"description":"Esquema del identificador (OCDS)"},"id":{"type":"string","description":"Número de identificación","example":"18610581"}},"required":["scheme","id"],"additionalProperties":false,"description":"Identificador de persona o entidad (estándar OCDS)"},"ProcesoContratacion":{"type":"object","properties":{"id":{"type":"string"},"proponentes":{"oneOf":[{"type":"object","properties":{"estado_fuente":{"type":"string","const":"no_consultado"},"registros":{"type":"null"},"unico_proponente":{"type":"null"},"truncado":{"type":"null"},"corte":{"type":"null"},"consultado_en":{"type":"string"}},"required":["estado_fuente","registros","unico_proponente","truncado","corte","consultado_en"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"ok"},"registros":{"type":"array","items":{"$ref":"#/components/schemas/Proponente"}},"unico_proponente":{"type":"boolean","description":"Si únicamente se presentó un proponente — el hallazgo que expone esta feature"},"truncado":{"type":"boolean","description":"Si la lista alcanzó el límite de la consulta (posiblemente incompleta)"},"corte":{"type":"string"},"consultado_en":{"type":"string"}},"required":["estado_fuente","registros","unico_proponente","truncado","corte","consultado_en"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"error"},"registros":{"type":"null"},"unico_proponente":{"type":"null"},"truncado":{"type":"null"},"corte":{"type":"null"},"consultado_en":{"type":"string"}},"required":["estado_fuente","registros","unico_proponente","truncado","corte","consultado_en"],"additionalProperties":false}],"type":"object"}},"required":["id","proponentes"],"additionalProperties":false,"description":"Proceso de contratación con sus proponentes, ganadores y no ganadores"},"Proponente":{"type":"object","properties":{"nombre":{"type":"string"},"adjudicado":{"type":"boolean","description":"Si este proponente resultó adjudicatario"},"calificacion":{"type":"string"},"fuente":{"type":"string","enum":["SECOP I","SECOP II"]}},"required":["nombre","adjudicado","calificacion","fuente"],"additionalProperties":false,"description":"Proponente de un proceso de contratación (ganador o no)"},"ContratoAdicionesResponse":{"type":"object","properties":{"id":{"type":"string"},"adiciones":{"oneOf":[{"type":"object","properties":{"estado_fuente":{"type":"string","const":"no_consultado"},"registros":{"type":"null"},"truncado":{"type":"null"},"corte":{"type":"null"},"consultado_en":{"type":"string"}},"required":["estado_fuente","registros","truncado","corte","consultado_en"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"ok"},"registros":{"type":"array","items":{"$ref":"#/components/schemas/Adicion"}},"truncado":{"type":"boolean","description":"Si la lista alcanzó el límite de la consulta (posiblemente incompleta)"},"corte":{"type":"string"},"consultado_en":{"type":"string"}},"required":["estado_fuente","registros","truncado","corte","consultado_en"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"error"},"registros":{"type":"null"},"truncado":{"type":"null"},"corte":{"type":"null"},"consultado_en":{"type":"string"}},"required":["estado_fuente","registros","truncado","corte","consultado_en"],"additionalProperties":false}],"type":"object"}},"required":["id","adiciones"],"additionalProperties":false,"description":"Adiciones (modificaciones de valor) de un contrato SECOP II"},"Adicion":{"type":"object","properties":{"id":{"type":"string"},"tipo":{"type":"string"},"descripcion":{"type":"string","description":"Texto libre de la fuente; cualquier valor monetario de la adición vive acá, sin parsear"},"fecha_registro":{"type":"string"}},"required":["id","tipo","descripcion","fecha_registro"],"additionalProperties":false,"description":"Adición (modificación de valor) de un contrato SECOP II"},"ResultadosElectorales":{"type":"object","properties":{"eleccion":{"type":"object","properties":{"codigo":{"type":"string"},"nombre":{"type":"string"}},"required":["codigo","nombre"],"additionalProperties":false},"ambito":{"$ref":"#/components/schemas/AmbitoGeografico"},"resultados":{"type":"array","items":{"$ref":"#/components/schemas/ResultadoCandidato"}},"page":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["eleccion","ambito","resultados","page","fuente"],"additionalProperties":false},"AmbitoGeografico":{"type":"object","properties":{"nivel":{"type":"string","enum":["nacional","departamento","municipio","zona","puesto","mesa"]},"departamento":{"type":"object","properties":{"divipola":{"type":"string"},"nombre":{"type":"string"}},"required":["divipola","nombre"],"additionalProperties":false},"municipio":{"type":"object","properties":{"divipola":{"type":"string"},"nombre":{"type":"string"}},"required":["divipola","nombre"],"additionalProperties":false},"zona":{"description":"Zona/localidad; `divipola` es el id interno, NO un código DIVIPOLA oficial","type":"object","properties":{"divipola":{"type":"string"},"nombre":{"type":"string"}},"required":["divipola","nombre"],"additionalProperties":false},"puesto":{"description":"Puesto de votación; `divipola` es el id interno, NO un código DIVIPOLA oficial","type":"object","properties":{"divipola":{"type":"string"},"nombre":{"type":"string"}},"required":["divipola","nombre"],"additionalProperties":false}},"required":["nivel"],"additionalProperties":false,"description":"Ámbito consultado, ecoado con código DIVIPOLA + nombre"},"ResultadoCandidato":{"type":"object","properties":{"candidato":{"type":"string"},"partido":{"type":"string"},"votos":{"type":"string","description":"Votos (bigint como string)","example":"48213"},"porcentaje":{"type":"number"},"ranking":{"description":"Posición en el ranking (bigint como string)","example":"1","type":"string"},"is_elected":{"description":"Si el candidato resultó electo","type":"boolean"}},"required":["candidato","partido","votos"],"additionalProperties":false},"ElectoralDesglose":{"type":"object","properties":{"eleccion":{"type":"object","properties":{"codigo":{"type":"string"},"nombre":{"type":"string"}},"required":["codigo","nombre"],"additionalProperties":false},"ambito":{"$ref":"#/components/schemas/AmbitoGeografico"},"candidato":{"description":"Presente solo si se filtró por candidato — \"votos\" en cada hijo son los de este candidato","type":"object","properties":{"cedula":{"type":"string"},"nombre":{"type":"string"}},"required":["cedula","nombre"],"additionalProperties":false},"orden":{"type":"string","enum":["votos_desc","votos_asc"]},"hijos":{"type":"array","items":{"$ref":"#/components/schemas/ElectoralDesgloseHijo"}},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["eleccion","ambito","orden","hijos","fuente"],"additionalProperties":false},"ElectoralDesgloseHijo":{"type":"object","properties":{"nombre":{"type":"string"},"codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código interno del hijo (no siempre un código DIVIPOLA oficial)"},"nivel":{"type":"string","enum":["departamento","municipio","zona","puesto","mesa"],"description":"Nivel geográfico del hijo — lo determina el RPC según qué tan profundo esté el ámbito consultado"},"votos":{"type":"string","description":"Votos (bigint como string)","example":"48213"},"tiene_hijos":{"type":"boolean","description":"Si este hijo admite más drill-down (otra llamada más profunda)"}},"required":["nombre","codigo","nivel","votos","tiene_hijos"],"additionalProperties":false},"ElectoralMapa":{"type":"object","properties":{"eleccion":{"type":"object","properties":{"codigo":{"type":"string"},"nombre":{"type":"string"}},"required":["codigo","nombre"],"additionalProperties":false},"municipio":{"type":"object","properties":{"divipola":{"type":"string"},"nombre":{"type":"string"}},"required":["divipola","nombre"],"additionalProperties":false},"candidato":{"type":"object","properties":{"cedula":{"type":"string"},"nombre":{"type":"string"}},"required":["cedula","nombre"],"additionalProperties":false},"partido":{"type":"object","properties":{"slug":{"type":"string"},"nombre":{"type":"string"}},"required":["slug","nombre"],"additionalProperties":false},"puestos":{"type":"array","items":{"$ref":"#/components/schemas/PuestoMapa"}},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"},"description":"Enlaces navegables a Alfil derivados del filtro aplicado (p. ej. el perfil del partido); vacío si el mapa no fue filtrado por una entidad navegable"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["eleccion","municipio","puestos","referencias","fuente"],"additionalProperties":false},"PuestoMapa":{"type":"object","properties":{"id":{"type":"string"},"nombre":{"type":"string"},"direccion":{"anyOf":[{"type":"string"},{"type":"null"}]},"lat":{"anyOf":[{"type":"number"},{"type":"null"}]},"lng":{"anyOf":[{"type":"number"},{"type":"null"}]},"votos_totales":{"type":"string","description":"Votos totales del puesto (bigint como string)"},"votos_candidato":{"description":"Presente solo si se filtró por candidato","type":"string"},"votos_partido":{"description":"Presente solo si se filtró por partido","type":"string"},"mesas":{"anyOf":[{"type":"number"},{"type":"null"}]},"habilitados":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Censo electoral habilitado en el puesto"}},"required":["id","nombre","direccion","lat","lng","votos_totales","mesas","habilitados"],"additionalProperties":false},"ElectoralCenso":{"type":"object","properties":{"eleccion":{"type":"object","properties":{"codigo":{"type":"string"},"nombre":{"type":"string"}},"required":["codigo","nombre"],"additionalProperties":false},"fecha":{"type":"string","description":"Fecha de corte del censo (fecha de la elección), ISO 8601"},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"por_sexo":{"type":"object","properties":{"mujeres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hombres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["mujeres","hombres"],"additionalProperties":false},"por_edad":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/CensoEdad"}},{"type":"null"}],"description":"null cuando la fuente solo trae la partición por sexo (DIVIPOL)"},"filas":{"type":"array","items":{"$ref":"#/components/schemas/CensoFila"}},"truncado":{"type":"boolean","description":"true cuando esta página no trae el resto del desglose crudo (equivalente a pagina.has_more); total/por_sexo/por_edad siempre reflejan TODAS las filas del censo, nunca solo la página devuelta"},"pagina":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/CensoFuente"}},"required":["eleccion","fecha","total","por_sexo","por_edad","filas","truncado","pagina","fuente"],"additionalProperties":false},"CensoEdad":{"type":"object","properties":{"rango":{"type":"string","description":"Rango etario (p. ej. 18-20, 60+)"},"mujeres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hombres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["rango","mujeres","hombres"],"additionalProperties":false},"CensoFila":{"type":"object","properties":{"codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código DIVIPOLA de la fila (null a nivel nación)"},"rango":{"type":"string","description":"Rango etario, o 'total' cuando la fuente solo trae sexo"},"sexo":{"type":"string","enum":["F","M"]},"habilitados":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["codigo","rango","sexo","habilitados"],"additionalProperties":false},"CensoFuente":{"type":"object","properties":{"tipo":{"type":"string","enum":["rnec_potencial_etario","divipol"]},"referencia":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Radicado de la solicitud Ley 1712 cuando la fuente es rnec_potencial_etario; null para divipol"}},"required":["tipo","referencia"],"additionalProperties":false},"PoliticosBuscarResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PoliticoListItem"}},"page":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["data","page","fuente"],"additionalProperties":false},"PoliticoListItem":{"type":"object","properties":{"slug":{"type":"string"},"nombre":{"type":"string"},"partido":{"anyOf":[{"type":"string"},{"type":"null"}]},"cargo":{"anyOf":[{"type":"string"},{"type":"null"}]},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["slug","nombre","partido","cargo","referencias"],"additionalProperties":false,"description":"Político en listado (sin cédula)"},"PoliticoPerfil":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"nombre":{"type":"string"},"partido":{"anyOf":[{"type":"string"},{"type":"null"}]},"trayectoria":{"type":"array","items":{"$ref":"#/components/schemas/Cargo"}},"sanciones":{"oneOf":[{"type":"object","properties":{"estado_fuente":{"type":"string","const":"no_consultado"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"null"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"ok"},"registros":{"type":"array","items":{"$ref":"#/components/schemas/Sancion"}},"fuente":{"type":"string"},"corte":{"type":"string"},"consultado_en":{"type":"string"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"error"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"string"},"error":{"type":"object","properties":{"codigo":{"type":"string","const":"FUENTE_NO_DISPONIBLE"},"mensaje":{"type":"string","const":"No se pudo consultar en este momento"}},"required":["codigo","mensaje"],"additionalProperties":false}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false}],"type":"object"},"responsabilidad_fiscal":{"oneOf":[{"type":"object","properties":{"estado_fuente":{"type":"string","const":"no_consultado"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"null"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"ok"},"registros":{"type":"array","items":{"$ref":"#/components/schemas/ResponsabilidadFiscal"}},"fuente":{"type":"string"},"corte":{"type":"string"},"consultado_en":{"type":"string"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"error"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"string"},"error":{"type":"object","properties":{"codigo":{"type":"string","const":"FUENTE_NO_DISPONIBLE"},"mensaje":{"type":"string","const":"No se pudo consultar en este momento"}},"required":["codigo","mensaje"],"additionalProperties":false}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false}],"type":"object"},"fuente":{"$ref":"#/components/schemas/Fuente"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}},"cedula":{"type":"string","pattern":"^[1-9]\\d{5,11}$","description":"Presente con participación política pública; dato público (T-254/24)"},"cedula_fuente":{"type":"string","pattern":"^\\S(?:[\\s\\S]*\\S)?$","description":"Fuente de la cédula (trazabilidad)","example":"Registraduría E-6 2026"}},"required":["slug","nombre","partido","trayectoria","sanciones","responsabilidad_fiscal","fuente","referencias","cedula","cedula_fuente"],"additionalProperties":false},{"type":"object","properties":{"slug":{"type":"string"},"nombre":{"type":"string"},"partido":{"anyOf":[{"type":"string"},{"type":"null"}]},"trayectoria":{"type":"array","items":{"$ref":"#/components/schemas/Cargo"}},"sanciones":{"oneOf":[{"type":"object","properties":{"estado_fuente":{"type":"string","const":"no_consultado"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"null"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"ok"},"registros":{"type":"array","items":{"$ref":"#/components/schemas/Sancion"}},"fuente":{"type":"string"},"corte":{"type":"string"},"consultado_en":{"type":"string"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"error"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"string"},"error":{"type":"object","properties":{"codigo":{"type":"string","const":"FUENTE_NO_DISPONIBLE"},"mensaje":{"type":"string","const":"No se pudo consultar en este momento"}},"required":["codigo","mensaje"],"additionalProperties":false}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false}],"type":"object"},"responsabilidad_fiscal":{"oneOf":[{"type":"object","properties":{"estado_fuente":{"type":"string","const":"no_consultado"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"null"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"ok"},"registros":{"type":"array","items":{"$ref":"#/components/schemas/ResponsabilidadFiscal"}},"fuente":{"type":"string"},"corte":{"type":"string"},"consultado_en":{"type":"string"},"error":{"type":"null"}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"error"},"registros":{"type":"null"},"fuente":{"type":"string"},"corte":{"type":"null"},"consultado_en":{"type":"string"},"error":{"type":"object","properties":{"codigo":{"type":"string","const":"FUENTE_NO_DISPONIBLE"},"mensaje":{"type":"string","const":"No se pudo consultar en este momento"}},"required":["codigo","mensaje"],"additionalProperties":false}},"required":["estado_fuente","registros","fuente","corte","consultado_en","error"],"additionalProperties":false}],"type":"object"},"fuente":{"$ref":"#/components/schemas/Fuente"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}},"cedula":{"type":"null","description":"Omitida cuando no hay participación política pública respaldada"},"cedula_fuente":{"type":"null","description":"Omitida junto con la cédula"}},"required":["slug","nombre","partido","trayectoria","sanciones","responsabilidad_fiscal","fuente","referencias","cedula","cedula_fuente"],"additionalProperties":false}],"description":"Perfil de político (sin datos de contacto semiprivados)"},"Cargo":{"type":"object","properties":{"titulo":{"type":"string"},"desde":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasta":{"anyOf":[{"type":"string"},{"type":"null"}]},"fuente":{"type":"string"}},"required":["titulo","desde","hasta"],"additionalProperties":false},"Sancion":{"type":"object","properties":{"tipo":{"type":"string"},"estado":{"type":"string","enum":["vigente","historica"]},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}]},"fuente":{"type":"string"},"verificado":{"description":"Fecha de última verificación","type":"string"}},"required":["tipo","estado","fecha","fuente"],"additionalProperties":false,"description":"Sanción contextualizada (con estado vigente/histórica)"},"ResponsabilidadFiscal":{"type":"object","properties":{"entidad":{"type":"string"},"tipo_sancion":{"type":"string"},"tema":{"anyOf":[{"type":"string"},{"type":"null"}]},"fecha_resolucion":{"anyOf":[{"type":"string"},{"type":"null"}]},"monto":{"anyOf":[{"type":"string"},{"type":"null"}]},"estado":{"type":"string","enum":["ACTIVA","ARCHIVADA","NO_DETERMINADA"]}},"required":["entidad","tipo_sancion","tema","fecha_resolucion","monto","estado"],"additionalProperties":false,"description":"Responsabilidad fiscal contextualizada (Contraloría)"},"PartidoPerfil":{"type":"object","properties":{"slug":{"type":"string"},"nombre":{"type":"string"},"curules_vigentes":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Curules vigentes"},"bloque":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bloque político"},"fuente":{"$ref":"#/components/schemas/Fuente"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["slug","nombre","curules_vigentes","bloque","fuente","referencias"],"additionalProperties":false,"description":"Perfil institucional del partido (sin PII)"},"CongresoResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActividadCongreso"}},"page":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["data","page","fuente"],"additionalProperties":false,"description":"Actividad del Congreso (atribución Congreso Visible — Uniandes)"},"ActividadCongreso":{"type":"object","properties":{"tipo":{"type":"string","enum":["votacion","proyecto","autoria"]},"titulo":{"type":"string"},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}]},"detalle":{"type":"string"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["tipo","titulo","fecha","referencias"],"additionalProperties":false},"VotacionesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VotacionListItem"}},"page":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["data","page","fuente"],"additionalProperties":false},"VotacionListItem":{"type":"object","properties":{"id":{"type":"string"},"motivo":{"anyOf":[{"type":"string"},{"type":"null"}]},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}]},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["id","motivo","fecha","referencias"],"additionalProperties":false,"description":"Votación en listado, con el id que acepta el detalle de la votación"},"VotoDetalle":{"type":"object","properties":{"id":{"type":"string"},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}]},"es_nominal":{"type":"boolean"},"aprobada":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"conteo":{"$ref":"#/components/schemas/VotoConteo"},"individuales":{"oneOf":[{"type":"object","properties":{"estado_fuente":{"type":"string","const":"sin_registro_nominal"},"registros":{"type":"null"}},"required":["estado_fuente","registros"],"additionalProperties":false},{"type":"object","properties":{"estado_fuente":{"type":"string","const":"ok"},"registros":{"type":"array","items":{"$ref":"#/components/schemas/VotoIndividual"}},"truncado":{"type":"boolean","description":"true si la lista de respuestas se cortó al límite de lectura; el conteo (favor/contra/abstención) sigue siendo la fuente de verdad para el resultado"}},"required":["estado_fuente","registros","truncado"],"additionalProperties":false}],"type":"object"},"fuente":{"$ref":"#/components/schemas/Fuente"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["id","fecha","es_nominal","aprobada","conteo","individuales","fuente","referencias"],"additionalProperties":false,"description":"Detalle de una votación del Congreso, con la respuesta de cada miembro (atribución Congreso Visible — Uniandes)"},"VotoConteo":{"type":"object","properties":{"favor":{"anyOf":[{"type":"number"},{"type":"null"}]},"contra":{"anyOf":[{"type":"number"},{"type":"null"}]},"abstencion":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["favor","contra","abstencion"],"additionalProperties":false},"VotoIndividual":{"type":"object","properties":{"votante_nombre":{"anyOf":[{"type":"string"},{"type":"null"}]},"congresista_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"politico_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"respuesta":{"type":"string","enum":["favor","contra","abstencion","ausente","presente","no_aplica"]}},"required":["votante_nombre","congresista_id","politico_id","respuesta"],"additionalProperties":false,"description":"Respuesta de un miembro del Congreso a una votación nominal"},"ProyectoDetalle":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"titulo":{"type":"string"},"estado":{"anyOf":[{"type":"string"},{"type":"null"}]},"autores":{"type":"array","items":{"$ref":"#/components/schemas/AutorProyecto"}},"autores_truncados":{"type":"boolean","description":"true si la lista de autores se cortó al límite de lectura"},"votaciones":{"type":"array","items":{"$ref":"#/components/schemas/VotacionProyecto"}},"votaciones_truncadas":{"type":"boolean","description":"true si la lista de votaciones que referenciaron el proyecto se cortó al límite de lectura"},"fuente":{"$ref":"#/components/schemas/Fuente"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["id","slug","titulo","estado","autores","autores_truncados","votaciones","votaciones_truncadas","fuente","referencias"],"additionalProperties":false,"description":"Proyecto de ley con su estado, autores y votaciones que lo referenciaron (atribución Congreso Visible — Uniandes)"},"AutorProyecto":{"type":"object","properties":{"congresista_id":{"type":"string"},"nombre":{"type":"string"},"tipo_autoria":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["congresista_id","nombre","tipo_autoria"],"additionalProperties":false,"description":"Autor de un proyecto de ley; la lista completa es la fuente de verdad, sin autor principal invocado"},"VotacionProyecto":{"type":"object","properties":{"id":{"type":"string"},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}]},"motivo":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","fecha","motivo"],"additionalProperties":false,"description":"Votación que referenció el proyecto; el id acepta el detalle de votación"},"CongresistaVotosResponse":{"type":"object","properties":{"congresista":{"$ref":"#/components/schemas/CongresistaPerfil"},"data":{"type":"array","items":{"$ref":"#/components/schemas/CongresistaVoto"}},"truncado":{"type":"boolean","description":"true si el historial de votos se cortó al límite de lectura"},"fuente":{"$ref":"#/components/schemas/Fuente"},"referencias":{"type":"array","items":{"$ref":"#/components/schemas/Referencia"}}},"required":["congresista","data","truncado","fuente","referencias"],"additionalProperties":false,"description":"Registro de votación de un congresista (atribución Congreso Visible — Uniandes)"},"CongresistaPerfil":{"type":"object","properties":{"id":{"type":"string"},"nombre":{"type":"string"},"slug":{"type":"string"},"politico_id":{"type":"string"}},"required":["id","nombre","slug"],"additionalProperties":false},"CongresistaVoto":{"type":"object","properties":{"votacion_id":{"type":"string"},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}]},"respuesta":{"type":"string","enum":["favor","contra","abstencion","ausente","presente","no_aplica"]},"proyecto":{"anyOf":[{"$ref":"#/components/schemas/CongresistaProyectoReferenciado"},{"type":"null"}]}},"required":["votacion_id","fecha","respuesta","proyecto"],"additionalProperties":false,"description":"Voto de un congresista, con el proyecto que referenció (null cuando la votación no tenía proyecto vinculado)"},"CongresistaProyectoReferenciado":{"type":"object","properties":{"id":{"type":"string"},"titulo":{"type":"string"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","titulo","slug"],"additionalProperties":false},"FinanzasResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FinanzaTerritorial"}},"page":{"$ref":"#/components/schemas/Page"},"fuente":{"$ref":"#/components/schemas/Fuente"}},"required":["data","page","fuente"],"additionalProperties":false,"description":"Finanzas territoriales (CUIPO/DNP)"},"FinanzaTerritorial":{"type":"object","properties":{"entidad":{"type":"string"},"anio":{"type":"number"},"presupuesto_cop":{"type":"string","description":"Presupuesto en COP (bigint como string)"},"ejecutado_cop":{"type":"string","description":"Ejecutado en COP (bigint como string)"}},"required":["entidad","anio","presupuesto_cop","ejecutado_cop"],"additionalProperties":false}},"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth 2.1 con la cuenta Alfil (Supabase Auth como authorization server).","flows":{"authorizationCode":{"authorizationUrl":"https://api.alfil.co/oauth/authorize","tokenUrl":"https://api.alfil.co/oauth/token","scopes":{"buscar:read":"Búsqueda federada","politicos:read":"Perfiles y búsqueda de políticos","partidos:read":"Perfiles de partidos","contratos:read":"Contratación SECOP","electoral:read":"Resultados electorales","congreso:read":"Actividad legislativa","finanzas:read":"Finanzas públicas territoriales","geografias:read":"Catálogo DIVIPOLA"}}}}}}}