Skip to content

REST API

BCN Extractor incluye una REST API construida con FastAPI. La documentación interactiva se genera automáticamente en:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc
  • OpenAPI JSON: http://localhost:8000/openapi.json
Terminal window
fastapi dev api/main.py
# o con uvicorn directamente (recomendado para producción):
uvicorn api.main:app --host 0.0.0.0 --port 8000

Retorna una lista paginada de normas almacenadas en la base de datos.

ParámetroTipoDefaultLímitesDescripción
limitint1001–500Máximo de resultados
offsetint0≥ 0Desplazamiento para paginación
Terminal window
curl "http://localhost:8000/normas/?limit=10&offset=0"

Respuesta:

{
"normas": [
{
"norma_id": 1234567,
"tipo_id": 3,
"tipo_nombre": "Decreto",
"numero": "42",
"titulo": "Decreto N° 42 que aprueba reglamento...",
"estado": "vigente",
"fecha_publicacion": "2023-05-15"
}
],
"limit": 10,
"offset": 0
}

Retorna el detalle completo de una norma incluyendo su contenido en Markdown, obtenido en tiempo real desde la BCN.

Terminal window
curl http://localhost:8000/normas/1234567

Respuesta:

{
"norma": {
"numero": "42",
"titulo": "Decreto N° 42...",
"estado": "vigente",
"fecha_publicacion": "2023-05-15",
"fecha_promulgacion": "2023-04-20",
"organismos": ["Ministerio de Salud"],
"materias": ["salud", "reglamento"]
},
"markdown": "# Decreto N° 42\n\n..."
}

POST /normas/batch — Obtener múltiples normas

Section titled “POST /normas/batch — Obtener múltiples normas”

Retorna el detalle completo de una lista de normas en una sola llamada.

Terminal window
curl -X POST http://localhost:8000/normas/batch \
-H "Content-Type: application/json" \
-d '[1234567, 1234568, 1234569]'

GET /normas/buscar/{query} — Buscar normas FTS

Section titled “GET /normas/buscar/{query} — Buscar normas ”

Búsqueda full-text en español sobre títulos de normas.

ParámetroTipoDefaultLímitesDescripción
limitint101–100Máximo de resultados
offsetint0≥ 0Desplazamiento para paginación
Terminal window
curl "http://localhost:8000/normas/buscar/medio%20ambiente?limit=5"

GET /normas/estado/{estado} — Filtrar por estado

Section titled “GET /normas/estado/{estado} — Filtrar por estado”
ParámetroValores válidos
estadovigente, derogada
limit1–500 (default: 50)
offset≥ 0 (default: 0)
Terminal window
curl "http://localhost:8000/normas/estado/vigente?limit=20"

GET /normas/tipo/{tipo} — Filtrar por tipo

Section titled “GET /normas/tipo/{tipo} — Filtrar por tipo”

Busca por nombre o abreviatura del tipo de norma (ej: ley, decreto, res).

Terminal window
curl "http://localhost:8000/normas/tipo/decreto?limit=20"

GET /normas/rango — Filtrar por rango de fechas

Section titled “GET /normas/rango — Filtrar por rango de fechas”
ParámetroTipoDefaultDescripción
start_datedateFecha inicio (requerido, formato YYYY-MM-DD)
end_datedatehoyFecha fin
date_typestringpubpub = publicación, prom = promulgación
limitint1001–500
offsetint0≥ 0
Terminal window
curl "http://localhost:8000/normas/rango?start_date=2023-01-01&end_date=2023-12-31&date_type=pub"

GET /instituciones/ — Listar instituciones

Section titled “GET /instituciones/ — Listar instituciones”
Terminal window
curl "http://localhost:8000/instituciones/"

GET /instituciones/buscar/{query} — Buscar instituciones

Section titled “GET /instituciones/buscar/{query} — Buscar instituciones”
Terminal window
curl "http://localhost:8000/instituciones/buscar/ministerio?limit=10"

GET /instituciones/stats — Estadísticas de instituciones

Section titled “GET /instituciones/stats — Estadísticas de instituciones”
Terminal window
curl http://localhost:8000/instituciones/stats

Respuesta:

{
"total": 423,
"con_normas": 310,
"sin_normas": 113
}

GET /instituciones/{id} — Obtener institución

Section titled “GET /instituciones/{id} — Obtener institución”
Terminal window
curl http://localhost:8000/instituciones/17

GET /instituciones/{id}/normas — Normas de una institución

Section titled “GET /instituciones/{id}/normas — Normas de una institución”

Retorna las normas almacenadas en la base de datos para una institución, ordenadas por fecha de publicación descendente.

ParámetroTipoDefaultLímites
limitint5001–1000
offsetint0≥ 0
Terminal window
curl "http://localhost:8000/instituciones/17/normas?limit=20&offset=0"

PUT /instituciones/{id}/normas — Sincronizar normas de una institución

Section titled “PUT /instituciones/{id}/normas — Sincronizar normas de una institución”

Descarga todas las normas de la institución desde la BCN y las guarda en la base de datos. Detecta cambios via hash MD5 y solo actualiza lo que cambió.

ParámetroTipoDescripción
limitintOpcional. Limita cuántas normas sincronizar
Terminal window
curl -X PUT "http://localhost:8000/instituciones/17/normas?limit=50"

Respuesta:

{
"nuevas": 12,
"actualizadas": 3,
"sin_cambios": 35,
"errores": 0
}