In short
- Base URL
https://api.hitosignal.com/v1, JSON, GET only. - Send your key as
Authorization: Bearer hs_live_…. - Data from January 2025, rebuilt every morning; every event links to its official document.
- Lists are paginated with
limitandoffset.
01Quickstart
The API returns JSON over HTTPS. Every request needs an API key: start a free 14-day trial and you get one on the spot, or write to hello@hitosignal.com.
curl "https://api.hitosignal.com/v1/projects?technology=storage®ion=Andalucía&limit=5" \
-H "Authorization: Bearer $HITO_KEY"
The same in Python:
import requests
r = requests.get(
"https://api.hitosignal.com/v1/events",
headers={"Authorization": f"Bearer {KEY}"},
params={"event_type": "authorization_denied,authorization_lapsed",
"min_capacity_mw": 50, "since": "2026-10-01"},
)
for e in r.json()["data"]:
print(e["publication_date"], e["project_name"], e["capacity_mw"], e["source_url"])
02Authentication
Send your key in the Authorization header as Bearer hs_live_… (trial keys start with hs_trial_ and stop working when the trial ends). For a quick test in a browser you can add ?key=hs_live_… to the URL instead, but keep the header for anything you deploy. We only store a fingerprint of each key, so a lost key cannot be recovered: we issue a new one and the old one stops working.
Keys are personal to your organisation. Do not put them in public code or front-end pages.
03Data and updates
The data covers Spain from January 2025: the BOE and fifteen regional gazettes, the Mercantile Registry gazette (BORME) and Red Eléctrica's monthly grid-access publications. It is rebuilt every morning after the gazettes publish, and /v1/meta tells you when it was last generated.
Every event links to its official document in source_url. Extraction is automated: where a field matters for a decision, check the document. Personal data is never extracted, and natural persons are never listed as directors or shareholders.
04Endpoints
GET/v1/meta
When the data was generated, how many rows each dataset has and the date of the latest publication.
GET/v1/events
Permitting events: one row per project mentioned in an official document, newest first.
| Parameter | Type | Filter |
|---|---|---|
since | date | Published on or after this date (YYYY-MM-DD). |
until | date | Published on or before this date. |
event_type | list | One or more event types, e.g. authorization_denied,authorization_lapsed. |
technology | list | One or more technologies: solar_pv, wind, storage… |
region | list | Autonomous community, e.g. Andalucía. Accents and case are ignored. |
province | list | Province name. |
source | list | Gazette: BOE, DOCM, BOJA… |
promoter | text | Promoter name contains this text. |
project_key | list | One or more project keys. |
grid_node | text | Only projects connected to a Red Eléctrica node whose name contains this text. |
min_capacity_mw | number | Capacity of at least this many MW. |
max_capacity_mw | number | Capacity of at most this many MW. |
GET/v1/projects
One row per project with its status, furthest stage, promoter, controlling company and grid node, most recently updated first.
| Parameter | Type | Filter |
|---|---|---|
technology | list | One or more technologies. |
region | list | Autonomous community. |
province | list | Province name. |
status | list | authorised, in_permitting, denied, lapsed or withdrawn. |
furthest_stage | list | Furthest stage granted: environmental_assessment, preliminary_authorization, construction_authorization, public_utility, operation_authorization. |
promoter | text | Promoter name contains this text. |
controlling_entity | text | Controlling company (from the Mercantile Registry) contains this text. |
grid_node | text | Red Eléctrica node name contains this text. |
min_capacity_mw | number | Capacity of at least this many MW. |
max_capacity_mw | number | Capacity of at most this many MW. |
updated_since | date | Latest document published on or after this date. |
GET/v1/projects/{project_key}
One project with its full history of events. Use the project_key from any event or project row.
GET/v1/grid/nodes
Red Eléctrica transmission nodes with the latest generation and demand access capacity.
| Parameter | Type | Filter |
|---|---|---|
region | list | Autonomous community. |
node | text | Node name contains this text. |
min_available_mw | number | At least this much generation capacity available (power-park modules). |
tender | text | Demand tender flag, e.g. true. |
GET/v1/grid/requests
Access requests published by Red Eléctrica: storage, self-consumption, large consumers and others, newest first.
| Parameter | Type | Filter |
|---|---|---|
since | date | Published by Red Eléctrica on or after this date. |
until | date | Published on or before this date. |
request_type | list | storage, self_consumption, dedicated_demand, existing_increase, other. |
region | list | Autonomous community. |
node | text | Node name contains this text. |
min_capacity_mw | number | At least this many MW requested. |
05Filters and pagination
- list parameters take one value or several separated by commas, and match exactly (accents and case ignored).
- text parameters match when the field contains the text. Several values separated by commas match any of them.
- date and number parameters are inclusive bounds. Rows without that field are left out when you filter on it.
Lists return up to limit rows (default 100, maximum 1,000) starting at offset. Every list response has the same shape:
{
"data": [ … ],
"count": 100,
"total": 412,
"next_offset": 100
}
Request the next page with offset=next_offset until it is null.
06Event fields
| Field | Type | Description |
|---|---|---|
event_id | string | Stable id of this row (one row per project mentioned in a document). |
source | enum | Official source: BOE (Spain), DOCM (Castilla-La Mancha gazette), JCCM (Castilla-La Mancha electronic notice board), BOJA (Andalucía gazette), BOCYL (Castilla y León gazette), BOA (Aragón gazette), DOE (Extremadura gazette), DOG (Galicia gazette), DOGV (Comunitat Valenciana gazette), BORM (Región de Murcia gazette), BOCM (Comunidad de Madrid gazette), BON (Navarra gazette), BOPV (País Vasco gazette), BOIB (Illes Balears gazette), DOGC (Cataluña gazette), BOR (La Rioja gazette) or BOPA (Asturias gazette). |
source_id | string | Official identifier of the document, e.g. BOE-A-2025-3090, DOCM-2026-7831 or JCCM-35035. Several rows can share it when a document covers several projects. |
publication_date | date | Date the document was published in its gazette (YYYY-MM-DD). |
document_type | enum | resolution, announcement, order, agreement, royal_decree or other. |
issuing_body | string | Authority that signs or publishes the document. |
event_type | enum | authorization_granted, authorization_denied, authorization_amended, authorization_lapsed, application_withdrawn, public_consultation, environmental_assessment_issued, environmental_assessment_amended, expropriation, municipal_planning, grid_access_tender, regulation, other. |
is_correction | boolean | true when the document corrects an earlier publication. |
permit_types | list | Permits the document refers to: DIA (environmental impact statement), AAP (preliminary authorisation), AAC (construction authorisation), DUP (public utility), AE (operating authorisation). |
stage | enum | Most advanced permitting stage the document refers to. In a public consultation it is the stage being requested, not granted. |
project_name | string | Project name as written in the document, without generic words such as 'planta fotovoltaica'. |
name_source | enum | Where project_name comes from: document (the title), document_text (the full text) or generated (the project has no name in the document; we describe it by technology, municipality and promoter). |
project_key | string | Stable key that links every event of the same project (name + province). |
projects_in_document | integer | How many projects the document covers. |
promoter | string | Company that holds or requests the authorisation, with its legal form (SL, SLU, SA, SAU). |
technology | enum | solar_pv, wind, storage, pumped_hydro, hydro, solar_thermal, hydrogen, bioenergy or grid. |
is_hybrid | boolean | true when the project is a hybrid or a hybridisation of an existing plant. |
hybrid_with | string | Existing plant the project is hybridised with, when stated. |
capacity_mw | number | Installed (nominal) capacity in MW. |
capacity_mwp | number | Peak capacity in MWp, for solar, when stated. |
storage_mw | number | Power of a storage module described together with the project, in MW. |
storage_mwh | number | Storage energy capacity in MWh, when stated. |
province | list | Province(s), validated against the official INE list. |
region | list | Autonomous community (comunidad autónoma) of each province. |
location_source | enum | How the province was found: title (named in the document), municipality (from the municipalities), issuing_office (from the office that handles it) or source (only the region is known, from the regional gazette). |
municipalities | list | Municipalities, validated against the official INE list (8,131 municipalities). |
substation | string | Substation the project connects to, when the text names it (it can be the promoters' collector substation). |
substation_kv | integer | Voltage of that substation in kV. |
includes_grid_connection | boolean | true when the document also covers the evacuation line or substation. |
title_es | string | Original Spanish title of the document. |
source_url | url | Link to the official document on the gazette's website. |
pdf_url | url | Link to the official PDF. |
completeness | number | Share of key fields found (name, promoter, capacity, province, technology), from 0 to 1. |
07Project fields
| Field | Type | Description |
|---|---|---|
project_key | string | Stable key of the project (name + province). |
project_name | string | Most frequent name of the project across its documents. |
name_source | enum | document if any of its documents names it; generated if none does and the name describes it (technology, municipality, promoter). |
technology | enum | Main technology. |
is_hybrid | boolean | true if any document describes it as hybrid. |
promoter | string | Holder in the most recent document that names one. |
capacity_mw | number | Capacity in the most recent document that states it, in MW. |
capacity_mwp | number | Peak capacity in MWp, when stated. |
storage_mwh | number | Storage capacity in MWh, when stated. |
province | list | Province(s). |
region | list | Autonomous community. |
municipalities | list | All municipalities named across its documents. |
substation | string | Substation named most recently. |
status | enum | Status after its latest document: authorised, in_permitting, denied, lapsed or withdrawn. |
furthest_stage_granted | enum | Most advanced stage actually granted (environmental_assessment … operation_authorization). Empty if nothing was granted. |
last_event_type | enum | Type of its most recent document. |
first_event_date | date | Date of its first document. |
last_event_date | date | Date of its most recent document. |
n_events | integer | Number of documents. |
source_ids | list | Official identifiers of all its documents, oldest first. |
registry_company | string | The promoter as registered in the Mercantile Registry gazette (BORME), with its current name. |
registry_sheet | string | Mercantile Registry sheet (hoja registral: registry letters + number). It identifies the company even if it changes its name. |
company_status | enum | Status of the promoter company in the BORME: active, dissolved, extinguished or insolvency. Empty if not found. |
sole_shareholder | string | Sole shareholder of the promoter company, when it is a company (BORME). |
corporate_directors | list | Current directors of the promoter company that are companies (BORME appointments minus removals). Directors who are natural persons are not listed. |
controlling_entity | string | Company that controls the promoter: its sole shareholder, or the corporate director it shares with most other project companies. |
portfolio_size | integer | Projects held by the promoter company or by companies that share a director or shareholder with it, this one included. |
portfolio_projects | list | project_key of the other projects in that portfolio. |
grid_node | string | Transmission-grid node (Red Eléctrica) of the substation the project connects to, name and kV. |
grid_snapshot_date | date | Date of the Red Eléctrica capacity publication used for the node fields. |
node_granted_mw | number | Generation and storage access capacity already granted at that node, in MW (Red Eléctrica). |
node_pending_mw | number | Generation and storage access requested at that node and still being processed, in MW. |
node_available_mw | number | Access capacity still available for new generation requests at that node, in MW (power-park modules). |
node_constraint | string | Why the node has no capacity for new requests, when Red Eléctrica says so (tender, reserved margin…). |
08Grid node fields
| Field | Type | Description |
|---|---|---|
node | string | Node name as Red Eléctrica publishes it, with its voltage, e.g. ARCOS DE LA FRONTERA 400. |
node_key | string | Normalised key of the node (name|kV). |
substation_code | string | Red Eléctrica substation code, when published. |
region | string | Autonomous community of the node. |
generation | object | Latest generation access capacity: granted_gen_mw, granted_storage_mw, pending_gen_mw, pending_storage_mw, available_gen_mpe_mw, available_storage_mpe_mw, unavailable_reason, reserve_reason. |
generation_snapshot_date | date | Date of the Red Eléctrica generation publication used. |
demand | object | Latest demand access capacity: granted_demand_mw, granted_storage_mw, pending_demand_mw, pending_storage_mw, available_demand_mw, available_storage_mw, tender_node. |
demand_snapshot_date | date | Date of the Red Eléctrica demand publication used. |
09Access request fields
| Field | Type | Description |
|---|---|---|
id | string | Unique row id: request id and request type. |
request_id | string | Red Eléctrica's reference for the access request. |
date | date | Date of the Red Eléctrica publication where the request appears. |
received | date | Date Red Eléctrica received the request, when published. |
request_type | enum | storage, self_consumption, dedicated_demand (large consumers such as data centres), existing_increase or other. |
request_type_es | string | Original Spanish description of the request type. |
node | string | Node the access is requested at. |
node_key | string | Normalised key of the node (name|kV); joins with grid nodes. |
position | string | Bay or position at the substation, when published. |
region | string | Autonomous community of the node. |
capacity_mw | number | Requested capacity in MW. |
shared_nodes | list | Other nodes whose capacity the request affects. |
valid_until | date | End date of the request's validity, when published. |
tender_node | boolean | true when the node is reserved for a capacity tender (concurso). |
10Errors
| Status | Meaning | When |
|---|---|---|
401 | Unauthorized | Missing or invalid API key. |
404 | Not found | Unknown path or project key. |
405 | Method not allowed | Only GET is supported. |
Errors return {"error": "…"} with a short explanation.
11Email alerts
Every plan includes email alerts, and so does the trial: the alert you choose when you start it emails you every morning, beginning with what matched in the last week. Tell us what else to watch, for example storage projects in Andalucía, anything above 100 MW, a promoter, a group of companies or a grid node, and we email you the morning a matching event is published. Alerts can also cover new Red Eléctrica access requests and changes in the companies behind the projects you follow.
To set up or change your alerts, write to hello@hitosignal.com.