Hito Signal
← Back to Hito Signal

API reference

Spanish renewable permits, grid capacity and the companies behind each project, as JSON. One key, six endpoints, updated every morning.

Version 1 · Last updated 13 November 2026

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 limit and offset.

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&region=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.

ParameterTypeFilter
sincedatePublished on or after this date (YYYY-MM-DD).
untildatePublished on or before this date.
event_typelistOne or more event types, e.g. authorization_denied,authorization_lapsed.
technologylistOne or more technologies: solar_pv, wind, storage…
regionlistAutonomous community, e.g. Andalucía. Accents and case are ignored.
provincelistProvince name.
sourcelistGazette: BOE, DOCM, BOJA…
promotertextPromoter name contains this text.
project_keylistOne or more project keys.
grid_nodetextOnly projects connected to a Red Eléctrica node whose name contains this text.
min_capacity_mwnumberCapacity of at least this many MW.
max_capacity_mwnumberCapacity 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.

ParameterTypeFilter
technologylistOne or more technologies.
regionlistAutonomous community.
provincelistProvince name.
statuslistauthorised, in_permitting, denied, lapsed or withdrawn.
furthest_stagelistFurthest stage granted: environmental_assessment, preliminary_authorization, construction_authorization, public_utility, operation_authorization.
promotertextPromoter name contains this text.
controlling_entitytextControlling company (from the Mercantile Registry) contains this text.
grid_nodetextRed Eléctrica node name contains this text.
min_capacity_mwnumberCapacity of at least this many MW.
max_capacity_mwnumberCapacity of at most this many MW.
updated_sincedateLatest 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.

ParameterTypeFilter
regionlistAutonomous community.
nodetextNode name contains this text.
min_available_mwnumberAt least this much generation capacity available (power-park modules).
tendertextDemand 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.

ParameterTypeFilter
sincedatePublished by Red Eléctrica on or after this date.
untildatePublished on or before this date.
request_typeliststorage, self_consumption, dedicated_demand, existing_increase, other.
regionlistAutonomous community.
nodetextNode name contains this text.
min_capacity_mwnumberAt 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

