Información general
  • Base URL: https://api.spainelectoralproject.com/v1
  • Versión: 1.0.0
  • Especificación: OpenAPI 3.1.0
  • Métodos HTTP: Solo GET (API de solo lectura)
  • Autenticación: API key (header X-API-Key)
  • Formato respuesta: JSON (application/json)
Autenticación
Todos los endpoints de /v1/* requieren autenticación mediante API key, excepto /v1/auth/* (registro, verificación, gestión de clave) y /health.

Obtén tu clave registrándote en /v1/auth/register y verificando tu email. Incluye el header X-API-Key en todas tus peticiones:
curl -H "X-API-Key: TU_API_KEY" https://api.spainelectoralproject.com/v1/elecciones

Si la clave es inválida, revocada o falta, la API responderá con:

{
  "detail": "API key requerida"
}

o

{
  "detail": "API key inválida o revocada"
}
Spain Electoral Project — API

Endpoints

Health

MétodoRutaDescripción
GET/healthEstado de la aplicación y conexión a la BD

Elecciones

MétodoRutaDescripción
GET/v1/tipos-eleccionCatálogo de tipos de elección (array simple, sin paginación)
GET/v1/tipos-eleccion/{codigo}Detalle de un tipo de elección
GET/v1/eleccionesListado paginado de elecciones con filtros
GET/v1/elecciones/{id}Detalle de una elección con tipo expandido
GET/v1/elecciones/{id}/fuenteFuente oficial de los datos de una elección
GET/v1/elecciones/{id}/totales-territorioTotales territorio de una elección (paginado, con filtros)
GET/v1/elecciones/{id}/totales-territorio/{territorio_id}Resultado completo: totales + votos por partido

Territorios

MétodoRutaDescripción
GET/v1/territoriosListado paginado de territorios con filtros
GET/v1/territorios/{id}Detalle con todos los códigos
GET/v1/territorios/{id}/hijosHijos directos (navegación jerárquica)

Partidos

MétodoRutaDescripción
GET/v1/partidosListado paginado de partidos con filtros
GET/v1/partidos/{id}Detalle con agrupación (recode) expandida
GET/v1/partidos-recodeListado paginado de agrupaciones de partidos
GET/v1/partidos-recode/{id}Detalle de agrupación con lista de partidos asociados

Resultados

MétodoRutaDescripción
GET/v1/resultados/totales-territorioTotales territorio filtrables por múltiples criterios
GET/v1/resultados/votos-partidoVotos por partido filtrables
GET/v1/resultados/combinadosVotos con partido, territorio y elección expandidos

Paginación

Todos los endpoints que devuelven listados (excepto /v1/tipos-eleccion) usan paginación.

Parámetros

ParámetroTipoDefaultMínMáxDescripción
skipint00Registros a saltar
limitint501500Registros por página

Estructura de respuesta paginada

{
  "total": 254,
  "skip": 0,
  "limit": 50,
  "data": [...]
}
  • total: número total de registros que cumplen los filtros.
  • skip / limit: eco de los parámetros enviados.
  • data: array con los registros de la página actual.

Recorrido completo

Para recorrer todos los registros se incrementa skip en cada petición:

Página 1: ?skip=0&limit=100
Página 2: ?skip=100&limit=100
Página 3: ?skip=200&limit=100
...hasta que skip >= total

Cuando no hay coincidencias, la respuesta es total=0 y data=[] (HTTP 200, no es error).

Filtros

Convenciones generales

  • Todos los filtros son opcionales. Sin filtros se devuelven todos los registros.
  • Los filtros de texto (nombre, siglas, denominacion, agrupacion) usan búsqueda parcial case-insensitive (ILIKE).
  • Para filtrar por múltiples valores, se repite el parámetro: ?tipo_eleccion=G&tipo_eleccion=A.

Filtros por endpoint

/v1/elecciones

ParámetroTipoEjemploDescripción
tipo_eleccionstr (repetible)G, ACódigo del tipo de elección
yearstr (repetible)2019Año de la elección
messtr (repetible)04Mes (con cero a la izquierda)

/v1/territorios

ParámetroTipoEjemploDescripción
tipostr (repetible)ccaa, provinciaTipo de territorio
codigo_ccaastr (repetible)01Código de comunidad autónoma
codigo_provinciastr (repetible)28Código de provincia
nombrestrmadridBúsqueda parcial por nombre

/v1/partidos

ParámetroTipoEjemploDescripción
siglasstrpsoeBúsqueda parcial por siglas
denominacionstrsocialistaBúsqueda parcial por nombre completo

/v1/partidos-recode

ParámetroTipoEjemploDescripción
agrupacionstrPCE/IUBúsqueda parcial por agrupación

/v1/elecciones/{id}/totales-territorio

ParámetroTipoEjemploDescripción
territorio_idint20ID de territorio específico
tipo_territoriostr (repetible)provinciaTipo de territorio
codigo_ccaastr (repetible)01Código de comunidad autónoma
codigo_provinciastr (repetible)28Código de provincia
codigo_municipiostr (repetible)079Código de municipio

/v1/resultados/totales-territorio

ParámetroTipoEjemploDescripción
eleccion_idint (repetible)208ID de elección
territorio_idint (repetible)20ID de territorio
yearstr (repetible)2019Año de la elección
tipo_eleccionstr (repetible)GCódigo del tipo
tipo_territoriostr (repetible)provinciaTipo de territorio
codigo_ccaastr (repetible)01Código CCAA
codigo_provinciastr (repetible)28Código provincia
codigo_municipiostr (repetible)079Código municipio

/v1/resultados/votos-partido y /v1/resultados/combinados

Los mismos filtros que resultados/totales-territorio, más:

ParámetroTipoEjemploDescripción
partido_idint (repetible)9451ID de partido

Errores

Código HTTPSignificadoEjemplo
404Recurso no encontrado{"detail": "Elección no encontrada"}
422Error de validación{"detail": [{"type": "...", "loc": [...], "msg": "..."}]}