Todos los ejemplos usan la API de producción. No hace falta enviar credenciales ni headers especiales.

curl

Lista las diez encuestas más recientes de una elección:

curl "https://polls.spainelectoralproject.com/api/v1/polls?election_key=congreso_espana_2027&limit=10"

Consulta estimaciones de varios partidos repitiendo el parámetro:

curl "https://polls.spainelectoralproject.com/api/v1/results?party=psoe&party=pp&limit=100"

Comprueba el estado del servicio:

curl "https://polls.spainelectoralproject.com/health"

Python

import requests

url = "https://polls.spainelectoralproject.com/api/v1/timeseries"
params = {
    "election_key": "congreso_espana_2027",
    "party": ["psoe", "pp", "vox", "sumar"],
    "date_from": "2026-01-01",
    "date_field": "auto",
    "limit": 1000,
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
payload = response.json()

print(f"{payload['total']} observaciones")
for point in payload["items"][:5]:
    print(point["date"], point["short_name"], point["vote_share"])

Recorrer todas las páginas

import requests

url = "https://polls.spainelectoralproject.com/api/v1/results"
limit = 1000
offset = 0
rows = []

while True:
    response = requests.get(
        url,
        params={"party": "psoe", "limit": limit, "offset": offset},
        timeout=30,
    )
    response.raise_for_status()
    page = response.json()
    rows.extend(page["items"])
    offset += page["limit"]
    if offset >= page["total"]:
        break

print(f"Descargadas {len(rows)} filas")

R

Con httr2:

library(httr2)

resp <- request(
  "https://polls.spainelectoralproject.com/api/v1/results"
) |>
  req_url_query(
    election_key = "congreso_espana_2027",
    party = "psoe",
    limit = 100
  ) |>
  req_perform() |>
  resp_body_json(simplifyVector = TRUE)

resultados <- resp$items
head(resultados)

Para repetir un parámetro con httr2, usa .multi = "explode":

resp <- request(
  "https://polls.spainelectoralproject.com/api/v1/results"
) |>
  req_url_query(
    party = c("psoe", "pp", "vox"),
    limit = 1000,
    .multi = "explode"
  ) |>
  req_perform() |>
  resp_body_json(simplifyVector = TRUE)

JavaScript

La API puede consultarse directamente desde un navegador cuando el origen está permitido por CORS:

const url = new URL(
  "https://polls.spainelectoralproject.com/api/v1/parties"
);
url.searchParams.set("election_key", "congreso_espana_2027");
url.searchParams.set("limit", "100");

const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const { items, total } = await response.json();

console.log(total, items);

Citar la fuente original

Cuando presentes una encuesta concreta, usa source_url y source_title del recurso /polls para enlazar la publicación de origen. fieldwork_start, fieldwork_end y sample_size aportan el contexto metodológico mínimo para interpretar la estimación.