FieldTypeDescription
event_idstringStable id of this row (one row per project mentioned in a document).
sourceenumOfficial 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_idstringOfficial 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_datedateDate the document was published in its gazette (YYYY-MM-DD).
document_typeenumresolution, announcement, order, agreement, royal_decree or other.
issuing_bodystringAuthority that signs or publishes the document.
event_typeenumauthorization_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_correctionbooleantrue when the document corrects an earlier publication.
permit_typeslistPermits the document refers to: DIA (environmental impact statement), AAP (preliminary authorisation), AAC (construction authorisation), DUP (public utility), AE (operating authorisation).
stageenumMost advanced permitting stage the document refers to. In a public consultation it is the stage being requested, not granted.
project_namestringProject name as written in the document, without generic words such as 'planta fotovoltaica'.
name_sourceenumWhere 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_keystringStable key that links every event of the same project (name + province).
projects_in_documentintegerHow many projects the document covers.
promoterstringCompany that holds or requests the authorisation, with its legal form (SL, SLU, SA, SAU).
technologyenumsolar_pv, wind, storage, pumped_hydro, hydro, solar_thermal, hydrogen, bioenergy or grid.
is_hybridbooleantrue when the project is a hybrid or a hybridisation of an existing plant.
hybrid_withstringExisting plant the project is hybridised with, when stated.
capacity_mwnumberInstalled (nominal) capacity in MW.
capacity_mwpnumberPeak capacity in MWp, for solar, when stated.
storage_mwnumberPower of a storage module described together with the project, in MW.
storage_mwhnumberStorage energy capacity in MWh, when stated.
provincelistProvince(s), validated against the official INE list.
regionlistAutonomous community (comunidad autónoma) of each province.
location_sourceenumHow 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).
municipalitieslistMunicipalities, validated against the official INE list (8,131 municipalities).
substationstringSubstation the project connects to, when the text names it (it can be the promoters' collector substation).
substation_kvintegerVoltage of that substation in kV.
includes_grid_connectionbooleantrue when the document also covers the evacuation line or substation.
title_esstringOriginal Spanish title of the document.
source_urlurlLink to the official document on the gazette's website.
pdf_urlurlLink to the official PDF.
completenessnumberShare of key fields found (name, promoter, capacity, province, technology), from 0 to 1.

07Project fields

FieldTypeDescription
project_keystringStable key of the project (name + province).
project_namestringMost frequent name of the project across its documents.
name_sourceenumdocument if any of its documents names it; generated if none does and the name describes it (technology, municipality, promoter).
technologyenumMain technology.
is_hybridbooleantrue if any document describes it as hybrid.
promoterstringHolder in the most recent document that names one.
capacity_mwnumberCapacity in the most recent document that states it, in MW.
capacity_mwpnumberPeak capacity in MWp, when stated.
storage_mwhnumberStorage capacity in MWh, when stated.
provincelistProvince(s).
regionlistAutonomous community.
municipalitieslistAll municipalities named across its documents.
substationstringSubstation named most recently.
statusenumStatus after its latest document: authorised, in_permitting, denied, lapsed or withdrawn.
furthest_stage_grantedenumMost advanced stage actually granted (environmental_assessment … operation_authorization). Empty if nothing was granted.
last_event_typeenumType of its most recent document.
first_event_datedateDate of its first document.
last_event_datedateDate of its most recent document.
n_eventsintegerNumber of documents.
source_idslistOfficial identifiers of all its documents, oldest first.
registry_companystringThe promoter as registered in the Mercantile Registry gazette (BORME), with its current name.
registry_sheetstringMercantile Registry sheet (hoja registral: registry letters + number). It identifies the company even if it changes its name.
company_statusenumStatus of the promoter company in the BORME: active, dissolved, extinguished or insolvency. Empty if not found.
sole_shareholderstringSole shareholder of the promoter company, when it is a company (BORME).
corporate_directorslistCurrent directors of the promoter company that are companies (BORME appointments minus removals). Directors who are natural persons are not listed.
controlling_entitystringCompany that controls the promoter: its sole shareholder, or the corporate director it shares with most other project companies.
portfolio_sizeintegerProjects held by the promoter company or by companies that share a director or shareholder with it, this one included.
portfolio_projectslistproject_key of the other projects in that portfolio.
grid_nodestringTransmission-grid node (Red Eléctrica) of the substation the project connects to, name and kV.
grid_snapshot_datedateDate of the Red Eléctrica capacity publication used for the node fields.
node_granted_mwnumberGeneration and storage access capacity already granted at that node, in MW (Red Eléctrica).
node_pending_mwnumberGeneration and storage access requested at that node and still being processed, in MW.
node_available_mwnumberAccess capacity still available for new generation requests at that node, in MW (power-park modules).
node_constraintstringWhy the node has no capacity for new requests, when Red Eléctrica says so (tender, reserved margin…).

08Grid node fields

FieldTypeDescription
nodestringNode name as Red Eléctrica publishes it, with its voltage, e.g. ARCOS DE LA FRONTERA 400.
node_keystringNormalised key of the node (name|kV).
substation_codestringRed Eléctrica substation code, when published.
regionstringAutonomous community of the node.
generationobjectLatest 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_datedateDate of the Red Eléctrica generation publication used.
demandobjectLatest 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_datedateDate of the Red Eléctrica demand publication used.

09Access request fields

FieldTypeDescription
idstringUnique row id: request id and request type.
request_idstringRed Eléctrica's reference for the access request.
datedateDate of the Red Eléctrica publication where the request appears.
receiveddateDate Red Eléctrica received the request, when published.
request_typeenumstorage, self_consumption, dedicated_demand (large consumers such as data centres), existing_increase or other.
request_type_esstringOriginal Spanish description of the request type.
nodestringNode the access is requested at.
node_keystringNormalised key of the node (name|kV); joins with grid nodes.
positionstringBay or position at the substation, when published.
regionstringAutonomous community of the node.
capacity_mwnumberRequested capacity in MW.
shared_nodeslistOther nodes whose capacity the request affects.
valid_untildateEnd date of the request's validity, when published.
tender_nodebooleantrue when the node is reserved for a capacity tender (concurso).

10Errors

StatusMeaningWhen
401UnauthorizedMissing or invalid API key.
404Not foundUnknown path or project key.
405Method not allowedOnly 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.