Find your data.
Choose your endpoint.
Start with a data family, then inspect the records and filters. Open a working tool in API Arena when you’re ready to try a request.
22 endpoints · Events & news
Events & news
Discover developments, grouped reporting and the evidence behind them.
GDELT article stream · GDELT Cloud classificationGETRead publication activity/api/v2/activity
Paginated observed evidence of successful serving/reference publication. Unchanged reloads and baseline inventories are excluded. Linked entities are mentions or participants according to the record; they are not newly created identities. Source dates retain their stated precision. Source capability and collection start are explicit; missing history is not zero. Reads are ordered by the selected time_basis, newest first. Only committed batches are visible; cursors pin committed source sequences across pages. recorded_at retains journal availability time independently from published_at and source_date. Exhausting next_cursor completes the observed journal at its publication cutoff, not all upstream source intake. Query Monitors may watch observed publication entries while retaining source/history qualifications; partial history cannot establish exhaustive all-source counts or quiet days. Failed, unavailable or capped journal reads cannot complete a Monitor checkpoint.
Response: PublicationActivityCard · MCP tool: get_activity
Parameters and accepted values (12)
- time_basis
- Clock for date/hour filters and ordering: published preserves the serving/reference publication time; recorded uses the durable journal commit time and includes late publications when they become available. Omission retains published compatibility. Choose recorded explicitly for ongoing activity Monitors; source dates remain unchanged.
Accepted values: published, recorded
- date_start
- First UTC date in the selected time_basis. Defaults to today; future dates are rejected. Neither clock is Event occurrence time.
- date_end
- Last UTC date in the selected time_basis, inclusive. Defaults to date_start and cannot be later than the current UTC day.
- hour
- Optional UTC hour, 0–23. Requires a single date and rejects hours that have not started. The current hour is allowed and describes publications so far; omit for the whole selected day.
- country
- Known country attribution. Evidence distinguishes location, actor origin, reporting and source association.
- recorded_start
- Inclusive start of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters.
- recorded_end
- Exclusive end of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters.
- kind
- Published record type to include in activity evidence.
Accepted values: event, story, entity, facility, list_entry, office_holder
- change
- Publication transition. Defaults to all substantive transitions.
Accepted values: added, updated, removed
- entity
- Selected entity ID from /api/v2/search; returns records linked to that identity.
- limit
- Number of publication records per page, from 1 to 100.
- cursor
- Opaque next_cursor from the previous response. Keep the other filters unchanged.
GETSearch Events/api/v2/events
Continuous events coverage begins 2026-03-01. Use consecutive windows of at most 30 inclusive days; a calendar month can be too long. Finish pagination.next_cursor within each fixed window before starting the next chunk without a cursor. Without an explicit window, entity filters default to 30 days and other queries to the last 24 hours. meta.query_window reports the effective predicates; meta.coverage describes the available corpus. Discrete events we code in-house from news coverage into a CAMEO+ / ACLED-aligned taxonomy. Each carries: the ACTORS on both sides (actors, with their countries and roles), geography down to admin-1 with a stated precision, the linked story and its source articles, a written rationale, and a set of METRICS — significance (the default sort, and the only one meant to compare events across domains), plus magnitude, systemic_importance, propagation_potential and market_sensitivity, each filterable with <metric>_min / <metric>_max. Goldstein and quad class are published where the taxonomy defines them. Metric values also carry metrics.metric_inputs: the sub-factor scores the coder read off the article, each with the reason it gave — so a score can be audited rather than trusted. Definitions: https://docs.gdeltcloud.com/reference/metrics
Response: EventCard · MCP tool: search_events
Parameters and accepted values (50)
- recorded_start
- Inclusive start of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters. Event and Story lists return records first made available in this interval, not later updates to existing records. Use /api/v2/activity for changes.
- recorded_end
- Exclusive end of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters. Event and Story lists return records first made available in this interval, not later updates to existing records. Use /api/v2/activity for changes.
- date_start
- EVENT TIME — inclusive start of the window by when it HAPPENED (YYYY-MM-DD). Windows are capped at 30 inclusive days. Use consecutive date chunks; calendar months can exceed the cap. Follow the endpoint's pagination guidance within each chunk.
- date_end
- EVENT TIME — inclusive end of the window by when it HAPPENED (YYYY-MM-DD).
- days
- Calendar-date window ending today, in days (max 30). `window=7d` and `days=7` are equivalent. When omitted, a request without entity filters uses the last 24 hours; entity filters use 30 days. Read meta.query_window for the actual bounds. There is no equivalent numeric default: sending days explicitly selects calendar dates and removes the implicit observed-time bound. Pass `days` explicitly, or `date_start`/`date_end`, whenever the window matters.
- limit
- Rows per page. Default 25, max 100.
- cursor
- Opaque pagination cursor taken from the previous response's `pagination.next_cursor`. The cursor binds the resolved date window, filters, workspace, ordering and retained serving generations for 24 hours. Keep the other filters unchanged; authentication and current access are checked on every page.
- country
- Country filter. Accepts ISO-3, ISO-2, FIPS or an English name; comma-separate for OR. Matches the event's own location OR either actor's origin country by default, so a result can include events that happened elsewhere — set `country_match` to narrow it to location only. The definition in force is echoed as `applied_filters.country_match`.
- region
- One ACLED-style region. Expanded to its member countries.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- One continent. Expanded to its member countries.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- country_match
- Which definition of "in this country" the `country` / `region` / `continent` filters use. Defaults to the wider one, which is why omitting it changes nothing. Applies to `region` and `continent` too, since both expand into the same country set. Note that `group_by=country` buckets on the event's own location, while the default match also admits actor origin — so a filtered total and the bucket for that same country can differ. Pass `country_match=location` when you need the two to agree.
Accepted values: location_or_actor_origin, location
- admin1
- State or province (admin1), not a city. Discover valid values with `GET /api/v2/geo/admin1?country=`.
- bbox
- Bounding box `lat_min,lon_min,lat_max,lon_max`.
- near
- Point proximity `lat,lon`, combined with `radius_km`. The box is used for index pruning and rows are refined by true great-circle distance.
- radius_km
- Radius in km for point proximity. Default 100, capped 2000.
- source_actor_country
- Origin country of the ACTING side. Combine with `target_actor_country` to express a direction — `source_actor_country=CHN&target_actor_country=USA,GBR` is "China acting on those countries", which `country=` cannot say. Accepts ISO-3, ISO-2, FIPS or an English country name; comma-separate for OR. Unlike `country`, `region` and `continent` do not expand onto the actor side. On CAMEO+ events the source actor IS the performer of the action; on conflict (ACLED) events the first actor is the PRIMARY actor and not necessarily the initiator, so this asserts involvement in that role rather than who started it.
- target_actor_country
- Origin country of the RECEIVING side — the actor the action was directed at. Accepts ISO-3, ISO-2, FIPS or an English country name; comma-separate for OR. Unlike `country`, `region` and `continent` do not expand onto the actor side. On CAMEO+ events the source actor IS the performer of the action; on conflict (ACLED) events the first actor is the PRIMARY actor and not necessarily the initiator, so this asserts involvement in that role rather than who started it.
- actor_country
- Origin country of EITHER side, without regard to direction. This is the actor-origin half of what `country=` matches, on its own — use it to exclude events that merely happened in a country without any actor from it. Accepts ISO-3, ISO-2, FIPS or an English country name; comma-separate for OR. Unlike `country`, `region` and `continent` do not expand onto the actor side.
- entity
- Restrict to an entity's resolved coverage. Accepts a spine id (`e_…`), a news id (`wiki:…`) or a name, resolved through the shared arbiter so the same handle means the same entity on every endpoint. Accepts up to 25 comma-separated handles, which are UNIONED: a row is returned if ANY handle matches, never only the rows matching all of them. Every handle resolves through that same arbiter, so a handle means the same entity alone or in a list. A handle that resolves to nothing contributes nothing — it never widens the result — and is named in `applied_filters.entity_handles_unresolved`. More than 25 handles is refused with 400 MULTIPLE_ENTITY_HANDLES rather than truncated.
- entity_match
- Coverage matching: Stories mentioning or linking the entity and the Events those Stories carry. The default and only supported policy; it does not establish actor participation or material involvement.
Accepted values: coverage
- entity_family
- Which canonical ids the handle stands for. `expand` (default) also matches the sibling ids the entity arbiter has already merged into the same real-world entity — a Wikipedia identity minted twice under different URL spellings, for instance — and echoes the union back as `applied_filters.entity_ids_expanded`. `exact` restricts to the one canonical id the handle resolves to, reproducing the pre-2026-08-25 counts.
Accepted values: expand, exact
- office
- Restrict to the OFFICE-HOLDERS of a political office: the Wikidata QID of the office (`Q…`) or the `p_…` id `/api/v2/offices` serves. Resolves to every holder whose published term overlaps the window (or `office_as_of`, when sent), then scopes exactly as `entity=<those holders>` would — a row is returned if ANY holder matches, and it is UNIONED with `entity=` when both are sent. A name is refused with 400; resolve it with `GET /api/v2/offices?q=` first. A roster of more than 1,000 holders inside the window is refused with 400 OFFICE_SCOPE_TOO_LARGE, never truncated. Holders reach the news layer only through a Wikipedia identity, so `applied_filters.office_holders` discloses how many of the roster are `bridged_to_news` versus `unbridged` — an unbridged holder carries no key coverage matching can match on and contributes no rows, so the counts are a FLOOR on the office's real coverage rather than a measurement of it. Each matched row carries `entity_link.via: "office"` with `entity_link.entity` naming the HOLDER (a spine id), not the office.
- office_as_of
- VALID TIME for `office=` — scope to whoever held the office ON this date (YYYY-MM-DD) rather than to everyone whose term overlaps the window. This is the publisher's start/end clock, not what we knew then: it is NOT the knowledge-time `as_of` and is not gated by it. Office-holders with no published start date cannot be placed on a date and are excluded (counted in `applied_filters.office_holders.undated_excluded`), never fabricated. Ignored without `office`.
- category
- Event category — an ACLED event type or a CAMEO+ domain. Comma-separate for OR. Validated together with `subcategory`: an impossible pair returns 400, never an empty 200.
Accepted values: Battles, Protests, Riots, Explosions/Remote violence, Violence against civilians, Strategic developments, POLITICAL, CRIME, ECONOMIC, CORPORATE, TECHNOLOGY, INFRASTRUCTURE, ENVIRONMENT, HEALTH, DEMOGRAPHIC, INFORMATION
- subcategory
- Sub-event type (Conflict) or CAMEO+ leaf code. Comma-separate multiple values for OR. Scoped by `category` — sending it alone is 400 SUBCATEGORY_REQUIRES_CATEGORY and a pair that cannot exist is 400 INVALID_SUBCATEGORY_FOR_CATEGORY with the accepted values, so a bad value is never an empty 200 (both verified 2026-08-13). The taxonomy is closed and published in full, but PUBLICATION IS NOT COVERAGE — a defined code can carry zero events in any given window, and a few carry zero in most windows (`Sexual violence` is the measured example: its definition boundary sends nearly all such reporting to `Attack`). Before building a monitor on one code, measure it: `GET /api/v2/events/summary?group_by=subcategory` returns the codes that actually carry events in your window, with counts. An empty 200 here means no coverage for that combination, never zero real-world activity.
- significance_min
- Significance lower bound (0–1).
- significance_max
- Significance upper bound (0–1).
- confidence_min
- Confidence lower bound (0–1).
- confidence_max
- Confidence upper bound (0–1).
- goldstein_scale_min
- Goldstein scale lower bound (-10–10).
- goldstein_scale_max
- Goldstein scale upper bound (-10–10).
- magnitude_min
- Magnitude lower bound (0–10). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- magnitude_max
- Magnitude upper bound (0–10). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- systemic_importance_min
- Systemic importance lower bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- systemic_importance_max
- Systemic importance upper bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- propagation_potential_min
- Propagation potential lower bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- propagation_potential_max
- Propagation potential upper bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- market_sensitivity_min
- Market sensitivity lower bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- market_sensitivity_max
- Market sensitivity upper bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- geo_precision_min
- Geo precision lower bound (1–3).
- geo_precision_max
- Geo precision upper bound (1–3).
- search_mode
- Search interpretation. semantic (default) is a bounded hybrid search: complete-phrase name/title matches rank ahead of vector-ranked conceptual neighbours. lexical filters the complete serving set for a case-insensitive literal phrase in Events title/summary or Stories title before pagination; no stemming or boolean parsing. Lexical mode requires a supported serving snapshot and never falls back to the warehouse.
Accepted values: semantic, lexical
- search
- Search text. With search_mode=lexical this is a literal phrase in served Events title/summary or Stories title. By default the complete phrase is checked against name/title evidence and is also embedded for vector ranking; literal matches rank first and remaining results are conceptual neighbours. There is no boolean parser: a query shaped `a OR b` is reduced to its first term and the response says so. Costs an embedding call and can return 503 SEMANTIC_SEARCH_UNAVAILABLE.
- sort
- Ranking. A bare `search` with no explicit sort ranks by relevance instead.
Accepted values: significance, recent
- include_total
- Add `pagination.estimated_total` — how many events match the filters, ignoring the page. Off by default because it costs a second scan of the same window. Counted from the SAME filters and the same row source as the page, so it always describes the result set you are walking. It is `null` (not a number) on a `search=` request: semantic retrieval is bounded by a candidate cap, so any total there would describe the candidate pool rather than the matching events. Without it, `pagination.next_cursor` still tells you whether more rows exist — non-null means yes, null means the walk is finished.
- has_fatalities
- Restrict to events with a non-zero fatality count. CONFLICT FAMILY ONLY. `fatalities` is an ACLED-family observable; the CAMEO+ family has no fatality field, so its events carry `fatalities: null` (never a fabricated 0) and can never satisfy `true`. Over 2026-08-06..13 that was 92.5% of all events, including every ENVIRONMENT, INFRASTRUCTURE and HEALTH event — so a disaster or industrial death toll is NOT in this filter, and the total it sums is the armed-conflict toll, not a global one. `false` is not the complement: it returns both a conflict event coded with a real 0 and every event that has no fatality observable at all, so it means "not known to be lethal", never "known to be non-lethal". For a lethality screen across all families use `significance_min` (cross-domain by construction) or `goldstein_scale_max` — Goldstein is signed, so an upper bound like `goldstein_scale_max=-5` selects the strongly conflictual end — and read `fatalities` off the card to tell a measured 0 from an absent observable.
- civilian_targeting
- Restrict to events coded as targeting civilians.
- languages
- Source-language filter (ISO 639-1/2) on the linked Story's coverage.
- include_images
- Attach article images to each card. Off by default. When enabled, entity thumbnails are also included unless `include_entity_images=false`.
- include_entity_images
- Include entity thumbnails when `include_images=true`. Defaults to true, but has no effect while `include_images` is false or omitted. Pass false to skip the additional Wikipedia lookups while retaining article images.
GETSearch Stories/api/v2/stories
Continuous stories coverage begins 2026-03-08. Use consecutive windows of at most 30 inclusive days; a calendar month can be too long. Finish pagination.next_cursor within each fixed window before starting the next chunk without a cursor. Without an explicit window, entity filters default to 30 days and other queries to the last 24 hours. meta.query_window reports the effective predicates; meta.coverage describes the available corpus. Deduplicated news Stories — clusters of articles about the same real-world development, built by us from the articles themselves. Each carries the source articles behind it, article and outlet counts, the coverage languages it appeared in, the entities it mentions, and the Events coded from it. One story can yield several events. related=true attaches adjacent clusters; Stories independently adjudicated as the same incident always share one canonical public representative. matched_categories reports which of your taxonomy filters each story actually matched, which is the fastest way to see why a result came back. Stories do not accept Event metric filters such as significance_min; query /api/v2/events with the metric filter and follow each Event's story_refs instead.
Response: StoryCard · MCP tool: search_stories
Parameters and accepted values (33)
- recorded_start
- Inclusive start of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters. Event and Story lists return records first made available in this interval, not later updates to existing records. Use /api/v2/activity for changes.
- recorded_end
- Exclusive end of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters. Event and Story lists return records first made available in this interval, not later updates to existing records. Use /api/v2/activity for changes.
- date_start
- EVENT TIME — inclusive start of the window by when it HAPPENED (YYYY-MM-DD). Windows are capped at 30 inclusive days. Use consecutive date chunks; calendar months can exceed the cap. Follow the endpoint's pagination guidance within each chunk.
- date_end
- EVENT TIME — inclusive end of the window by when it HAPPENED (YYYY-MM-DD).
- days
- Calendar-date window ending today, in days (max 30). `window=7d` and `days=7` are equivalent. When omitted, a request without entity filters uses the last 24 hours; entity filters use 30 days. Read meta.query_window for the actual bounds. There is no equivalent numeric default: sending days explicitly selects calendar dates and removes the implicit observed-time bound. Pass `days` explicitly, or `date_start`/`date_end`, whenever the window matters.
- limit
- Rows per page. Default 25, max 100.
- cursor
- Opaque pagination cursor taken from the previous response's `pagination.next_cursor`. The cursor binds the resolved date window, filters, workspace, ordering and retained serving generations for 24 hours. Keep the other filters unchanged; authentication and current access are checked on every page.
- country
- Country filter. Accepts ISO-3, ISO-2, FIPS or an English name; comma-separate for OR. Matches the event's own location OR either actor's origin country by default, so a result can include events that happened elsewhere — set `country_match` to narrow it to location only. The definition in force is echoed as `applied_filters.country_match`. A Story also matches on its OWN attributed country, so Stories with no coded Event are reachable — over 2026-08-14..16 that took the reachable set from 5,386 to 24,207 of 25,463 Stories. Combining `country` with an Event-scoped filter (`event_category`, `subcategory`, `admin1`, `bbox`, `domain`, `civilian_targeting`) keeps the Event-only definition, because those ask about the Story's Events. Attribution begins 2026-07; earlier windows are Event-derived only.
- region
- One ACLED-style region. Expanded to its member countries.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- One continent. Expanded to its member countries.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- country_match
- Which definition of "in this country" the `country` / `region` / `continent` filters use. Defaults to the wider one, which is why omitting it changes nothing. Applies to `region` and `continent` too, since both expand into the same country set. Note that `group_by=country` buckets on the event's own location, while the default match also admits actor origin — so a filtered total and the bucket for that same country can differ. Pass `country_match=location` when you need the two to agree.
Accepted values: location_or_actor_origin, location
- admin1
- State or province (admin1), not a city. Discover valid values with `GET /api/v2/geo/admin1?country=`.
- bbox
- Bounding box `lat_min,lon_min,lat_max,lon_max`.
- entity
- Restrict to an entity's resolved coverage. Accepts a spine id (`e_…`), a news id (`wiki:…`) or a name, resolved through the shared arbiter so the same handle means the same entity on every endpoint. Accepts up to 25 comma-separated handles, which are UNIONED: a row is returned if ANY handle matches, never only the rows matching all of them. Every handle resolves through that same arbiter, so a handle means the same entity alone or in a list. A handle that resolves to nothing contributes nothing — it never widens the result — and is named in `applied_filters.entity_handles_unresolved`. More than 25 handles is refused with 400 MULTIPLE_ENTITY_HANDLES rather than truncated.
- entity_match
- Coverage matching: Stories mentioning or linking the entity and the Events those Stories carry. The default and only supported policy; it does not establish actor participation or material involvement.
Accepted values: coverage
- entity_family
- Which canonical ids the handle stands for. `expand` (default) also matches the sibling ids the entity arbiter has already merged into the same real-world entity — a Wikipedia identity minted twice under different URL spellings, for instance — and echoes the union back as `applied_filters.entity_ids_expanded`. `exact` restricts to the one canonical id the handle resolves to, reproducing the pre-2026-08-25 counts.
Accepted values: expand, exact
- office
- Restrict to the OFFICE-HOLDERS of a political office: the Wikidata QID of the office (`Q…`) or the `p_…` id `/api/v2/offices` serves. Resolves to every holder whose published term overlaps the window (or `office_as_of`, when sent), then scopes exactly as `entity=<those holders>` would — a row is returned if ANY holder matches, and it is UNIONED with `entity=` when both are sent. A name is refused with 400; resolve it with `GET /api/v2/offices?q=` first. A roster of more than 1,000 holders inside the window is refused with 400 OFFICE_SCOPE_TOO_LARGE, never truncated. Holders reach the news layer only through a Wikipedia identity, so `applied_filters.office_holders` discloses how many of the roster are `bridged_to_news` versus `unbridged` — an unbridged holder carries no key coverage matching can match on and contributes no rows, so the counts are a FLOOR on the office's real coverage rather than a measurement of it. Each matched row carries `entity_link.via: "office"` with `entity_link.entity` naming the HOLDER (a spine id), not the office.
- office_as_of
- VALID TIME for `office=` — scope to whoever held the office ON this date (YYYY-MM-DD) rather than to everyone whose term overlaps the window. This is the publisher's start/end clock, not what we knew then: it is NOT the knowledge-time `as_of` and is not gated by it. Office-holders with no published start date cannot be placed on a date and are excluded (counted in `applied_filters.office_holders.undated_excluded`), never fabricated. Ignored without `office`.
- category
- Event category — an ACLED event type or a CAMEO+ domain. Comma-separate for OR. Validated together with `subcategory`: an impossible pair returns 400, never an empty 200. On Stories this filters the LINKED EVENTS. Passing a Story cluster label here (for example `cameoplus_political`) is a legacy alias for `story_category` and is applied as one — a materially different filter, so prefer `story_category` for a Story label and keep `category` for linked-event taxonomy. `applied_filters` reports which one received it.
Accepted values: Battles, Protests, Riots, Explosions/Remote violence, Violence against civilians, Strategic developments, POLITICAL, CRIME, ECONOMIC, CORPORATE, TECHNOLOGY, INFRASTRUCTURE, ENVIRONMENT, HEALTH, DEMOGRAPHIC, INFORMATION
- subcategory
- Sub-event type (Conflict) or CAMEO+ leaf code. Comma-separate multiple values for OR. Scoped by `category` — sending it alone is 400 SUBCATEGORY_REQUIRES_CATEGORY and a pair that cannot exist is 400 INVALID_SUBCATEGORY_FOR_CATEGORY with the accepted values, so a bad value is never an empty 200 (both verified 2026-08-13). The taxonomy is closed and published in full, but PUBLICATION IS NOT COVERAGE — a defined code can carry zero events in any given window, and a few carry zero in most windows (`Sexual violence` is the measured example: its definition boundary sends nearly all such reporting to `Attack`). Before building a monitor on one code, measure it: `GET /api/v2/events/summary?group_by=subcategory` returns the codes that actually carry events in your window, with counts. An empty 200 here means no coverage for that combination, never zero real-world activity.
- search_mode
- Search interpretation. semantic (default) is a bounded hybrid search: complete-phrase name/title matches rank ahead of vector-ranked conceptual neighbours. lexical filters the complete serving set for a case-insensitive literal phrase in Events title/summary or Stories title before pagination; no stemming or boolean parsing. Lexical mode requires a supported serving snapshot and never falls back to the warehouse.
Accepted values: semantic, lexical
- search
- Search text. With search_mode=lexical this is a literal phrase in served Events title/summary or Stories title. By default the complete phrase is checked against name/title evidence and is also embedded for vector ranking; literal matches rank first and remaining results are conceptual neighbours. There is no boolean parser: a query shaped `a OR b` is reduced to its first term and the response says so. Costs an embedding call and can return 503 SEMANTIC_SEARCH_UNAVAILABLE.
- story_category
- Story-level category. Comma-separate for OR.
Accepted values: conflict_security, cameoplus_political, cameoplus_crime, cameoplus_economic, cameoplus_corporate, cameoplus_technology, cameoplus_infrastructure, cameoplus_environment, cameoplus_health, cameoplus_demographic, cameoplus_information, CONFLICT, CORPORATE, CRIME, DEMOGRAPHIC, ECONOMIC, ENVIRONMENT, HEALTH, INFORMATION, INFRASTRUCTURE, POLITICAL, TECHNOLOGY
- has_events
- Restrict to Stories that have (or have not) linked Events.
- has_fatalities
- Restrict to Stories whose linked Events carry fatalities. CONFLICT FAMILY ONLY. `fatalities` is an ACLED-family observable; the CAMEO+ family has no fatality field, so its events carry `fatalities: null` (never a fabricated 0) and can never satisfy `true`. Over 2026-08-06..13 that was 92.5% of all events, including every ENVIRONMENT, INFRASTRUCTURE and HEALTH event — so a disaster or industrial death toll is NOT in this filter, and the total it sums is the armed-conflict toll, not a global one. `false` is not the complement: it returns both a conflict event coded with a real 0 and every event that has no fatality observable at all, so it means "not known to be lethal", never "known to be non-lethal". Stories publish no metric filters, so for a cross-family severity screen query `/api/v2/events` — which does — and follow `story_refs` back. Read `fatalities` off each linked event to tell a measured 0 from an absent observable.
- civilian_targeting
- Restrict to Stories whose linked Events target civilians.
- article_count_min
- Minimum article count.
- article_count_max
- Maximum article count.
- languages
- Coverage-language filter (ISO 639-1/2).
- include_images
- Attach article images to each card. Off by default. When enabled, entity thumbnails are also included unless `include_entity_images=false`.
- include_entity_images
- Include entity thumbnails when `include_images=true`. Defaults to true, but has no effect while `include_images` is false or omitted. Pass false to skip the additional Wikipedia lookups while retaining article images.
- sort
- Ranking.
Accepted values: significance, recent
- related
- Attach related Stories (schema 130).
GETSummarize Events/api/v2/events/summary
Continuous events coverage begins 2026-03-01. Use consecutive windows of at most 30 inclusive days; a calendar month can be too long. This summary endpoint does not support cursor pagination; request each date chunk separately. Without an explicit window, entity filters default to 30 days and other queries to the last 24 hours. meta.query_window reports the effective predicates; meta.coverage describes the available corpus. Aggregate counts and metric statistics over the same Events /api/v2/events returns, grouped by date, country, region, continent, category or subcategory. Accepts every filter the list accepts, so a summary and a list of the same window are directly reconcilable. Metric averages are means over the rows where that metric is present, not over event_count — family-scoped metrics are genuinely absent on the other family.
Response: EventSummaryBucket · MCP tool: summarize_events
Parameters and accepted values (42)
- date_start
- EVENT TIME — inclusive start of the window by when it HAPPENED (YYYY-MM-DD). Windows are capped at 30 inclusive days. Use consecutive date chunks; calendar months can exceed the cap. Follow the endpoint's pagination guidance within each chunk.
- date_end
- EVENT TIME — inclusive end of the window by when it HAPPENED (YYYY-MM-DD).
- days
- Calendar-date window ending today, in days (max 30). `window=7d` and `days=7` are equivalent. When omitted, a request without entity filters uses the last 24 hours; entity filters use 30 days. Read meta.query_window for the actual bounds. There is no equivalent numeric default: sending days explicitly selects calendar dates and removes the implicit observed-time bound. Pass `days` explicitly, or `date_start`/`date_end`, whenever the window matters.
- limit
- Maximum number of BUCKETS returned (not rows). Default 50, max 500. There is no cursor on this endpoint, so a result at the limit may be truncated — widen the limit or narrow the window.
- group_by
- The dimension to aggregate over. Every dimension reconciles to the same total.
Accepted values: date, country, region, continent, category, subcategory, source_actor_country, target_actor_country
- country
- Country filter. Accepts ISO-3, ISO-2, FIPS or an English name; comma-separate for OR. Matches the event's own location OR either actor's origin country by default, so a result can include events that happened elsewhere — set `country_match` to narrow it to location only. The definition in force is echoed as `applied_filters.country_match`.
- region
- One ACLED-style region. Expanded to its member countries.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- One continent. Expanded to its member countries.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- country_match
- Which definition of "in this country" the `country` / `region` / `continent` filters use. Defaults to the wider one, which is why omitting it changes nothing. Applies to `region` and `continent` too, since both expand into the same country set. Note that `group_by=country` buckets on the event's own location, while the default match also admits actor origin — so a filtered total and the bucket for that same country can differ. Pass `country_match=location` when you need the two to agree.
Accepted values: location_or_actor_origin, location
- admin1
- State or province (admin1), not a city. Discover valid values with `GET /api/v2/geo/admin1?country=`.
- bbox
- Bounding box `lat_min,lon_min,lat_max,lon_max`.
- near
- Point proximity `lat,lon`, combined with `radius_km`. The box is used for index pruning and rows are refined by true great-circle distance.
- radius_km
- Radius in km for point proximity. Default 100, capped 2000.
- source_actor_country
- Origin country of the ACTING side. Combine with `target_actor_country` to express a direction — `source_actor_country=CHN&target_actor_country=USA,GBR` is "China acting on those countries", which `country=` cannot say. Accepts ISO-3, ISO-2, FIPS or an English country name; comma-separate for OR. Unlike `country`, `region` and `continent` do not expand onto the actor side. On CAMEO+ events the source actor IS the performer of the action; on conflict (ACLED) events the first actor is the PRIMARY actor and not necessarily the initiator, so this asserts involvement in that role rather than who started it.
- target_actor_country
- Origin country of the RECEIVING side — the actor the action was directed at. Accepts ISO-3, ISO-2, FIPS or an English country name; comma-separate for OR. Unlike `country`, `region` and `continent` do not expand onto the actor side. On CAMEO+ events the source actor IS the performer of the action; on conflict (ACLED) events the first actor is the PRIMARY actor and not necessarily the initiator, so this asserts involvement in that role rather than who started it.
- actor_country
- Origin country of EITHER side, without regard to direction. This is the actor-origin half of what `country=` matches, on its own — use it to exclude events that merely happened in a country without any actor from it. Accepts ISO-3, ISO-2, FIPS or an English country name; comma-separate for OR. Unlike `country`, `region` and `continent` do not expand onto the actor side.
- entity
- Restrict to an entity's resolved coverage. Accepts a spine id (`e_…`), a news id (`wiki:…`) or a name, resolved through the shared arbiter so the same handle means the same entity on every endpoint. Accepts up to 25 comma-separated handles, which are UNIONED: a row is returned if ANY handle matches, never only the rows matching all of them. Every handle resolves through that same arbiter, so a handle means the same entity alone or in a list. A handle that resolves to nothing contributes nothing — it never widens the result — and is named in `applied_filters.entity_handles_unresolved`. More than 25 handles is refused with 400 MULTIPLE_ENTITY_HANDLES rather than truncated.
- entity_match
- Coverage matching: Stories mentioning or linking the entity and the Events those Stories carry. The default and only supported policy; it does not establish actor participation or material involvement.
Accepted values: coverage
- entity_family
- Which canonical ids the handle stands for. `expand` (default) also matches the sibling ids the entity arbiter has already merged into the same real-world entity — a Wikipedia identity minted twice under different URL spellings, for instance — and echoes the union back as `applied_filters.entity_ids_expanded`. `exact` restricts to the one canonical id the handle resolves to, reproducing the pre-2026-08-25 counts.
Accepted values: expand, exact
- office
- Restrict to the OFFICE-HOLDERS of a political office: the Wikidata QID of the office (`Q…`) or the `p_…` id `/api/v2/offices` serves. Resolves to every holder whose published term overlaps the window (or `office_as_of`, when sent), then scopes exactly as `entity=<those holders>` would — a row is returned if ANY holder matches, and it is UNIONED with `entity=` when both are sent. A name is refused with 400; resolve it with `GET /api/v2/offices?q=` first. A roster of more than 1,000 holders inside the window is refused with 400 OFFICE_SCOPE_TOO_LARGE, never truncated. Holders reach the news layer only through a Wikipedia identity, so `applied_filters.office_holders` discloses how many of the roster are `bridged_to_news` versus `unbridged` — an unbridged holder carries no key coverage matching can match on and contributes no rows, so the counts are a FLOOR on the office's real coverage rather than a measurement of it. Each matched row carries `entity_link.via: "office"` with `entity_link.entity` naming the HOLDER (a spine id), not the office.
- office_as_of
- VALID TIME for `office=` — scope to whoever held the office ON this date (YYYY-MM-DD) rather than to everyone whose term overlaps the window. This is the publisher's start/end clock, not what we knew then: it is NOT the knowledge-time `as_of` and is not gated by it. Office-holders with no published start date cannot be placed on a date and are excluded (counted in `applied_filters.office_holders.undated_excluded`), never fabricated. Ignored without `office`.
- category
- Event category — an ACLED event type or a CAMEO+ domain. Comma-separate for OR. Validated together with `subcategory`: an impossible pair returns 400, never an empty 200.
Accepted values: Battles, Protests, Riots, Explosions/Remote violence, Violence against civilians, Strategic developments, POLITICAL, CRIME, ECONOMIC, CORPORATE, TECHNOLOGY, INFRASTRUCTURE, ENVIRONMENT, HEALTH, DEMOGRAPHIC, INFORMATION
- subcategory
- Sub-event type (Conflict) or CAMEO+ leaf code. Comma-separate multiple values for OR. Scoped by `category` — sending it alone is 400 SUBCATEGORY_REQUIRES_CATEGORY and a pair that cannot exist is 400 INVALID_SUBCATEGORY_FOR_CATEGORY with the accepted values, so a bad value is never an empty 200 (both verified 2026-08-13). The taxonomy is closed and published in full, but PUBLICATION IS NOT COVERAGE — a defined code can carry zero events in any given window, and a few carry zero in most windows (`Sexual violence` is the measured example: its definition boundary sends nearly all such reporting to `Attack`). Before building a monitor on one code, measure it: `GET /api/v2/events/summary?group_by=subcategory` returns the codes that actually carry events in your window, with counts. An empty 200 here means no coverage for that combination, never zero real-world activity.
- significance_min
- Significance lower bound (0–1).
- significance_max
- Significance upper bound (0–1).
- confidence_min
- Confidence lower bound (0–1).
- confidence_max
- Confidence upper bound (0–1).
- goldstein_scale_min
- Goldstein scale lower bound (-10–10).
- goldstein_scale_max
- Goldstein scale upper bound (-10–10).
- magnitude_min
- Magnitude lower bound (0–10). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- magnitude_max
- Magnitude upper bound (0–10). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- systemic_importance_min
- Systemic importance lower bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- systemic_importance_max
- Systemic importance upper bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- propagation_potential_min
- Propagation potential lower bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- propagation_potential_max
- Propagation potential upper bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- market_sensitivity_min
- Market sensitivity lower bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- market_sensitivity_max
- Market sensitivity upper bound (0–1). Published only for the cameoplus family — filtering on it excludes every event outside that family.
- geo_precision_min
- Geo precision lower bound (1–3).
- geo_precision_max
- Geo precision upper bound (1–3).
- has_fatalities
- Restrict to events with a non-zero fatality count. CONFLICT FAMILY ONLY. `fatalities` is an ACLED-family observable; the CAMEO+ family has no fatality field, so its events carry `fatalities: null` (never a fabricated 0) and can never satisfy `true`. Over 2026-08-06..13 that was 92.5% of all events, including every ENVIRONMENT, INFRASTRUCTURE and HEALTH event — so a disaster or industrial death toll is NOT in this filter, and the total it sums is the armed-conflict toll, not a global one. `false` is not the complement: it returns both a conflict event coded with a real 0 and every event that has no fatality observable at all, so it means "not known to be lethal", never "known to be non-lethal". For a lethality screen across all families use `significance_min` (cross-domain by construction) or `goldstein_scale_max` — Goldstein is signed, so an upper bound like `goldstein_scale_max=-5` selects the strongly conflictual end — and read `fatalities` off the card to tell a measured 0 from an absent observable.
- civilian_targeting
- Restrict to events coded as targeting civilians.
- languages
- Coverage-language filter (ISO 639-1/2) on the underlying articles.
GETSummarize Stories/api/v2/stories/summary
Continuous stories coverage begins 2026-03-08. Use consecutive windows of at most 30 inclusive days; a calendar month can be too long. This summary endpoint does not support cursor pagination; request each date chunk separately. Without an explicit window, entity filters default to 30 days and other queries to the last 24 hours. meta.query_window reports the effective predicates; meta.coverage describes the available corpus. Aggregate counts and statistics over the same Stories /api/v2/stories returns, grouped by date, country, region, continent, category or subcategory. Event-scoped filters are applied inside the linked-event rollup, so a story's counts reflect the events that matched your filters rather than its total. With group_by=country, country_attribution=all counts each distinct Story under every country matching the ordinary Stories country filter. Country buckets may overlap; use group_by=date for distinct global totals.
Response: StorySummaryBucket · MCP tool: summarize_stories
Parameters and accepted values (26)
- date_start
- EVENT TIME — inclusive start of the window by when it HAPPENED (YYYY-MM-DD). Windows are capped at 30 inclusive days. Use consecutive date chunks; calendar months can exceed the cap. Follow the endpoint's pagination guidance within each chunk.
- date_end
- EVENT TIME — inclusive end of the window by when it HAPPENED (YYYY-MM-DD).
- days
- Calendar-date window ending today, in days (max 30). `window=7d` and `days=7` are equivalent. When omitted, a request without entity filters uses the last 24 hours; entity filters use 30 days. Read meta.query_window for the actual bounds. There is no equivalent numeric default: sending days explicitly selects calendar dates and removes the implicit observed-time bound. Pass `days` explicitly, or `date_start`/`date_end`, whenever the window matters.
- limit
- Maximum number of BUCKETS returned (not rows). Default 50, max 500. There is no cursor on this endpoint, so a result at the limit may be truncated — widen the limit or narrow the window.
- group_by
- The dimension to aggregate over. Country buckets overlap when country_attribution=all; use group_by=date for distinct totals.
Accepted values: date, country, region, continent, category, subcategory
- country_attribution
- For group_by=country: primary preserves one primary country per Story; all counts each Story under every authoritative country attribution or linked Event location/actor origin, using the same country_match and other filters as the Stories list. Explicit geographic filters also restrict the emitted country buckets. Buckets overlap and must not be summed as a global total. Other groupings ignore this option.
Accepted values: primary, all
- country
- Country filter. Accepts ISO-3, ISO-2, FIPS or an English name; comma-separate for OR. Matches the event's own location OR either actor's origin country by default, so a result can include events that happened elsewhere — set `country_match` to narrow it to location only. The definition in force is echoed as `applied_filters.country_match`. A Story also matches on its OWN attributed country, so Stories with no coded Event are reachable — over 2026-08-14..16 that took the reachable set from 5,386 to 24,207 of 25,463 Stories. Combining `country` with an Event-scoped filter (`event_category`, `subcategory`, `admin1`, `bbox`, `domain`, `civilian_targeting`) keeps the Event-only definition, because those ask about the Story's Events. Attribution begins 2026-07; earlier windows are Event-derived only.
- region
- One ACLED-style region. Expanded to its member countries.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- One continent. Expanded to its member countries.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- country_match
- Which definition of "in this country" the `country` / `region` / `continent` filters use. Defaults to the wider one, which is why omitting it changes nothing. Applies to `region` and `continent` too, since both expand into the same country set. Note that `group_by=country` buckets on the event's own location, while the default match also admits actor origin — so a filtered total and the bucket for that same country can differ. Pass `country_match=location` when you need the two to agree.
Accepted values: location_or_actor_origin, location
- admin1
- State or province (admin1), not a city. Discover valid values with `GET /api/v2/geo/admin1?country=`.
- bbox
- Bounding box `lat_min,lon_min,lat_max,lon_max`.
- entity
- Restrict to an entity's resolved coverage. Accepts a spine id (`e_…`), a news id (`wiki:…`) or a name, resolved through the shared arbiter so the same handle means the same entity on every endpoint. Accepts up to 25 comma-separated handles, which are UNIONED: a row is returned if ANY handle matches, never only the rows matching all of them. Every handle resolves through that same arbiter, so a handle means the same entity alone or in a list. A handle that resolves to nothing contributes nothing — it never widens the result — and is named in `applied_filters.entity_handles_unresolved`. More than 25 handles is refused with 400 MULTIPLE_ENTITY_HANDLES rather than truncated.
- entity_match
- Coverage matching: Stories mentioning or linking the entity and the Events those Stories carry. The default and only supported policy; it does not establish actor participation or material involvement.
Accepted values: coverage
- entity_family
- Which canonical ids the handle stands for. `expand` (default) also matches the sibling ids the entity arbiter has already merged into the same real-world entity — a Wikipedia identity minted twice under different URL spellings, for instance — and echoes the union back as `applied_filters.entity_ids_expanded`. `exact` restricts to the one canonical id the handle resolves to, reproducing the pre-2026-08-25 counts.
Accepted values: expand, exact
- office
- Restrict to the OFFICE-HOLDERS of a political office: the Wikidata QID of the office (`Q…`) or the `p_…` id `/api/v2/offices` serves. Resolves to every holder whose published term overlaps the window (or `office_as_of`, when sent), then scopes exactly as `entity=<those holders>` would — a row is returned if ANY holder matches, and it is UNIONED with `entity=` when both are sent. A name is refused with 400; resolve it with `GET /api/v2/offices?q=` first. A roster of more than 1,000 holders inside the window is refused with 400 OFFICE_SCOPE_TOO_LARGE, never truncated. Holders reach the news layer only through a Wikipedia identity, so `applied_filters.office_holders` discloses how many of the roster are `bridged_to_news` versus `unbridged` — an unbridged holder carries no key coverage matching can match on and contributes no rows, so the counts are a FLOOR on the office's real coverage rather than a measurement of it. Each matched row carries `entity_link.via: "office"` with `entity_link.entity` naming the HOLDER (a spine id), not the office.
- office_as_of
- VALID TIME for `office=` — scope to whoever held the office ON this date (YYYY-MM-DD) rather than to everyone whose term overlaps the window. This is the publisher's start/end clock, not what we knew then: it is NOT the knowledge-time `as_of` and is not gated by it. Office-holders with no published start date cannot be placed on a date and are excluded (counted in `applied_filters.office_holders.undated_excluded`), never fabricated. Ignored without `office`.
- category
- Event category — an ACLED event type or a CAMEO+ domain. Comma-separate for OR. Validated together with `subcategory`: an impossible pair returns 400, never an empty 200. On Stories this filters the LINKED EVENTS. Passing a Story cluster label here (for example `cameoplus_political`) is a legacy alias for `story_category` and is applied as one — a materially different filter, so prefer `story_category` for a Story label and keep `category` for linked-event taxonomy. `applied_filters` reports which one received it.
Accepted values: Battles, Protests, Riots, Explosions/Remote violence, Violence against civilians, Strategic developments, POLITICAL, CRIME, ECONOMIC, CORPORATE, TECHNOLOGY, INFRASTRUCTURE, ENVIRONMENT, HEALTH, DEMOGRAPHIC, INFORMATION
- subcategory
- Sub-event type (Conflict) or CAMEO+ leaf code. Comma-separate multiple values for OR. Scoped by `category` — sending it alone is 400 SUBCATEGORY_REQUIRES_CATEGORY and a pair that cannot exist is 400 INVALID_SUBCATEGORY_FOR_CATEGORY with the accepted values, so a bad value is never an empty 200 (both verified 2026-08-13). The taxonomy is closed and published in full, but PUBLICATION IS NOT COVERAGE — a defined code can carry zero events in any given window, and a few carry zero in most windows (`Sexual violence` is the measured example: its definition boundary sends nearly all such reporting to `Attack`). Before building a monitor on one code, measure it: `GET /api/v2/events/summary?group_by=subcategory` returns the codes that actually carry events in your window, with counts. An empty 200 here means no coverage for that combination, never zero real-world activity.
- story_category
- Story-level topic, comma-separated for OR. Distinct from the EVENT taxonomy that `category` filters.
Accepted values: conflict_security, cameoplus_political, cameoplus_crime, cameoplus_economic, cameoplus_corporate, cameoplus_technology, cameoplus_infrastructure, cameoplus_environment, cameoplus_health, cameoplus_demographic, cameoplus_information, CONFLICT, CORPORATE, CRIME, DEMOGRAPHIC, ECONOMIC, ENVIRONMENT, HEALTH, INFORMATION, INFRASTRUCTURE, POLITICAL, TECHNOLOGY
- has_events
- Restrict to Stories with at least one linked Event.
- has_fatalities
- Restrict to Stories whose linked events carry fatalities. CONFLICT FAMILY ONLY. `fatalities` is an ACLED-family observable; the CAMEO+ family has no fatality field, so its events carry `fatalities: null` (never a fabricated 0) and can never satisfy `true`. Over 2026-08-06..13 that was 92.5% of all events, including every ENVIRONMENT, INFRASTRUCTURE and HEALTH event — so a disaster or industrial death toll is NOT in this filter, and the total it sums is the armed-conflict toll, not a global one. `false` is not the complement: it returns both a conflict event coded with a real 0 and every event that has no fatality observable at all, so it means "not known to be lethal", never "known to be non-lethal". Stories publish no metric filters, so for a cross-family severity screen query `/api/v2/events` — which does — and follow `story_refs` back. Read `fatalities` off each linked event to tell a measured 0 from an absent observable.
- civilian_targeting
- Restrict to Stories with civilian-targeting events.
- article_count_min
- Lower bound on the number of source articles behind a Story.
- article_count_max
- Upper bound on the number of source articles behind a Story.
- languages
- Coverage-language filter (ISO 639-1/2) on the underlying articles.
GETShare of Voice/api/v2/share-of-voice
Compare an entity’s share of canonical settled Story records within one explicit news denominator. Story membership and entity references come from the Core serving tables; unsupported article-level and upstream-salience weighting are not published.
Response: ShareOfVoiceResponse · MCP tool: share_of_voice
Parameters and accepted values (19)
- query
- Semantic denominator query.
- topic
- Lexical denominator topic.
- category
- Story or event category denominator.
- country
- Country denominator. Accepts an English name, ISO-2, or ISO-3. A Story matches when its own attributed countries include the value, or a linked Event is located there, or either linked Event actor originates there.
- region
- Region denominator.
- continent
- Continent denominator.
- languages
- Language-code denominator.
- source_set
- Source denominator. `all` selects the complete served Story corpus in the requested window; otherwise pass one or more article domains such as `reuters.com`.
- entities
- Entity identifiers. `entity_id` and `entity` are singular compatibility aliases.
- entity_query
- Entity-name resolver input. `entity_search`, `entity_terms`, and `numerator` are aliases.
- run_id
- Previously materialized analytics run.
- denominator_hash
- Previously computed denominator identity.
- start_date
- First occurrence date. `date_start` is an alias.
- end_date
- Last occurrence date. `date_end` is an alias.
- date
- Single occurrence date.
- days
- Trailing window. `window` is an alias.
- limit
- Maximum entity rows.
- cursor
- Pagination cursor.
- offset
- Legacy numeric offset.
GETGet Story Articles/api/v2/stories/{story_id}/articles
Canonical-URL-deduplicated article evidence with source language and provenance-backed publisher country.
Response: Structured JSON response · MCP tool: get_story_articles
Parameters and accepted values (10)
- start_date
- First Story partition date. `date_start` is an alias.
- end_date
- Last Story partition date. `date_end` is an alias.
- date
- Single Story partition date.
- days
- Trailing date window. `window` is an alias.
- limit
- Maximum articles returned.
- cursor
- Pagination cursor.
- offset
- Legacy numeric offset.
- include_images
- Attach resolved article images.
- language
- Origin language filter. `languages` is an alias.
- publisher_country_iso3
- Known publisher-country filter. `publisher_country` is an alias; unknown publishers are never guessed.
GETList Situations/api/v2/situations
Discover stored Situations by title, current servable span overlap and volume counts, or member-linked coded Event location/category. Event facets require a reporting window of at most 30 days and match the same Event; they do not establish a primary country or category. Directory filtering, ordering and totals use current full serving membership. scope and selected_scope distinguish whole-Situation counts from requested reporting dates and carry content versions. narrative is a dated, independently verified summary when one has been published; null means unavailable. Entity counts cover all current servable members and are null if measurement fails.
Response: SituationSummaryCard · MCP tool: search_situations
Parameters and accepted values (15)
- entity
- Canonical entity handle or name, using the same identity resolution as Stories. Requires both reporting date bounds, at most 30 days.
- story_id
- Only Situations containing this currently served Story.
- event_uid
- Only Situations containing a served Story linked to this coded Event.
- include_map
- Include country aggregates over every matching Situation, independently of page size. Requires a reporting window of at most 30 days.
- date_start
- Return Situations still running on or after this date (YYYY-MM-DD) — matched against `span_end`, so an occurrence that began earlier and is ongoing IS returned. Optional and independent of `date_end`. There is no maximum span: the Situations table is one row per adjudicated occurrence and is small by construction, so this is a filter on a stored column rather than a bound on how much is scanned.
- date_end
- Return Situations that had already begun by this date (YYYY-MM-DD) — matched against `span_start`. Sent together with `date_start` the pair selects every occurrence whose span OVERLAPS the window; sent alone it leaves the other side open. An inverted pair is refused with `INVALID_DATE_RANGE` rather than answered empty.
- search
- Free text matched against the stored `title` OR the headline of any member Story reported inside the window (the last 30 days when no dates are sent) — a case-insensitive match requiring EVERY whitespace-separated term to appear in one of the two, so `nepal flood` matches "Flash floods hit northern Nepal-Tibet border" and `AI slowdown` finds a Situation titled "Trump says US will not slow AI race" through a member headline that says slowdown. The phrase also runs through the hybrid `GET /api/v2/stories?search=` in the same window, and a Situation holding one of the top-ranked Stories matches too, so `AI pause` can reach the same Situation through meaning; `meta.search.semantic_story_candidates` reports how many Story hits that arm contributed and `meta.search.note` says when it was unavailable. What it CANNOT do: read article text or entities directly; and `title` is the PEAK member's headline, re-stamped every time the Situation is recomputed. At most 8 terms; more is refused with `INVALID_SEARCH` rather than silently truncated. To search what a Situation is actually ABOUT, run `GET /api/v2/stories?search=` and take any returned Story id to `/api/v2/situations/{story_id}`.
- min_stories
- Minimum member Stories across the whole current servable membership, not the selected reporting window. The public discovery page sends min_stories=2&min_events=2; the API applies no minimum when omitted. Use min_stories=1&min_events=0 to include emerging seeds. This filter does not change creation, growth or direct UID lookup.
- min_articles
- Minimum articles across the member Stories — the best single proxy for how big an occurrence got, and the default sort key. Compared against the stored `article_count`.
- min_events
- Minimum coded Events at canonical-incident grain across the whole current servable membership. The public discovery page sends min_stories=2&min_events=2; the API applies no minimum when omitted. Use min_stories=1&min_events=0 to include emerging seeds, including reporting with no coded Events. Explicit zero is permitted.
- sort
- Ranking. `recent` (default) uses latest reporting date, then first-observed membership time; `created` orders by immutable creation time, newest first; `updated` orders by the latest serving-membership refresh; article_count, story_count and event_count are volume alternatives; `span_days` puts the longest-running occurrence first — the inclusive day count between `span.start` and `span.end`, with an unmeasured span last. Recent never uses refresh time or volume. Every order breaks ties on `situation_uid`, so paging with `offset` is stable.
Accepted values: article_count, story_count, event_count, recent, created, updated, span_days
- limit
- Situations per page. Default 25, max 200. `pagination.total` is the true number matching your filters, counted separately from the page, so `has_more` is measured rather than inferred from a full page.
- offset
- Situations to skip. This endpoint pages by offset and has no cursor — every sort is a total order (ties break on `situation_uid`), so an offset walk cannot repeat or skip a row.
- country
- Any member-linked coded Event located in this ISO-3 country. Actor nationality is not used. Requires date_start and date_end, at most 30 inclusive days. Both country and category match the SAME Event.
- category
- Any member-linked coded Event in this Event taxonomy category, not Story category or a primary Situation label. Requires both reporting date bounds, at most 30 days. Country and category match the same Event.
Accepted values: Battles, Protests, Riots, Explosions/Remote violence, Violence against civilians, Strategic developments, POLITICAL, CRIME, ECONOMIC, CORPORATE, TECHNOLOGY, INFRASTRUCTURE, ENVIRONMENT, HEALTH, DEMOGRAPHIC, INFORMATION
GETGet a Situation/api/v2/situations/{story_id}
Every Story and Event belonging to one real-world occurrence. The path accepts EITHER a situation_uid (sit_…) or any member Story id, and both return the same occurrence — a Story resolves to its primary Situation. A situation_uid is minted and content-independent, so it never changes; a Situation that merges into another resolves FORWARD to the survivor rather than 404ing. meta.situation_source says which you got: curated is the stored, adjudicated membership set, and walked is the adjudicated neighbourhood around a Story that no Situation covers yet — the same shape, a weaker claim. Stored members carry route; antecedent and consequence are chronological, not proof of causality. membership reports the basis and any recorded decision reason; missing evidence stays null. origin is the earliest member carrying material coverage and peak the largest; both are derived and recomputed, and neither is the identity. Membership is not exclusive — a Story may belong to more than one Situation. Returns the member Stories (paged, with the relation and the evidence arm that produced each link), a per-day rollup of how the occurrence built up, and its Events collapsed to one row per canonical incident. How Stories adjudicated as the SAME incident are reported DIFFERS BY PATH, so read meta.situation_source first. On a walked situation they are folded out of the member list and listed under duplicates; on a curated one they are admitted as MEMBERS carrying route same_incident, duplicates is empty by construction, and how many there are is totals.story_count minus totals.distinct_incident_count. Either way, if the Story you asked for was the folded side, the situation is served from its survivor and requested_story_id names what you sent. Members and Events resolve through the same settled tables /api/v2/stories and /api/v2/events read, so a situation can never name a record those endpoints will not return. incident_relations publishes only independently adjudicated, directional umbrella/component links; it never changes Event identity or event_count, and null confirmed counts mean relation publication is unavailable or incomplete for the returned Event dates rather than zero. The Situation graph hides confirmed umbrella summaries by default and lets the reader reveal both summaries and containment edges. Curated responses include scopes.whole and scopes.selected, each with a content version and full totals independent of graph limits. narrative, when present, is independently verified and dated; current=false retains a previous publication while a refresh is pending. The incident_adjudication split describes returned incident rows, not unseen Events. Fatalities are reported as both a maximum and a raw sum, and the incident count ships with its adjudication split, because most Events have never been compared to anything. Three arrays are bounded — member Stories, incidents and the entity cast — and caps reports each ceiling and whether it bit, so nothing here is capped in silence.
Response: SituationCard · MCP tool: get_situation
Parameters and accepted values (9)
- edition_id
- Pin a retained edition. Mutually exclusive with as_of.
- as_of
- Latest edition published at or before this UTC ISO timestamp. No reconstruction before retention began.
- date_start
- Earliest member date to include. Defaults to seven days before the anchor Story's own date — not to today, because a situation is anchored on a Story, not on the request clock. On a curated Situation it filters the stored membership and `coverage` is re-derived from the members that survived, so the window reported is never wider than the payload.
- date_end
- Latest member date to include. Defaults to seven days after the anchor Story's own date. The span may not exceed 30 days when both bounds are sent — the same ceiling the service compares against, not a number typed into a sentence. On a curated Situation, sending neither bound returns the whole stored span; sending one leaves the other side open.
- limit
- How many member Stories to return. The per-day rollup, the incidents and every total always describe the WHOLE situation, so a small page never shrinks the numbers.
- depth
- How many adjudicated hops out from the anchor to walk. `depth=1` returns only Stories a judge compared with the anchor DIRECTLY. Higher values reach further across time — no link in the source spans more than two days, so a week is depth, not distance — but a Story at hop 2 or 3 was never compared with the anchor itself: it was reached along a path of individually adjudicated edges, which `edges` and each Story's `hop` and `via_story_id` make explicit. Treat depth > 1 as reachability, not membership. NOT APPLICABLE on a curated Situation, whose membership was adjudicated rather than traversed: there is no frontier, so the value appears under `applied_filters.ignored` beside `meta.situation_source: "curated"` rather than being echoed back as honoured.
- max_nodes
- Ceiling on member Stories. On a walked situation it bounds the frontier, ordered largest-first so a cut is reproducible rather than dependent on row order. On a curated one it bounds the membership read, taking them in the order `stories` is served in — earliest date first, largest within a date — so the cut is the head of the list you would have paged through rather than an arbitrary slice. `truncated` and `caps.members` say whether it bit, both measured. It is a FILTER, not a page size: the totals describe the members it admitted, while `limit` pages those members without changing any number.
- include
- Optional blocks. `edges` returns one undirected row per adjudicated pair across the bounded graph membership, independently of Story pagination (`limit` and `offset`). An edge can reference a Story outside the returned page; fetch the member pages to hydrate those IDs and inspect `caps` and `scopes` for coverage. `/connections` pages membership provenance, not pairwise edges. Edges are omitted by default; `totals.edge_count` reports all pairs in the selected scope even when the returned graph is capped.
Accepted values: edges
- offset
- Member Stories to skip. The member list is ordered by date then article count.
GETList all linked entities in a stored Situation/api/v2/situations/{story_id}/entities
Paginated canonical entities across full servable stored membership, independently of the detail endpoint’s 40-entity or 200/250-member view. Identity merging precedes type filtering and pagination. summary.entity_count and by_type cover the whole requested scope; pagination.total covers the type filter. Bounded query failure returns an error, never a partial exact total. Shared auth and query quotas apply.
Response: SituationEntityCard · MCP tool: get_situation_entities
Parameters and accepted values (8)
- edition_id
- Pin a retained edition. Mutually exclusive with as_of.
- as_of
- Latest edition published at or before this UTC ISO timestamp. No reconstruction before retention began.
- scope_version
- Optional version from the preceding page scope. A changed scope returns 409 instead of silently mixing pages.
- date_start
- Optional earliest member reporting date. Omit both dates for the full servable membership.
- date_end
- Optional latest member reporting date. No implicit first200-member truncation.
- entity_type
- Case-insensitive type from summary.by_type (person, organization, company, ministry, agency, regulator, party, ngo, union, campaign, armed_group, brand, place, location, other); `unknown` selects untyped entities. A value outside that set is refused with 400 INVALID_ENUM rather than answered as an empty page. Applied after identity folding and echoed in applied_filters.
- limit
- Maximum linked entities returned per page.
- offset
- Entities to skip after canonical folding and type filtering. Stable order: distinct Story breadth, mentions, entity ID.
GETList a Situation's stories/api/v2/situations/{story_id}/stories
Independently paginated stories over current servable membership. Summary and pagination totals cover all matching members, never a graph sample. Article counts sum member Story counts, not unique URLs. Date filters select member reporting dates; Event occurrence dates remain separate.
Response: SituationMemberStoryCard · MCP tool: get_situation_stories
Parameters and accepted values (8)
- edition_id
- Pin a retained edition. Mutually exclusive with as_of.
- as_of
- Latest edition published at or before this UTC ISO timestamp. No reconstruction before retention began.
- scope_version
- Optional version from the preceding page scope. A changed scope returns 409 instead of silently mixing pages.
- date_start
- Optional earliest member reporting date. Omit both dates for the full servable membership.
- date_end
- Optional latest member reporting date. No implicit first200-member truncation.
- limit
- Records per page; independent of graph limits.
- offset
- Records to skip in this list. Stories order by reporting date, article count, ID; Events by significance then ID.
- record_ids
- Up to eight comma-separated retained Story IDs. Requires edition_id or as_of, cannot be combined with date_start or date_end, and returns complete frozen records in edition order. Offset and limit paginate that selected set.
GETList a Situation's events/api/v2/situations/{story_id}/events
Independently paginated events over current servable membership. Summary and pagination totals cover all matching members, never a graph sample. Article counts sum member Story counts, not unique URLs. Date filters select member reporting dates; Event occurrence dates remain separate. Event facts are hydrated from serving_events, while serving_event_story_links supplies membership only. incident_relations contains accepted directional umbrella/component links whose two endpoints are on this returned page; nullable summary counts distinguish unavailable or incomplete publication from a measured zero.
Response: SituationMemberEventCard · MCP tool: get_situation_events
Parameters and accepted values (8)
- edition_id
- Pin a retained edition. Mutually exclusive with as_of.
- as_of
- Latest edition published at or before this UTC ISO timestamp. No reconstruction before retention began.
- scope_version
- Optional version from the preceding page scope. A changed scope returns 409 instead of silently mixing pages.
- date_start
- Optional earliest member reporting date. Omit both dates for the full servable membership.
- date_end
- Optional latest member reporting date. No implicit first200-member truncation.
- limit
- Records per page; independent of graph limits.
- offset
- Records to skip in this list. Stories order by reporting date, article count, ID; Events by significance then ID.
- record_ids
- Up to eight comma-separated retained Event UIDs. Requires edition_id or as_of, cannot be combined with date_start or date_end, and returns complete frozen records in edition order. Offset and limit paginate that selected set.
GETList Situation membership connections chronologically/api/v2/situations/{story_id}/connections
Every servable membership connection, independently paginated and grouped by reporting day. Includes the stored membership relationship, first-observed timestamp, linking Story and recorded adjudication evidence. This is membership provenance, not a causal assertion or a sampled pair graph.
Response: SituationConnectionCard · MCP tool: get_situation_connections
Parameters and accepted values (7)
- edition_id
- Pin a retained edition. Mutually exclusive with as_of.
- as_of
- Latest edition published at or before this UTC ISO timestamp. No reconstruction before retention began.
- scope_version
- Optional version from the preceding page scope. A changed scope returns 409 instead of silently mixing pages.
- date_start
- Optional earliest member reporting date. Omit both dates for the full servable membership.
- date_end
- Optional latest member reporting date. No implicit first200-member truncation.
- limit
- Records per page; independent of graph limits.
- offset
- Records to skip in this list. Stories order by reporting date, article count, ID; Events by significance then ID.
GETRead a retained Situation brief/api/v2/situations/{story_id}/brief
Edition-bound as-of explanation, salient Events and actors, supported relationships, time-step traversal, full-scope statistics, frozen citations, previews and detail links. New editions do not forecast. Structure adds typed graph nodes and edges; context adds source-gated existing context. No model calls occur during reads. Unavailable analysis remains explicit.
Response: SituationBrief · MCP tool: get_situation_brief
Parameters and accepted values (3)
- edition_id
- Pin a retained edition. Mutually exclusive with as_of.
- as_of
- Latest edition published at or before this UTC ISO timestamp. No reconstruction before retention began.
- level
- Progressive detail level: brief (default), structure, context.
GETList retained Situation editions/api/v2/situations/{story_id}/editions
Immutable manifests newest first, including stable daily references. Capture time, reporting cutoff and publication time are distinct. Retention begins at rollout; older clipped snapshots are not reconstructed.
Response: SituationEdition · MCP tool: get_situation_editions
Parameters and accepted values (2)
- limit
- Maximum linked entities returned per page.
- offset
- Entities to skip after canonical folding and type filtering. Stable order: distinct Story breadth, mentions, entity ID.
GETEntity tone (by entity)/api/v2/entities/{entity_id}/tone
Media tone toward a specific entity over a date window, with optional cited evidence. Requires a plan with Entity media tone access (can_use_tone) — see Pricing for the plans that include it. **bucket is not a parameter of this endpoint.** Entity tone is always DAILY. The series is scored per entity per story per day and the response carries bucket_granularity: "day" on every row; there is no weekly or monthly aggregation to request. The spec previously advertised bucket=day|week|month, which the service never parsed — bucket=month returned daily rows with a 200. Aggregate on your side, or narrow the window with date_start/date_end. **quality is not a parameter of this endpoint.** Not applied. Entity tone rows are served as scored; there is no quality tier to select. Filter on the score_status and confidence fields carried on each row instead.
Response: status, start_date, end_date, entities, resolved_entities, unresolved_terms, entity_coverage, rows, methodology, evidence_samples, language_breakdown
Parameters and accepted values (9)
- entity_id
- Canonical entity id or wikipedia_url.
- date_start
- Window start YYYY-MM-DD. The inclusive date span may not exceed 30 days.
- date_end
- Window end YYYY-MM-DD. The inclusive date span may not exceed 30 days.
- days
- Trailing N-day window (1–30).
- languages
- Comma-separated language filter (e.g. en,zh). Accepted codes: Taxonomy & Codes — Languages. Observed vocabulary, measured 2026-08-10 (77 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/stories?limit=1 — read coverage.languages. The languages the corpus actually carries, canonicalized toward ISO 639-1 (639-2 codes are folded to their 2-letter form, and a long tail of 639-3 codes survives for outlets that have no 639-1 code). The filter validates SHAPE, not membership: it rejects only a token that cannot be an ISO code — a normalized value longer than 3 characters, so languages=english is a 400 while languages=zz is an accepted, empty 200. A code absent from this list may still be valid; it just had no coverage in the measured window. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#coverage_language
- category
- Story category filter (CSV). Same vocabulary as /api/v2/share-of-voice?category= and /api/v2/stories?story_category= — see Taxonomy & Codes. An unrecognised value returns 400 INVALID_ENUM with accepted_values. Omitted means all categories. Answered from the per-cluster tone rollup, so it narrows the time series AND the evidence samples together.
- include_evidence
- Return cited evidence snippets.
- limit
- Max rows.
- min_confidence
- Minimum per-bucket tone confidence to include (0–1).
GETEntity tone/api/v2/entity-tone
Entity-conditioned media tone, risk, and confidence over a window, with cited evidence. Resolve the entity first with /api/v2/search. Requires a plan with Entity media tone access (can_use_tone) — see Pricing for the plans that include it.
Response: status, start_date, end_date, entities, resolved_entities, unresolved_terms, entity_coverage, rows, methodology, evidence_samples, language_breakdown
Parameters and accepted values (11)
- entity_id
- Canonical entity id / wikipedia_url.
- entity_search
- Resolve by name instead of id.
- q
- Alias for entity_search.
- date_start
- Window start YYYY-MM-DD. The inclusive date span may not exceed 30 days.
- date_end
- Window end YYYY-MM-DD. The inclusive date span may not exceed 30 days.
- days
- Trailing N-day window (1–30).
- languages
- Language filter (e.g. en,zh,ar). Accepted codes: Taxonomy & Codes — Languages.
- category
- Story category filter (CSV). Same vocabulary as /api/v2/share-of-voice?category= and /api/v2/stories?story_category= — see Taxonomy & Codes. An unrecognised value returns 400 INVALID_ENUM with accepted_values. Omitted means all categories. Answered from the per-cluster tone rollup, so it narrows the time series AND the evidence samples together.
- include_evidence
- Include evidence snippets.
- evidence_limit
- Max evidence samples returned for the window — one card per story (default 25, max 250). Applied as a single global limit over the window, not a per-bucket cap.
- limit
- Max rows.
GETTone run status/api/v2/entity-tone/runs/{run_id}
Status + result of a queued entity-tone run. Requires a plan with Entity media tone access (can_use_tone) — see Pricing for the plans that include it.
Response: success, data
Parameters and accepted values (1)
- run_id
- Run id from the create call.
GETList tone runs/api/v2/entity-tone/runs
List entity-tone scoring runs. Requires a plan with Entity media tone access (can_use_tone) — see Pricing for the plans that include it.
Response: success, data, pagination
Parameters and accepted values (2)
- limit
- Rows per page.
- cursor
- Pagination cursor (opaque offset).
GETGet Event/api/v2/events/{event_id}
Fetch one known structured Event by ID.
Response: success, data
Parameters and accepted values (1)
- event_id
- Event ID returned by Search Events, for example conflict_... or cameoplus_....
GETGet Event Stories/api/v2/events/{event_id}/stories
Stored, addressable Stories connected to this Event through primary or rehomed links. Incident-member IDs resolve to the canonical Event. Published serving edges select membership; Story titles, dates and article counts come from the published Story snapshot. The serving edge does not yet project relationship roles, so bounded live provenance supplies primary/rehomed roles only within published membership. Metadata declares mixed relationship provenance and partial coverage; this context is not a whole-Event Story total. Default bounds anchor to the Event date; supplied/default bounds include two additional days on either side. Returns up to 50 Stories ordered by article count descending. meta.pagination reports limit, returned, has_more and total:null; has_more indicates additional matching context beyond the returned cap. A Story excluded only by general-list dedup remains addressable here. relation is reconnected for rehomed-only links, otherwise primary (primary takes precedence). An unavailable Story or serving-edge snapshot returns retryable 503; missing stored membership or Stories are not reconstructed from the warehouse.
Response: success, data, meta
Parameters and accepted values (3)
- event_id
- Event ID returned by Search Events, for example conflict_... or cameoplus_....
- start_date
- Optional ISO date (YYYY-MM-DD) lower bound. Defaults to the Event's own date window. The effective window extends two days beyond each supplied/default bound; response meta.window reports those bounds.
- end_date
- Optional ISO date (YYYY-MM-DD) upper bound. Defaults to the Event's own date window. The effective window extends two days beyond each supplied/default bound; response meta.window reports those bounds.
GETGet Story/api/v2/stories/{story_id}
Fetch one known Story by ID with linked Events, linked Entities, metrics, public URL, normalized geo, and top 3 inline articles.
Response: success, data
Parameters and accepted values (3)
- story_id
- Story ID returned by Search Stories or linked from an Event.
- include_images
- Attach resolved article images to the Story card. Off by default because it requires an extra lookup.
- include_entity_tone
- Attach entity-conditioned tone rows for the entities in this Story. Requires Entity media tone access (can_use_tone); unavailable evidence is omitted rather than reported as neutral.
People & organizations
Find identities and connect their reporting, hierarchy and public roles.
Resolved identities · GLEIF legal entitiesGETUnified cross-source entity search/api/v2/search
Resolve a name, alias, or acronym into ranked entity candidates before creating a Monitor or calling an entity-conditioned endpoint. q is the canonical query parameter; choose a result and reuse its entity_id for reporting. Facility candidates retain facility_id for facility context; ownership and proximity are distinct from identity. The registry and osint universes instead return source records; a null entity_id means that record has no spine link and does not establish news coverage. Native non-Latin-script matching is not yet complete: for Cyrillic, Chinese and other non-Latin names, use a common Romanized or English spelling for now (for example Gazprom rather than Газпром, or Beijing rather than 北京). Native-script queries outside supported scripts return an explicit error. Candidate source failures return retryable ENTITY_SEARCH_UNAVAILABLE; a failed read never establishes the absence of a match.
Response: success, query, count, pagination, data, applied_filters, meta · MCP tool: unified_entity_search
Parameters and accepted values (12)
- sort
- Use name for stable alphabetical public-official browsing with universe=osint and holds_office=true. Default when q is absent.
- offset
- Continue alphabetically sorted public officials using pagination.next_offset.
- q
- Canonical search text: a name, alias, or acronym. Required except when browsing public officials with universe=osint and holds_office=true. Until native non-Latin-script matching ships, use a common Romanized or English spelling for Cyrillic, Chinese, and other non-Latin names.
- type
- Optional identity type used to narrow ambiguous candidates. Conflicting linked types retain entity_type=entity and type_evidence; a filtered result includes a conflict only when the requested type is a published possibility. facility searches the existing facility directory and returns facility_id, not an invented entity ID. Source entitlements apply.
Accepted values: person, organization, place, facility
- country
- Known country association from source records, not an assertion of headquarters, citizenship, or reporting location. Accepts country names, ISO-2 or ISO-3; comma-separate for OR. Use country_match=strict for candidates with known matching evidence.
- country_match
- strict requires known matching source country association; include_unknown also returns candidates with no country evidence. Recommended requests explicitly send strict. Omission retains include_unknown compatibility.
Accepted values: strict, include_unknown
- region
- Narrow source country associations by region; country_match controls unknown association.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Narrow source country associations by continent; country_match controls unknown association.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- include_images
- Include available entity portraits/logos. Unknown images stay null.
- limit
- Maximum number of ranked candidates to return.
- universe
- Search all merged entities, news entities, reference entities, raw GLEIF registry records, or OSINT list and office-holder records. The registry and osint lanes return source records with nullable entity_id; they do not establish news coverage. Source entitlements apply.
Accepted values: all, news, reference, registry, osint
- holds_office
- Only politicians: entities that hold or have held a published public office (`sources.offices`), or on `universe=osint` only office-holder records. A ROLE filter, not a type — an office-holder is a `person`. Requires `can_use_offices` (403 PLAN_REQUIRED otherwise) and is not applicable to `universe=registry` (legal entities only; 400).
GETDiscover entities in reporting/api/v2/entities
Discover people, organizations and places appearing in reporting. For initial identity lookup, use /api/v2/search?q=…, select a candidate, then reuse its ID on the destination endpoint. This endpoint returns coverage metrics over the requested window. search= resolves a NAME across every entity universe we hold — news, the GDELT Cloud spine (SEC/EDGAR, GLEIF, GEM), sanctions lists, China-Abroad and Epoch — and each row reports the same entity_id join key as /api/v2/search (with legacy id retained), plus match_type / match_reason / match_score so the ranking can be audited rather than trusted. Metrics are the entity's resolved-layer coverage IN THE WINDOW, so a searched company with a successful empty coverage read reports zeros. Failed count reads report null with coverage_status; quiet reference matches remain available through search. Without search, the news-activity directory excludes measured-zero coverage rows. For the cross-source candidate list with per-source availability, use /api/v2/search. Native non-Latin-script matching is not yet complete, so use a common Romanized or English spelling for Cyrillic, Chinese and other non-Latin names for now. Native-script search support is on the way.
Response: Structured JSON response · MCP tool: search_entities
Parameters and accepted values (21)
- recorded_start
- Inclusive start of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters.
- recorded_end
- Exclusive end of API publication time, as an ISO UTC timestamp. Supply both bounds. Includes late arrivals without changing when the event happened. Cannot combine with reporting-date filters.
- date_start
- EVENT TIME — inclusive start of the window by when it HAPPENED (YYYY-MM-DD). Windows are capped at 30 inclusive days. Use consecutive date chunks; calendar months can exceed the cap. Follow the endpoint's pagination guidance within each chunk.
- date_end
- EVENT TIME — inclusive end of the window by when it HAPPENED (YYYY-MM-DD).
- days
- Calendar-date window ending today, in days (max 30). `window=7d` and `days=7` are equivalent. When omitted, entity coverage uses the last 30 calendar days with an observed-time bound over the same span. There is no equivalent numeric default: sending days explicitly selects calendar dates and removes the implicit observed-time bound. Pass `days` explicitly, or `date_start`/`date_end`, whenever the window matters.
- limit
- Rows per page. Default 25, max 100.
- cursor
- Opaque pagination cursor taken from the previous response's `pagination.next_cursor`.
- co_occurring_with
- Return the entities that appear ALONGSIDE this one — the entities linked to the same Stories, over the same window, narrowed by every other filter on this endpoint. Accepts a spine id (`e_…`), a news id (`wiki:…`) or a name, resolved through the same arbiter as `entity=` on `/api/v2/events` and `/api/v2/stories`, so one handle means the same entity everywhere. The subject is never returned in its own results. Co-occurrence is measured over SHARED STORIES — appearing in the same coverage, which is not a claim that the two entities interacted. A handle that resolves to nothing returns an EMPTY list with a `linkage` reason in `applied_filters`, never the global top entities.
- country
- Country filter. Accepts ISO-3, ISO-2, FIPS or an English name; comma-separate for OR. Matches the event's own location OR either actor's origin country by default, so a result can include events that happened elsewhere — set `country_match` to narrow it to location only. The definition in force is echoed as `applied_filters.country_match`.
- region
- One ACLED-style region. Expanded to its member countries.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- One continent. Expanded to its member countries.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- country_match
- Which definition of "in this country" the `country` / `region` / `continent` filters use. Defaults to the wider one, which is why omitting it changes nothing. Applies to `region` and `continent` too, since both expand into the same country set. Note that `group_by=country` buckets on the event's own location, while the default match also admits actor origin — so a filtered total and the bucket for that same country can differ. Pass `country_match=location` when you need the two to agree.
Accepted values: location_or_actor_origin, location
- category
- Event category — an ACLED event type or a CAMEO+ domain. Comma-separate for OR. Validated together with `subcategory`: an impossible pair returns 400, never an empty 200.
Accepted values: Battles, Protests, Riots, Explosions/Remote violence, Violence against civilians, Strategic developments, POLITICAL, CRIME, ECONOMIC, CORPORATE, TECHNOLOGY, INFRASTRUCTURE, ENVIRONMENT, HEALTH, DEMOGRAPHIC, INFORMATION
- subcategory
- Sub-event type (Conflict) or CAMEO+ leaf code. Comma-separate multiple values for OR. Scoped by `category` — sending it alone is 400 SUBCATEGORY_REQUIRES_CATEGORY and a pair that cannot exist is 400 INVALID_SUBCATEGORY_FOR_CATEGORY with the accepted values, so a bad value is never an empty 200 (both verified 2026-08-13). The taxonomy is closed and published in full, but PUBLICATION IS NOT COVERAGE — a defined code can carry zero events in any given window, and a few carry zero in most windows (`Sexual violence` is the measured example: its definition boundary sends nearly all such reporting to `Attack`). Before building a monitor on one code, measure it: `GET /api/v2/events/summary?group_by=subcategory` returns the codes that actually carry events in your window, with counts. An empty 200 here means no coverage for that combination, never zero real-world activity.
- type
- Restrict to one or more comma-separated entity types. `entity_type` is accepted as an alias because that is the id `/meta/enums` publishes for this vocabulary.
Accepted values: PERSON, ORGANIZATION, PLACE
- search
- Entity NAME to resolve. Matched across every entity universe and ranked by match quality (exact name, exact alias, acronym, prefix, fuzzy) before coverage — see each row's `match_type` and `match_reason`. Until native non-Latin-script matching ships, use a common Romanized or English spelling for Cyrillic, Chinese, and other non-Latin names.
- languages
- ISO source-language filter. Restricts coverage metrics to articles in those languages.
Accepted values: en, es, ar, ru, el, it, pt, fr, zh, id, uk, tr, ro, de, sq, sr, ko, bn, hi, bg, pl, bs, lt, hu, cs, ne, fi, hr, sl, mk, sv, sk, nl, no, da, hy, lv, he, th, ur, et, is, mr, ca, axe, vi, ml, te, ms, dv, pa, ka, gu, ta, fa, glg, my, mn, so, sw, kn, mt, si, uz, be, kk, rw, tet, ky, am, fo, mon, ja, af, tk, km, crs
- has_fatalities
- Restrict to entities linked to fatal events.
- civilian_targeting
- Restrict to entities linked to events coded as civilian targeting.
- sort
- recent orders an unfiltered directory by latest Story reporting time (latest_observed_news_at), then Story and article volume within the same timestamp. Filtered/search requests retain candidate news-date precision (latest_observed_news_date) because those predicates are not all materialized on serving Stories. Registry or link-processing times never lead. With significance, search resolves by match quality first; resolved counts and latest_date do not reorder the fixed candidate page.
Accepted values: significance, recent
- include_images
- Attach Wikipedia thumbnail/avatar URLs where available. Off unless requested — the images cost an extra lookup.
GETEntity Dossier — the statecraft timeline/api/v2/entities/{entity_id}/dossier
One Actor in, one time-ordered, cited chronology out: public-list membership evidence as a change log (list_added / list_removed), public offices held (office_start / office_end), FARA foreign-agent registrations, federal awards and the coded event stream — fusing news and registry records when a confirmed identity bridge exists. Missing bridges are disclosed in meta.coverage_note, with unmeasured coverage NULL. flags carries the cross-lane statecraft conjunctions (an office-holder who is listed, a designation that landed while in office, a sanctioned facility owner, a foreign agent for a sitting official) with receipts in flag_details; the dossier does not return a facility inventory. {entity_id} accepts a name, a spine e_ id, a wiki: or llm: id or a Wikipedia URL. Confirm the intended parent, subsidiary or person in Search and reuse its identifier. With as_of dated facts are filtered to on-or-before that date; offices use the office dates the source publishes. Unknown coverage is NULL, never a fabricated 0, and every item carries source_key, attribution, evidence_url and date_precision. List items also carry date_basis: publisher_listing uses a publisher-supplied listing date, first_observed uses our first observation, and observed_change uses our change-detection snapshot. An observed addition or removal is not a publisher designation or removal date. Legacy USAspending search records carry reported performance-start dates, explicitly labeled in the timeline, rather than award-action dates. Current memberships and identity links do not reconstruct a complete historical knowledge snapshot; meta.no_lookahead remains false. Reporting is linked-Story coverage, not proof of direct participation or material impact. Timeline items are bounded per source and summary totals may exceed the preview. Economic-statecraft INTELLIGENCE — not a compliance or screening control (see meta.disclaimer).
Response: EntityDossierResponse · MCP tool: get_entity_dossier
Parameters and accepted values (2)
- as_of
- Date-filtered dossier: ingredients are filtered to facts dated on or before this date; offices use the office start/end dates the source publishes. Identity and attribution still use current knowledge, so meta.no_lookahead remains false. Absent = current knowledge. A past date needs `can_use_asof`. The three aliases are the spellings `resolveAsOf` honours everywhere else.
- event_days
- Trailing calendar window including the end date, in days (1–30). `summary.events_in_window` and `summary.stories_in_window` count coded occurrences and coverage Stories separately using the public serving summaries; the Event timeline preview is capped at 15.
GETCorporate hierarchy for a resolved entity/api/v2/entities/{entity_id}/hierarchy
An entity's corporate hierarchy resolved through our spine: direct_parent, ultimate_parent, children and child_count. Accepts the same identifiers as the rest of the API — a name, an e_ id, a wiki: id or a wikipedia_url — and additionally a bare 20-character LEI, so the identifier you searched with works at this hop too. **Read the coverage block before the hierarchy.** lei_present: false means the entity carries no LEI in our crosswalk — a coverage gap, NOT evidence the entity has no parent. reporting_exception carries the reason a filer gave for not naming a parent (for example NO_KNOWN_PERSON), which is a DECLARED absence and materially different from an unknown one. child_count is null, never 0, when the requested direction excluded children. Corporate hierarchy as reported to the Global LEI System: accounting consolidation under IFRS/US-GAAP, not percentage ownership and not beneficial ownership. Natural persons are out of scope, and reporting is partial — an absent parent usually means the filer declared a reporting exception rather than that none exists. Gated on the existing can_use_exposure entitlement; the LEI itself is ungated. Point-in-time (as_of) is not supported for this source.
Response: Structured JSON response
Parameters and accepted values (5)
- entity_id
- A name, an e_ spine id, a wiki: news id, a wikipedia_url, or a bare 20-character LEI.
- direction
- Which way to walk. Full value list: https://docs.gdeltcloud.com/reference/enums#entity_hierarchy_direction
Accepted values: up, down, both
- depth
- Ancestor chain depth.
- include_siblings
- Include entities sharing the same direct parent.
- limit
- Children to return.
GETGet Entity/api/v2/entities/{entity_id}
Fetch one Entity profile with linked Stories and Events. Admin/internal callers can set include_tone=true to join cached Entity Tone coverage; when no tone score exists, the response returns tone_status=not_available rather than hiding the entity or treating missing tone as neutral.
Response: success, data
Parameters and accepted values (7)
- entity_id
- Entity ID returned by Search Entities or an entity_refs array. Wikipedia URLs are valid IDs and must be URL-encoded.
- date_start
- Inclusive start date in YYYY-MM-DD, matched against the event or story date. Alias start_date is accepted for compatibility. Omit dates for the default recent window; explicit windows may not exceed 30 days.
- date_end
- Inclusive end date in YYYY-MM-DD, matched against the event or story date. Alias end_date is accepted for compatibility. Omit dates for the default recent window; explicit windows may not exceed 30 days.
- limit
- Number of linked records to return.
- include_images
- Set false to skip best-effort Wikipedia thumbnail/avatar enrichment.
- include_tone
- Admin/internal preview: include cached Entity Tone coverage when available. Missing tone returns entity_tone.tone_status = not_available and should not be interpreted as neutral.
- include_registry
- Overlay the canonical registry sections (SEC filings / energy / screening / China) on the entity profile. Plan-gated (no admin bypass): requires a plan carrying registry access (can_use_filings, can_use_screening, can_use_china, or can_use_exposure), otherwise returns 403 PLAN_REQUIRED. Legacy bundled flag — prefer the per-source sources map, where each section is gated by its own plan flag.
GETOne GLEIF entity, with its relationships and ISINs/api/v2/gleif/entities/{lei}
The full Level-1 record for a single LEI plus its Level-2 relationships, any declared reporting exceptions, and its LEI↔ISIN mappings. A structurally impossible LEI returns 400 INVALID_LEI (it fails the ISO 17442 check digit); a well-formed LEI we do not hold returns 404. Corporate hierarchy as reported to the Global LEI System: accounting consolidation under IFRS/US-GAAP, not percentage ownership and not beneficial ownership. Natural persons are out of scope, and reporting is partial — an absent parent usually means the filer declared a reporting exception rather than that none exists. Plan-gated: requires the can_use_gleif entitlement (Analyst plan and up); non-entitled plans receive 403 PLAN_REQUIRED. Source: GLEIF Golden Copy, published under CC0 1.0. Every response carries meta.attributions[] with GLEIF's required non-endorsement notice.
Response: Structured JSON response
Parameters and accepted values (1)
- lei
- A 20-character LEI passing the ISO 17442 check digit.
GETGLEIF legal entities (Open Feed)/api/v2/gleif/entities
The GLEIF Global LEI Index — 3.39M legal entities with their registered name, jurisdiction, entity and registration status, legal form and registration authority, served close to as-published. **At least one filter is required**: the feed covers 3.39M records, so an unfiltered listing is refused with 400 FILTER_REQUIRED rather than served slowly. name matches the normalized legal name exactly or by prefix (never a substring scan). Plan-gated: requires the can_use_gleif entitlement (Analyst plan and up); non-entitled plans receive 403 PLAN_REQUIRED. Source: GLEIF Golden Copy, published under CC0 1.0. Every response carries meta.attributions[] with GLEIF's required non-endorsement notice.
Response: Structured JSON response
Parameters and accepted values (9)
- lei
- One or more LEIs, comma-separated (max 100). Each must pass the ISO 17442 check digit.
- name
- Legal name — normalized-exact or prefix match. Not a substring search.
- country
- ISO-3 country of the legal address (our house convention). Full value list: https://docs.gdeltcloud.com/reference/enums#country
- jurisdiction
- GLEIF's raw legal jurisdiction — alpha-2 or subdivision (US-CA). Observed vocabulary, measured 2026-08-10 (307 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/gleif/entities?country=<iso3>&limit=1 — read legal_jurisdiction. GLEIF's legal jurisdiction as published — ISO 3166-1 alpha-2 plus alpha-2/subdivision forms such as US-CA. Uppercased but NOT validated by the serve layer, unlike the three GLEIF status enums beside it, so an unlisted jurisdiction returns an empty 200. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#gleif_jurisdiction
- entity_status
- Entity status. Validated against the allowed set; a bad value returns 400 INVALID_ENUM with details.accepted_values. Full value list: https://docs.gdeltcloud.com/reference/enums#gleif_entity_status
Accepted values: ACTIVE, INACTIVE, NULL
- registration_status
- LEI registration status — e.g. ISSUED, LAPSED, RETIRED. A LAPSED registration does NOT mean the company ceased to exist. Full value list: https://docs.gdeltcloud.com/reference/enums#gleif_registration_status
Accepted values: ISSUED, LAPSED, PENDING_TRANSFER, PENDING_ARCHIVAL, DUPLICATE, RETIRED, ANNULLED, CANCELLED, TRANSFERRED, PENDING_VALIDATION, PUBLISHED, MERGED
- entity_category
- GLEIF entity category — e.g. GENERAL, FUND, BRANCH, SOLE_PROPRIETOR. Full value list: https://docs.gdeltcloud.com/reference/enums#gleif_entity_category
Accepted values: GENERAL, BRANCH, FUND, SOLE_PROPRIETOR, RESIDENT_GOVERNMENT_ENTITY, INTERNATIONAL_ORGANIZATION
- limit
- Rows to return.
- cursor
- Offset cursor; echo pagination.next_cursor to page.
GETLEI ↔ ISIN mappings/api/v2/gleif/isin
Resolve an LEI to its issued ISINs, or an ISIN back to its LEI. One of lei or isin is required — the mapping table holds ~9M rows and an unfiltered listing is refused with 400 FILTER_REQUIRED. Plan-gated: requires the can_use_gleif entitlement (Analyst plan and up); non-entitled plans receive 403 PLAN_REQUIRED. Source: GLEIF Golden Copy, published under CC0 1.0. Every response carries meta.attributions[] with GLEIF's required non-endorsement notice.
Response: Structured JSON response
Parameters and accepted values (4)
- lei
- LEI to resolve to ISINs.
- isin
- ISIN to resolve back to its LEI.
- limit
- Rows to return.
- cursor
- Offset cursor.
GETGLEIF Level-2 relationships/api/v2/gleif/relationships
Parent/child relationship records as filed with the Global LEI System. lei matches EITHER endpoint. Note the direction convention in the source data: the start node is the CHILD and the end node is the PARENT. Corporate hierarchy as reported to the Global LEI System: accounting consolidation under IFRS/US-GAAP, not percentage ownership and not beneficial ownership. Natural persons are out of scope, and reporting is partial — an absent parent usually means the filer declared a reporting exception rather than that none exists. Plan-gated: requires the can_use_gleif entitlement (Analyst plan and up); non-entitled plans receive 403 PLAN_REQUIRED. Source: GLEIF Golden Copy, published under CC0 1.0. Every response carries meta.attributions[] with GLEIF's required non-endorsement notice.
Response: Structured JSON response
Parameters and accepted values (5)
- lei
- Match relationships where this LEI is either endpoint. Must pass the ISO 17442 check digit.
- relationship_type
- e.g. IS_DIRECTLY_CONSOLIDATED_BY, IS_ULTIMATELY_CONSOLIDATED_BY, IS_INTERNATIONAL_BRANCH_OF. Validated — 400 INVALID_ENUM otherwise. Full value list: https://docs.gdeltcloud.com/reference/enums#gleif_relationship_type
Accepted values: IS_DIRECTLY_CONSOLIDATED_BY, IS_ULTIMATELY_CONSOLIDATED_BY, IS_INTERNATIONAL_BRANCH_OF, IS_FUND-MANAGED_BY, IS_SUBFUND_OF, IS_FEEDER_TO
- relationship_status
- ACTIVE or INACTIVE. Observed vocabulary, measured 2026-08-10 (3 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/gleif/relationships?lei=<lei> — read status. The status of a GLEIF relationship record. Unlike relationship_type beside it, this one is uppercased and passed through unvalidated, so it is published as measured. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#gleif_relationship_status
- limit
- Rows to return.
- cursor
- Offset cursor.
Company filings
Retrieve registrants, financial facts and filing-backed business relationships.
SEC EDGAR · XBRLGETResolve to CIK/api/v2/filings/resolve
Resolve a company name, ticker, or CIK to SEC filing identities and terminal spine entities.
Response: success, query, resolved · MCP tool: filings_resolve
Parameters and accepted values (5)
- q
- Company-name query. `name` and `search` are aliases.
- ticker
- Exact ticker symbol.
- cik
- SEC CIK, with or without zero padding.
- limit
- Maximum candidates returned.
- min_score
- Minimum fuzzy-name candidate score.
GETFiler XBRL facts/api/v2/filings/{cik}/facts
XBRL structured financial facts for a filer — a concept time series for exposure sizing. Requires a plan with SEC filings access (can_use_filings) — see Pricing for the plans that include it.
Response: success, cik, data, pagination, applied_filters
Parameters and accepted values (5)
- cik
- SEC CIK number.
- concept
- XBRL concept (e.g. Revenues, NetIncomeLoss).
- taxonomy
- Taxonomy (us-gaap | dei).
- limit
- Rows per page (1–500).
- cursor
- Pagination cursor (opaque offset).
GETFiler relations (LLM)/api/v2/filings/{cik}/relations
Subsidiary / supplier / customer / jurisdiction edges for a filer, derived from filing text through GDELT Cloud's proprietary AI pipeline and resolved to entity_ids with evidence. Requires a plan with SEC filings access (can_use_filings) — see Pricing for the plans that include it.
Response: success, cik, data, pagination, applied_filters
Parameters and accepted values (5)
- cik
- SEC CIK number.
- rel_type
- Filter to one relation kind: subsidiary | supplier | customer | counterparty | partner | jurisdiction_exposure | risk_factor (Item 1A risk themes). Omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#filings_rel_type
Accepted values: subsidiary, supplier, customer, counterparty, partner, jurisdiction_exposure, risk_factor
- country
- Filter to relation edges whose counterparty (object) jurisdiction matches this country — useful on jurisdiction_exposure edges. Accepts a country name (Vietnam), ISO-2 (VN), or ISO-3 (VNM) via the shared resolveCountryInput layer, matched against the edge's object_country_iso3; an unresolvable value returns 400 INVALID_COUNTRY.
- limit
- Rows per page (1–200).
- cursor
- Pagination cursor (opaque offset).
GETFiler profile/api/v2/filings/{cik}
A filer's identity, ticker, resolved entity_id, recent filings, and XBRL financial highlights. Requires a plan with SEC filings access (can_use_filings) — see Pricing for the plans that include it.
Response: success, cik, company_name, ticker, entity_id, recent_filings, risk_factors, business, xbrl_highlights
Parameters and accepted values (1)
- cik
- SEC CIK number.
GETMaterial events (8-K)/api/v2/filings/events
Dated 8-K material corporate events (M&A, material agreements, executive changes, bankruptcies, delistings, impairments) extracted from 8-K bodies, with counterparties resolved into the entity spine. Requires a plan with SEC filings access (can_use_filings) — see Pricing for the plans that include it.
Response: success, data, pagination, applied_filters
Parameters and accepted values (9)
- date_start
- Window start YYYY-MM-DD (≤30-day window).
- date_end
- Window end YYYY-MM-DD.
- date
- Anchor date YYYY-MM-DD (use with days).
- days
- Trailing N-day window (1–30, default 30).
- cik
- One or more CIK numbers (comma-separated).
- event_type
- Filter to one classified event type. Full set: acquisition | disposition | material_agreement | executive_change | results | guidance | restructuring | impairment | delisting | bankruptcy | other. Matched exactly; omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#filings_event_type
Accepted values: acquisition, disposition, material_agreement, executive_change, results, guidance, restructuring, impairment, delisting, bankruptcy, other
- search
- Case-insensitive substring match on the event headline.
- limit
- Rows per page (1–200, default 50).
- cursor
- Pagination cursor (opaque offset).
GETList SEC filings/api/v2/filings
List the SEC EDGAR filing index by company (CIK), form type, name, and date window. Requires a plan with SEC filings access (can_use_filings) — see Pricing for the plans that include it.
Response: success, data, pagination, sort, applied_filters
Parameters and accepted values (14)
- date_start
- Window start YYYY-MM-DD (≤30-day window).
- date_end
- Window end YYYY-MM-DD.
- date
- Anchor date YYYY-MM-DD (use with days).
- days
- Trailing N-day window (1–30).
- cik
- One or more CIK numbers (comma-separated).
- form_type
- One or more form types (e.g. 10-K,8-K,4). Observed vocabulary, measured 2026-08-10 (262 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/filings/summary?group_by=form_type. SEC form types are an open vocabulary: 264 distinct values appeared in a single 30-day window, and 424B2 alone was 36.3% of them. Any closed list here would be wrong within a quarter, so this filter accepts anything and returns an empty result for a form type the window does not contain. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#sec_form_type
- search
- Company-name search.
- country
- Filer business-address country — name / ISO-2 / ISO-3 / alias, comma-separated. Filters on biz_country_iso2, which is populated for ~45% of filings and is almost entirely US, so non-US values such as CN/JP currently return 0 rows. Full value list: https://docs.gdeltcloud.com/reference/enums#country
- region
- Region expanded to an ISO-3 country set, then matched against the filer's biz_country_iso2.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Continent expanded to an ISO-3 country set, then matched against the filer's biz_country_iso2.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- sort
- recent | filer. Full value list: https://docs.gdeltcloud.com/reference/enums#filings_sort
Accepted values: recent, filer
- limit
- Rows per page.
- cursor
- Pagination cursor (opaque offset).
- entity
- Restrict to one entity's SEC filings. Takes the SAME entity identifier as the other per-entity surfaces — a spine e_… id, a news wiki:…/llm:… id, or a merged alias of either — resolved through the shared resolver, so the id you used on /api/v2/events or /api/v2/gov/awards selects the same company here. Resolution maps the entity to its SEC Central Index Key(s); the applied set is echoed as applied_filters.entity_cik, and an entity carrying two filer numbers matches BOTH. An entity-scoped read is a primary-key seek, so it is NOT capped at 30 days (it defaults to the last year, like cik). A known entity with no SEC filer identity returns an empty result with a note — never the unfiltered feed — and an identifier that resolves to no known entity is refused with 400 UNRESOLVED_ENTITY_ID rather than silently ignored. Combine with cik to intersect the two. Also accepts: entity_id. Resolve a NAME first with GET /api/v2/search or GET /api/v2/filings/resolve?q=<name>.
GETSummarize filings/api/v2/filings/summary
Rollup of filings by form type, date, or filer — counts + distinct filers. Requires a plan with SEC filings access (can_use_filings) — see Pricing for the plans that include it.
Response: success, group_by, data, applied_filters
Parameters and accepted values (10)
- date_start
- Window start YYYY-MM-DD (≤30-day window).
- date_end
- Window end YYYY-MM-DD.
- date
- Anchor date YYYY-MM-DD (use with days).
- days
- Trailing N-day window (1–30).
- group_by
- form_type | date | filer. Full value list: https://docs.gdeltcloud.com/reference/enums#filings_summary_group_by
Accepted values: form_type, date, filer
- form_type
- Filter to one or more form types. Observed vocabulary, measured 2026-08-10 (262 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/filings/summary?group_by=form_type. SEC form types are an open vocabulary: 264 distinct values appeared in a single 30-day window, and 424B2 alone was 36.3% of them. Any closed list here would be wrong within a quarter, so this filter accepts anything and returns an empty result for a form type the window does not contain. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#sec_form_type
- country
- Filer business-address country — name / ISO-2 / ISO-3 / alias, comma-separated. Filters on biz_country_iso2, which is populated for ~45% of filings and is almost entirely US, so non-US values such as CN/JP currently return 0 rows.
- region
- Region expanded to an ISO-3 country set, then matched against the filer's biz_country_iso2.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Continent expanded to an ISO-3 country set, then matched against the filer's biz_country_iso2.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- limit
- Max buckets returned; pagination.truncated=true when total_buckets exceeds it.
Infrastructure & maritime
Explore sites, energy assets, ports and vessel activity.
Global Energy Monitor · NGA World Port Index · maritime recordsGETSearch Facilities/api/v2/facilities
Unified physical-asset directory — GEM energy and heavy-industry sites, WPI ports and AI data centers, deduped to one facility per real-world site.
Response: FacilityCard · MCP tool: facilities_search
Parameters and accepted values (19)
- limit
- Rows per page. Default 25, max 100.
- cursor
- Opaque pagination cursor taken from the previous response's `pagination.next_cursor`.
- granularity
- `site` (default) returns one canonical physical site; `unit` exposes source registry units.
- q
- Case-insensitive substring match over `name`. This is NOT semantic search — nothing is embedded, and a conceptually related term that does not appear literally will not match. Results are ordered by facility name (A–Z), not by relevance, so a query matching more rows than `limit` returns an arbitrary slice.
- type
- Facility type (21 values). Comma-separate for OR.
Accepted values: coal_plant, oil_gas_plant, nuclear_plant, geothermal_plant, bioenergy_plant, hydropower_plant, solar_farm, wind_farm, coal_mine, oil_gas_field, iron_ore_mine, coal_terminal, lng_terminal, gas_pipeline, oil_pipeline, lng_carrier, port, steel_plant, cement_plant, chemical_plant, data_center
- class
- Broad facility class; expanded to its member types.
Accepted values: power, extraction, transport_logistics, ports, heavy_industry, digital_infrastructure
- source
- Source silo the facility was projected from.
Accepted values: gem, maritime_ports, epoch
- status
- Lifecycle status. Matched case-insensitively — the corpus carries both `operating` and `Operating` — and GEM's "- inferred N y" variants fold into their base state. This is an OBSERVED vocabulary measured from the directory, not a closed list.
Accepted values: operating, pre-construction, cancelled, announced, construction, retired, Operating, cancelled - inferred 4 y, shelved - inferred 2 y, shelved, proposed, mothballed, active, Proposed, Mothballed, discovered, on order, permitted, pre-permit, in-development, Cancelled, Shelved, idle, Retired, abandoned, decommissioning, idled, operating pre-retirement, underground gas storage, Construction, mixed status, exploration
- country
- Country filter (ISO-3). `region` and `continent` expand to their member countries. A facility matches on either its primary or secondary country.
- region
- Region; expanded to member countries.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Continent; expanded to member countries.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- entity
- Owner filter. An `e_` spine id matches the resolved owner exactly; a name falls back to a fuzzy match on owner names.
- capacity_mw_min
- Minimum capacity in MW. Capacity units differ per tracker — see the tracker reference.
- capacity_mw_max
- Maximum capacity in MW.
- has_geo
- Restrict to facilities that do (or do not) carry coordinates. 99.15% of the directory does; the residual are GEM linear/areal assets — pipelines and fields — which are geometry, not a point.
- has_owner
- `true` restricts to facilities with a SPINE-RESOLVED owner (`owners[].entity_id` non-null). A facility can carry an unresolved owner NAME and still be excluded — that is the documented meaning of "owner" here, and it is the resolved id that makes owner-bridge fusion and `entity=` chaining possible. Owner coverage is 47.1% overall: heavy industry 99.9%, AI data centers 85%, GEM power 43%, ports 0% (WPI publishes no ownership layer).
- sort
- Ordering: name · capacity_desc · capacity_asc · recent · country.
- bbox
- Bounding box `lat_min,lon_min,lat_max,lon_max`.
- near
- Point proximity `lat,lon,radius_km`, refined by true great-circle distance. Note this is the three-part grammar — /api/v2/events takes `near=lat,lon` with a separate `radius_km`.
GETGet Facility/api/v2/facilities/{facility_id}
Returns a canonical physical site with unit count, unit identifiers and status breakdown. A legacy registry-unit id resolves to the same parent site.
Response: FacilityCard · MCP tool: facilities_get
Parameters and accepted values (0)
GETList Facility registry units/api/v2/facilities/{facility_id}/units
Lists the source registry units belonging to a canonical physical site. A canonical site id or any legacy unit id may identify the site.
Response: success, data
Parameters and accepted values (0)
GETFacility context/api/v2/facilities/{facility_id}/context
A facility fused with its OWNER's media coverage, plus optional government exposure. Returns owner_events — events about the owner, NOT events located at the site. When the owner cannot be resolved or cannot be bridged to the news layer, the arrays are null rather than empty, so "we did not look" is never mistaken for "we looked and found nothing". Coverage unions the checked owners or their recorded parents, preserving typed paths, stakes and sources in owner.coverage_paths; a minority ownership path does not establish control. Summary counts describe the returned Event preview and its linked Stories, not all matches. Multiple coverage entities leave the legacy singular owner id/name null; optional government footprints are not aggregated across them. Oversized or unavailable scopes are reported explicitly.
Response: Structured JSON response · MCP tool: facilities_context
Parameters and accepted values (5)
- days
- Owner-coverage window in days, max 30.
- date_start
- Explicit start of the owner-coverage window.
- date_end
- Explicit end of the owner-coverage window.
- limit
- Maximum owner events to attach. Default 10, max 50.
- include
- Optional extra blocks. `gov` attaches the owner's federal-award / FARA / sanctions footprint. An unentitled plan degrades the block to null with a `sources_unavailable` entry — it never 403s the whole response.
Accepted values: gov
GETGet Energy Asset/api/v2/energy/assets/{tracker}/{gem_id}
Fetch one Energy asset by tracker and GEM ID. The response includes the canonical asset card plus a raw source record containing tracker-specific fields.
Response: success, data, raw
Parameters and accepted values (2)
- tracker
- GEM tracker name. All trackers: Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#gem_tracker
Accepted values: coal_plants, coal_mines, coal_terminals, oil_gas_plants, oil_gas_extraction, lng_terminals, nuclear, geothermal, bioenergy, hydropower, solar, wind, gas_pipelines, oil_pipelines, lng_carriers
- gem_id
- GEM asset ID returned by Search Energy Assets.
GETMap Energy Assets/api/v2/energy/assets/map
Return map-ready Energy asset data. Without a single explicit country filter, the endpoint returns aggregate country-centroid rows. With exactly one country filter and no region or continent, it returns fine-grained asset pins capped by map_limit/fine_grained_limit.
Response: success, mode, data, filters_echo, applied_filters
Parameters and accepted values (22)
- tracker
- Comma-separated GEM trackers. Valid values: coal_plants, coal_mines, coal_terminals, oil_gas_plants, oil_gas_extraction, lng_terminals, nuclear, geothermal, bioenergy, hydropower, solar, wind, gas_pipelines, oil_pipelines, lng_carriers. Omit for all trackers. All trackers: Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#gem_heavy_industry_tracker The enum above is the UNION across every endpoint that shares this parameter: iron_steel_plants, cement_plants, chemical_plants, iron_ore_mines — ACCEPTED ONLY ON /api/v2/energy/assets, /api/v2/energy/assets/summary. Elsewhere they return 400. On this endpoint the accepted set is narrower than on the other endpoints that share this parameter: iron_steel_plants, cement_plants, chemical_plants, iron_ore_mines return 400 here.
Accepted values: coal_plants, coal_mines, coal_terminals, oil_gas_plants, oil_gas_extraction, lng_terminals, nuclear, geothermal, bioenergy, hydropower, solar, wind, gas_pipelines, oil_pipelines, lng_carriers
- country
- Country filter, resolved through the shared resolveCountryInput layer: a country name (United States), ISO-2 (US), ISO-3 (USA), or legacy alias all work. Filters primary or secondary country for cross-border assets; combinable with region/continent and an unresolvable value returns 400 INVALID_COUNTRY. Full value list: https://docs.gdeltcloud.com/reference/enums#country
- region
- Plain English region. Expands to the same ISO-3 country list used by V2 Events.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Plain English continent. Expands to the same ISO-3 country list used by V2 Events.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- status
- Comma-separated GEM status values. Common values include operating, construction, pre-construction, permitted, announced, proposed, shelved, cancelled, retired, and mothballed. See Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_status
Accepted values: operating, construction, proposed, permitted, cancelled, mothballed, retired, active, underground gas storage, on order, mixed status, announced, pre-construction, pre-permit, in-development, discovered, exploration, shelved, cancelled - inferred 4 y, shelved - inferred 2 y, abandoned, idle, idled, decommissioning
- operating_only
- Shorthand for status=operating.
- tier
- Comma-separated within-tracker tier values such as main, utility, distributed, below_threshold, closed, or sub_threshold. Observed vocabulary, measured 2026-08-10 (5 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/energy/assets/summary?group_by=tier. GEM's own coverage tier for an asset row (main sheet vs below-threshold vs closed, and the utility/distributed split on solar). The serve layer accepts it as a free comma list and does not validate it, so an unknown tier returns an empty 200 rather than a 400 — which is why it is published as a measurement rather than as an allowlist. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#energy_tier
- fuel
- Comma-separated fuel values. Matches the tracker-native fuel string or normalized cross-tracker fuel where populated. See Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_fuel
Accepted values: gas, oil, bioenergy, coal, solar, wind, nuclear, hydropower, geothermal
- capacity_mw_min
- Minimum MW capacity. Meaningful for power-generation trackers only.
- capacity_mw_max
- Maximum MW capacity. Meaningful for power-generation trackers only.
- start_year_min
- Minimum asset start year.
- start_year_max
- Maximum asset start year.
- retired_year_min
- Minimum asset retired year.
- retired_year_max
- Maximum asset retired year.
- entity
- Canonical owner selector — the same entity value works across endpoints. Pass a spine entity id (e_...) for an EXACT match against an asset's owners, operators, or parents, or any name for a case-insensitive fuzzy owner-name match. Preferred over the legacy owner_search param.
- owner_entity_id
- GEM Entity ID. Returns assets where the entity appears in owners, operators, or parents.
- bbox
- Viewport filter formatted as lat_min,lon_min,lat_max,lon_max.
- near
- Proximity filter formatted as lat,lon,radius_km.
- search
- Case-insensitive substring match against asset name.
- asset_class
- Asset class. The default fixed excludes mobile LNG carriers; use mobile or all for vessels. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_asset_class
Accepted values: fixed, mobile, all
- map_limit
- Fine-mode pin limit. Alias of fine_grained_limit.
- fine_grained_limit
- Fine-mode pin limit. Alias of map_limit.
GETSearch Energy Assets/api/v2/energy/assets
Search Global Energy Monitor energy-infrastructure assets across all 15 trackers. Returns clean asset cards with native capacity, MW capacity where meaningful, normalized geography, ownership arrays, GEM Wiki URLs, and detail/API links.
Response: success, data, pagination, sort, filters_echo, applied_filters
Parameters and accepted values (23)
- tracker
- Comma-separated GEM trackers. Valid values: coal_plants, coal_mines, coal_terminals, oil_gas_plants, oil_gas_extraction, lng_terminals, nuclear, geothermal, bioenergy, hydropower, solar, wind, gas_pipelines, oil_pipelines, lng_carriers. Omit for all trackers. All trackers: Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#gem_heavy_industry_tracker The enum above is the UNION across every endpoint that shares this parameter: iron_steel_plants, cement_plants, chemical_plants, iron_ore_mines — ACCEPTED ONLY ON /api/v2/energy/assets, /api/v2/energy/assets/summary. Elsewhere they return 400.
Accepted values: iron_steel_plants, cement_plants, chemical_plants, iron_ore_mines, coal_plants, coal_mines, coal_terminals, oil_gas_plants, oil_gas_extraction, lng_terminals, nuclear, geothermal, bioenergy, hydropower, solar, wind, gas_pipelines, oil_pipelines, lng_carriers
- country
- Country filter, resolved through the shared resolveCountryInput layer: a country name (United States), ISO-2 (US), ISO-3 (USA), or legacy alias all work. Filters primary or secondary country for cross-border assets; combinable with region/continent and an unresolvable value returns 400 INVALID_COUNTRY. Full value list: https://docs.gdeltcloud.com/reference/enums#country
- region
- Plain English region. Expands to the same ISO-3 country list used by V2 Events.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Plain English continent. Expands to the same ISO-3 country list used by V2 Events.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- status
- Comma-separated GEM status values. Common values include operating, construction, pre-construction, permitted, announced, proposed, shelved, cancelled, retired, and mothballed. See Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_status
Accepted values: operating, construction, proposed, permitted, cancelled, mothballed, retired, active, underground gas storage, on order, mixed status, announced, pre-construction, pre-permit, in-development, discovered, exploration, shelved, cancelled - inferred 4 y, shelved - inferred 2 y, abandoned, idle, idled, decommissioning
- operating_only
- Shorthand for status=operating.
- tier
- Comma-separated within-tracker tier values such as main, utility, distributed, below_threshold, closed, or sub_threshold. Observed vocabulary, measured 2026-08-10 (5 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/energy/assets/summary?group_by=tier. GEM's own coverage tier for an asset row (main sheet vs below-threshold vs closed, and the utility/distributed split on solar). The serve layer accepts it as a free comma list and does not validate it, so an unknown tier returns an empty 200 rather than a 400 — which is why it is published as a measurement rather than as an allowlist. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#energy_tier
- fuel
- Comma-separated fuel values. Matches the tracker-native fuel string or normalized cross-tracker fuel where populated. See Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_fuel
Accepted values: gas, oil, bioenergy, coal, solar, wind, nuclear, hydropower, geothermal
- capacity_mw_min
- Minimum MW capacity. Meaningful for power-generation trackers only.
- capacity_mw_max
- Maximum MW capacity. Meaningful for power-generation trackers only.
- start_year_min
- Minimum asset start year.
- start_year_max
- Maximum asset start year.
- retired_year_min
- Minimum asset retired year.
- retired_year_max
- Maximum asset retired year.
- entity
- Canonical owner selector — the same entity value works across endpoints. Pass a spine entity id (e_...) for an EXACT match against an asset's owners, operators, or parents, or any name for a case-insensitive fuzzy owner-name match. Preferred over the legacy owner_search param.
- owner_entity_id
- GEM Entity ID. Returns assets where the entity appears in owners, operators, or parents.
- bbox
- Viewport filter formatted as lat_min,lon_min,lat_max,lon_max.
- near
- Proximity filter formatted as lat,lon,radius_km.
- search
- Case-insensitive substring match against asset name.
- asset_class
- Asset class. The default fixed excludes mobile LNG carriers; use mobile or all for vessels. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_asset_class
Accepted values: fixed, mobile, all
- sort
- List sort order. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_sort
Accepted values: capacity_desc, capacity_asc, start_year_desc, start_year_asc, recent, name
- limit
- Number of asset cards to return.
- cursor
- Pagination cursor from pagination.next_cursor.
GETSummarize Energy Assets/api/v2/energy/assets/summary
Aggregate counts and MW rollups across Energy assets. Summary endpoints use structured filters only. capacity_mw fields are meaningful for power-generation trackers; constrain tracker when comparing capacity across unit families.
Response: success, group_by, data, applied_filters
Parameters and accepted values (21)
- group_by
- Summary aggregation dimension. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_group_by
Accepted values: country, region, continent, tracker, status, start_year_decade, fuel, tier
- tracker
- Comma-separated GEM trackers. Valid values: coal_plants, coal_mines, coal_terminals, oil_gas_plants, oil_gas_extraction, lng_terminals, nuclear, geothermal, bioenergy, hydropower, solar, wind, gas_pipelines, oil_pipelines, lng_carriers. Omit for all trackers. All trackers: Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#gem_heavy_industry_tracker The enum above is the UNION across every endpoint that shares this parameter: iron_steel_plants, cement_plants, chemical_plants, iron_ore_mines — ACCEPTED ONLY ON /api/v2/energy/assets, /api/v2/energy/assets/summary. Elsewhere they return 400.
Accepted values: iron_steel_plants, cement_plants, chemical_plants, iron_ore_mines, coal_plants, coal_mines, coal_terminals, oil_gas_plants, oil_gas_extraction, lng_terminals, nuclear, geothermal, bioenergy, hydropower, solar, wind, gas_pipelines, oil_pipelines, lng_carriers
- country
- Country filter, resolved through the shared resolveCountryInput layer: a country name (United States), ISO-2 (US), ISO-3 (USA), or legacy alias all work. Filters primary or secondary country for cross-border assets; combinable with region/continent and an unresolvable value returns 400 INVALID_COUNTRY. Full value list: https://docs.gdeltcloud.com/reference/enums#country
- region
- Plain English region. Expands to the same ISO-3 country list used by V2 Events.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Plain English continent. Expands to the same ISO-3 country list used by V2 Events.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- status
- Comma-separated GEM status values. Common values include operating, construction, pre-construction, permitted, announced, proposed, shelved, cancelled, retired, and mothballed. See Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_status
Accepted values: operating, construction, proposed, permitted, cancelled, mothballed, retired, active, underground gas storage, on order, mixed status, announced, pre-construction, pre-permit, in-development, discovered, exploration, shelved, cancelled - inferred 4 y, shelved - inferred 2 y, abandoned, idle, idled, decommissioning
- operating_only
- Shorthand for status=operating.
- tier
- Comma-separated within-tracker tier values such as main, utility, distributed, below_threshold, closed, or sub_threshold. Observed vocabulary, measured 2026-08-10 (5 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/energy/assets/summary?group_by=tier. GEM's own coverage tier for an asset row (main sheet vs below-threshold vs closed, and the utility/distributed split on solar). The serve layer accepts it as a free comma list and does not validate it, so an unknown tier returns an empty 200 rather than a 400 — which is why it is published as a measurement rather than as an allowlist. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#energy_tier
- fuel
- Comma-separated fuel values. Matches the tracker-native fuel string or normalized cross-tracker fuel where populated. See Taxonomy & Codes — Energy. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_fuel
Accepted values: gas, oil, bioenergy, coal, solar, wind, nuclear, hydropower, geothermal
- capacity_mw_min
- Minimum MW capacity. Meaningful for power-generation trackers only.
- capacity_mw_max
- Maximum MW capacity. Meaningful for power-generation trackers only.
- start_year_min
- Minimum asset start year.
- start_year_max
- Maximum asset start year.
- retired_year_min
- Minimum asset retired year.
- retired_year_max
- Maximum asset retired year.
- entity
- Canonical owner selector — the same entity value works across endpoints. Pass a spine entity id (e_...) for an EXACT match against an asset's owners, operators, or parents, or any name for a case-insensitive fuzzy owner-name match. Preferred over the legacy owner_search param.
- owner_entity_id
- GEM Entity ID. Returns assets where the entity appears in owners, operators, or parents.
- bbox
- Viewport filter formatted as lat_min,lon_min,lat_max,lon_max.
- near
- Proximity filter formatted as lat,lon,radius_km.
- asset_class
- Asset class. The default fixed excludes mobile LNG carriers; use mobile or all for vessels. Full value list: https://docs.gdeltcloud.com/reference/enums#energy_asset_class
Accepted values: fixed, mobile, all
- summary_limit
- Number of summary buckets to return.
GETGet Energy Owner/api/v2/energy/owners/{entity_id}
Fetch one Global Energy Monitor ownership entity by GEM Entity ID, including parent IDs, external IDs, and a portfolio summary across Energy assets. Optional include_exposure=true adds plan-gated risk/exposure fields — requires can_use_exposure (see Pricing for the plans that include it).
Response: success, data
Parameters and accepted values (2)
- entity_id
- GEM ownership entity ID.
- include_exposure
- Include admin-gated exposure_summary from the internal risk/exposure preview.
GETSearch Energy Owners/api/v2/energy/owners
Search the Global Energy Monitor ownership registry for canonical owner entities. Use this endpoint to resolve a company, government owner, person, or investment vehicle to a GEM Entity ID before calling owner portfolio or exposure endpoints.
Response: success, data, pagination, applied_filters
Parameters and accepted values (10)
- q
- Search owner name, abbreviation, GEM Entity ID, or external ID.
- search
- Alias for q.
- entity_id
- Exact GEM ownership entity ID.
- country
- Country filter — matches an owner's registration or headquarters country. Accepts a country name, ISO-2, or ISO-3 via the shared resolveCountryInput layer (combinable with region/continent); an unresolvable value returns 400 INVALID_COUNTRY.
- region
- Region expanded to ISO-3 countries; matches registration or headquarters country.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Continent expanded to ISO-3 countries; matches registration or headquarters country.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- entity_type
- Comma-separated GEM owner entity types. Observed vocabulary, measured 2026-08-10 (6 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/energy/owners?limit=1 — read entity_type. The corporate-registry classification GEM assigns an ownership entity. Unvalidated at the serve layer — /api/v2/energy/owners?entity_type= is applied as a plain IN list, so an unlisted value returns an empty 200. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#gem_owner_entity_type
- publicly_listed
- Filter by public-listing status.
- limit
- Rows per page.
- cursor
- Pagination cursor from pagination.next_cursor.
GETArea activity over time/api/v2/maritime/activity
Aggregate vessel activity over an area, bucketed by hour or day — distinct vessels, total + moving positions, and average/max speed per bucket. Generalizes /transits to arbitrary geography (chokepoint, bounding box, or proximity). The "is this area's traffic anomalous vs the baseline" view. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Historical / baseline surface: reads raw AIS positions directly (not the derived rollups). Forward-accruing: positions begin at launch (June 2026) — no historical backfill. Terrestrial AIS only (no satellite). Date windows are capped at 30 days; defaults to the trailing 14 days. Bucket auto-selects hour for spans ≤2 days, otherwise day.
Response: success, bucket, data, pagination, applied_filters
Parameters and accepted values (10)
- chokepoint
- Restrict to one chokepoint. Omit to use bbox / near / near_gem_id, or for global. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
Accepted values: hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits
- bbox
- Bounding box filter: minLon,minLat,maxLon,maxLat (lon-first axis order, e.g. 56,26,57,27).
- near
- Point 'lat,lon' for a radius area; combine with radius_km (default 50 km). Format: lat,lon — pass the radius separately in radius_km.
- near_gem_id
- GEM energy-asset gem_id center — traffic within radius_km of that LNG terminal / platform (default 25 km). The cross-source 'traffic near energy infrastructure' join.
- radius_km
- Radius in km for near / near_gem_id. Default 50 (near) or 25 (near_gem_id); clamped 1–2000.
- bucket
- Time bucket. Auto-selects hour for spans ≤2 days, otherwise day. Full value list: https://docs.gdeltcloud.com/reference/enums#maritime_activity_bucket
Accepted values: hour, day
- date_start
- Window start YYYY-MM-DD (≤30-day window).
- date_end
- Window end YYYY-MM-DD.
- days
- Trailing N-day window (1–30). Defaults to 14.
- limit
- Buckets per page (1–1000).
GETVessel by IMO/api/v2/maritime/carriers/{imo}
One vessel by IMO number: identity, last-known position, and the matched Global Energy Monitor LNG carrier (when one exists). Position is LAST-KNOWN ONLY — no raw track. Returns 404 when no vessel identity exists for the IMO. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Forward-accruing: position history begins at launch (June 2026). Terrestrial AIS only (no satellite).
Response: success, imo, identity, last_position, gem_carrier
Parameters and accepted values (1)
- imo
- IMO number of the vessel (e.g. 9006681).
GETChokepoint risk watch/api/v2/maritime/chokepoint-watch
The maritime risk layer — fuses each chokepoint's AIS coverage confidence (live / sparse / dark) and 24h/7d transit activity with GDELT conflict events (last 7 days) in its bordering countries, plus nearby flagged-energy-asset exposure. Surfaces the 'blind spot': high conflict signal but no vessel coverage. Derived rollups + events only (no raw positions). Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Each row scores a risk_level (critical / elevated / watch / quiet) and rows are risk-ranked. Envelope: { success, data, summary, applied_filters }.
Response: success, data, summary, applied_filters
Parameters and accepted values (3)
- chokepoint
- Restrict to one chokepoint (one of the 11 monitored straits). Omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
Accepted values: hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits
- blind_spots_only
- true → only chokepoints that are a blind spot (dark AIS coverage AND conflict signal in the bordering countries).
- min_conflict
- Only chokepoints with at least N GDELT conflict events in the last 7 days.
GETSpatial density grid/api/v2/maritime/density
Spatial density grid (heatmap) of position and vessel counts per lat/lon cell within an area. Shows where traffic concentrates. AREA REQUIRED — pass bbox, near, or near_gem_id. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Historical / baseline surface: reads raw AIS positions directly. Forward-accruing: positions begin at launch (June 2026) — no historical backfill. Terrestrial AIS only (no satellite). Date windows are capped at 7 days; defaults to the trailing 1 day.
Response: success, cell_deg, data, pagination, applied_filters
Parameters and accepted values (9)
- bbox
- Bounding box filter: minLon,minLat,maxLon,maxLat (lon-first axis order). One of bbox / near / near_gem_id is required.
- near
- Point 'lat,lon' for a radius area; combine with radius_km (default 50 km). One of bbox / near / near_gem_id is required. Format: lat,lon — pass the radius separately in radius_km.
- near_gem_id
- GEM energy-asset gem_id center — concentration of traffic within radius_km of that asset (default 25 km). One of bbox / near / near_gem_id is required.
- radius_km
- Radius in km for near / near_gem_id. Default 50 (near) or 25 (near_gem_id); clamped 1–2000.
- cell_deg
- Grid cell size in degrees (0.01–1). Smaller = finer heatmap. Defaults to 0.05.
- date_start
- Window start YYYY-MM-DD (≤7-day window).
- date_end
- Window end YYYY-MM-DD.
- days
- Trailing N-day window (1–7). Defaults to 1.
- limit
- Grid cells per page (1–5000), densest first.
GETChokepoint dwell episodes/api/v2/maritime/dwell
Dwell episodes — completed arrival→departure stays at maritime chokepoints, derived from terrestrial AIS. Each row is one vessel's stay with its dwell duration. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Forward-accruing: episodes begin accruing at launch (June 2026) — no historical backfill. Derived-only: no raw position track. Terrestrial AIS only (no satellite). Filtered by departure time; date windows are capped at 30 days and default to the trailing 7 days.
Response: success, data, pagination, applied_filters
Parameters and accepted values (7)
- chokepoint
- Restrict to one chokepoint. Omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
Accepted values: hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits
- status
- ongoing = the vessel is still inside the chokepoint at the rollup edge (its dwell_hours is elapsed-so-far and departure is an as-of timestamp, not final); completed = the vessel has departed. Omit for both. An unknown value returns 400 INVALID_ENUM. Full value list: https://docs.gdeltcloud.com/reference/enums#maritime_dwell_status
Accepted values: ongoing, completed
- date_start
- Departure-window start YYYY-MM-DD (≤30-day window).
- date_end
- Departure-window end YYYY-MM-DD.
- days
- Trailing N-day window (1–30). Defaults to 7.
- limit
- Rows per page (1–500).
- cursor
- Pagination cursor (offset) from a prior response's next_cursor.
GETAIS-dark gaps/api/v2/maritime/gaps
AIS-dark gaps — intervals where a vessel stopped broadcasting AIS then reappeared, derived from terrestrial AIS coverage. Each row is one gap with the last-known position before it went dark. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Forward-accruing: gaps begin accruing at launch (June 2026) — no historical backfill. Terrestrial AIS only (no satellite); a gap reflects loss of terrestrial reception, not necessarily a deliberate dark event. Filtered by gap-end time; date windows are capped at 30 days and default to the trailing 7 days.
Response: success, data, pagination, applied_filters
Parameters and accepted values (7)
- chokepoint
- Restrict to gaps whose last-known chokepoint is this one. Omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
Accepted values: hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits
- min_gap_hours
- Minimum gap duration in hours. Defaults to 6.
- date_start
- Gap-end-window start YYYY-MM-DD (≤30-day window).
- date_end
- Gap-end-window end YYYY-MM-DD.
- days
- Trailing N-day window (1–30). Defaults to 7.
- limit
- Rows per page (1–500).
- cursor
- Pagination cursor (offset) from a prior response's next_cursor.
GETPort disruption pulse/api/v2/maritime/port-pulse
Port-level disruption intelligence — geo-fuses the WPI ports reference with GDELT events near each port (within event_radius_km over the last days): relevant-event volume, conflict signal, a 7d-vs-baseline anomaly ratio, recent headlines, nearby flagged-energy-asset exposure, and AIS-coverage context. Scope by country, terminal type, name, or proximity; with no scope it defaults to strategic ports (LNG/oil terminals + large harbors). Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Each row scores a pulse_level (critical / elevated / active / quiet) and rows are risk-ranked. Envelope: { success, data, summary, applied_filters }. Pulse rubric: critical = at least 5 conflict Events; elevated = 1–4 conflict Events; active = no conflict Events but at least one other relevant Event; quiet = no relevant Events. Relevant-event volume does not override a conflict-based level. relevant_events: Events within event_radius_km that are either conflict-family Events or carry one of the published maritime, infrastructure, trade, sanctions, energy, logistics, port, shipping, pipeline, customs, smuggling, or commodity relevance tags.
Response: success, data, summary, applied_filters
Parameters and accepted values (10)
- country
- Country filter on port-pulse. Accepts a country name, ISO-2, or ISO-3 (e.g. Ukraine, UA, UKR) via the shared resolveCountryInput layer; an unresolvable value returns 400 INVALID_COUNTRY.
- search
- Case-insensitive match on port name, alternate name, or UN/LOCODE.
- lng_terminal
- true → only ports with an LNG terminal.
- oil_terminal
- true → only ports with an oil terminal.
- near
- Point 'lat,lon' for a radius search; combine with radius_km (default 200). Format: lat,lon — pass the radius separately in radius_km.
- near_gem_id
- GEM energy-asset gem_id — scope to ports within radius_km of that asset (cross-source join).
- radius_km
- Radius in km for near / near_gem_id. Default 200; clamped 1–2000.
- days
- GDELT event window in days (1–30). Defaults to 14.
- event_radius_km
- How close an event must be to a port to count it (5–500 km). Defaults to 50.
- limit
- Number of ports to score (1–50). Defaults to 20.
GETPorts reference/api/v2/maritime/ports
The open-data ports reference (NGA World Port Index) — ~3,800 ports with coordinates, UN/LOCODE, harbor size/type/use, max vessel draft, channel depth, and container / oil / LNG terminal facilities. Filter by country, harbor size, terminal type, name, or proximity to a point / GEM energy asset. This is reference data (no date window). Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. When a proximity center is set (near, near_gem_id), each row carries distance_km and results sort nearest-first. Standard envelope: { success, data, pagination, applied_filters }.
Response: success, data, pagination, applied_filters
Parameters and accepted values (11)
- search
- Case-insensitive match on port name, alternate name, or UN/LOCODE.
- country
- Country filter on ports. Accepts a country name, ISO-2, or ISO-3 (e.g. Netherlands, NL, NLD) via the shared resolveCountryInput layer; an unresolvable value returns 400 INVALID_COUNTRY. Full value list: https://docs.gdeltcloud.com/reference/enums#country
- min_harbor_size
- Minimum harbor size (inclusive of larger sizes). Full value list: https://docs.gdeltcloud.com/reference/enums#min_harbor_size
Accepted values: very_small, small, medium, large
- lng_terminal
- true → only ports with an LNG terminal.
- oil_terminal
- true → only ports with an oil terminal.
- near
- Point 'lat,lon' for a radius search; combine with radius_km (default 100). Results carry distance_km, sorted nearest-first. Format: lat,lon — pass the radius separately in radius_km.
- near_gem_id
- GEM energy-asset gem_id — returns ports within radius_km of that LNG terminal / platform / port (cross-source join).
- radius_km
- Radius in km for near / near_gem_id. Default 100; clamped 1–2000.
- bbox
- Bounding box filter: minLon,minLat,maxLon,maxLat (lon-first, e.g. -6,35,5,44).
- limit
- Rows per page (1–500).
- cursor
- Pagination cursor (offset) from a prior response's next_cursor.
GETRaw position points in an area/api/v2/maritime/tracks
⚠️ RAW position points (the actual AIS track) inside an area over time — each row a single fix (time, position, speed, course, nav status). AREA REQUIRED — pass chokepoint, bbox, near, or near_gem_id. Keyset-paginated: follow the opaque next_cursor to stitch a long window into pages rather than one giant response. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Historical / baseline surface: reads raw AIS positions directly. Forward-accruing: positions begin at launch (June 2026) — no historical backfill. Terrestrial AIS only (no satellite). Date windows are capped at 7 days; defaults to the trailing 1 day.
Response: success, data, pagination, applied_filters
Parameters and accepted values (10)
- chokepoint
- One chokepoint as the area. One of chokepoint / bbox / near / near_gem_id is required. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
Accepted values: hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits
- bbox
- Bounding box filter: minLon,minLat,maxLon,maxLat (lon-first axis order). One of chokepoint / bbox / near / near_gem_id is required.
- near
- Point 'lat,lon' for a radius area; combine with radius_km (default 50 km). Rows include distance_km. One of chokepoint / bbox / near / near_gem_id is required. Format: lat,lon — pass the radius separately in radius_km.
- near_gem_id
- GEM energy-asset gem_id center — points within radius_km of that asset (default 25 km). Rows include distance_km. One of chokepoint / bbox / near / near_gem_id is required.
- radius_km
- Radius in km for near / near_gem_id. Default 50 (near) or 25 (near_gem_id); clamped 1–2000.
- date_start
- Window start YYYY-MM-DD (≤7-day window).
- date_end
- Window end YYYY-MM-DD.
- days
- Trailing N-day window (1–7). Defaults to 1.
- limit
- Position points per page (1–5000).
- cursor
- Opaque keyset cursor on (time, mmsi). Pass back a prior response's next_cursor to fetch the next page; do not request one giant response.
GETChokepoint transit activity/api/v2/maritime/transits
Hourly vessel-flow rollup for maritime chokepoints, derived from terrestrial AIS. Each row is one chokepoint·hour with vessel counts and average speed. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Forward-accruing: signals begin at launch (June 2026) — there is no historical backfill. Derived-only: no raw position track is exposed. Terrestrial AIS only (no satellite). Date windows are capped at 30 days; defaults to the trailing 7 days when no dates are given.
Response: success, data, pagination, applied_filters
Parameters and accepted values (6)
- chokepoint
- Restrict to one chokepoint (one of the 11 monitored straits). Omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
Accepted values: hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits
- date_start
- Window start YYYY-MM-DD (≤30-day window).
- date_end
- Window end YYYY-MM-DD.
- days
- Trailing N-day window (1–30). Defaults to 7.
- limit
- Rows per page (1–500).
- cursor
- Pagination cursor (offset) from a prior response's next_cursor.
GETOne vessel's track over time/api/v2/maritime/vessels/{imo}/track
⚠️ RAW position track for a single vessel by IMO — the literal 'this ship over time': every AIS fix (time, position, speed, course, heading, nav status) across the window, time-ordered. Keyset-paginated: follow the opaque next_cursor to stitch a long window into pages rather than one giant response. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Historical / baseline surface: reads raw AIS positions directly. Forward-accruing: positions begin at launch (June 2026) — no historical backfill. Terrestrial AIS only (no satellite). Date windows are capped at 30 days; defaults to the trailing 7 days.
Response: success, imo, data, pagination, applied_filters
Parameters and accepted values (6)
- imo
- IMO number of the vessel (e.g. 9006681).
- date_start
- Window start YYYY-MM-DD (≤30-day window).
- date_end
- Window end YYYY-MM-DD.
- days
- Trailing N-day window (1–30). Defaults to 7.
- limit
- Position points per page (1–5000).
- cursor
- Opaque keyset cursor on (time, mmsi). Pass back a prior response's next_cursor to fetch the next page; do not request one giant response.
GETCurrent vessels (last-known)/api/v2/maritime/vessels
Current vessels with their last-known position and identity, derived from terrestrial AIS. Positions are LAST-KNOWN ONLY — there is no raw position-track endpoint. This is current state, so it takes no date window. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it. Forward-accruing: vessel state begins at launch (June 2026). Terrestrial AIS only (no satellite).
Response: success, data, pagination, applied_filters
Parameters and accepted values (8)
- chokepoint
- Restrict to vessels whose last-known position is in this chokepoint. Omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
Accepted values: hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits
- search
- Search vessels by name (case-insensitive substring, ngram-indexed), IMO, MMSI, or call sign.
- bbox
- Bounding box filter: minLon,minLat,maxLon,maxLat (e.g. 103,1,105,2).
- near
- Point 'lat,lon' for a radius search; combine with radius_km. Results include distance_km, sorted nearest-first. Format: lat,lon — pass the radius separately in radius_km.
- near_gem_id
- GEM energy-asset gem_id (resolved via gem.assets_view) — returns vessels within radius_km of that LNG terminal / platform / port. The cross-source 'vessels near energy infrastructure' join.
- radius_km
- Radius in km for near / near_gem_id. Default 50 (near) or 25 (near_gem_id); clamped 1–2000.
- limit
- Rows per page (1–500).
- cursor
- Pagination cursor (offset) from a prior response's next_cursor.
Economics & country risk
Add dated economic observations, geography and country intelligence.
FRED / ALFRED · World Bank · country indicatorsGETRead country activity/api/v2/countries
Country publication aggregates and hourly evidence from the shared activity journal. Additions, updates and linked entities are separate metrics. Facility additions count published registry records (units), not newly built or deduplicated physical sites; country context inventories expose site and unit totals separately. All matching countries are included; this map is independent of evidence pagination. Source collection gaps remain explicit: unknown or withheld source counts are null in both country and hourly rows. meta.coverage.window_complete distinguishes an initialized journal from history covering the selected window; hourly_window_complete covers the entire timeline day. Actor-direction edges use Event occurrence dates, separately from publication activity. meta.edges_coverage exposes availability, status and oldest serving snapshot as_of; unavailable snapshots do not imply zero relationships.
Response: CountryActivityCard · MCP tool: get_countries
Parameters and accepted values (15)
- time_basis
- Clock for date/hour filters and ordering: published preserves the serving/reference publication time; recorded uses the durable journal commit time and includes late publications when they become available. Omission retains published compatibility. Choose recorded explicitly for ongoing activity Monitors; source dates remain unchanged.
Accepted values: published, recorded
- date_start
- First UTC date in the selected time_basis. Defaults to today; future dates are rejected. Neither clock is Event occurrence time.
- date_end
- Last UTC date in the selected time_basis, inclusive. Defaults to date_start and cannot be later than the current UTC day.
- hour
- Optional UTC hour, 0–23. Requires a single date and rejects hours that have not started. The current hour is allowed and describes publications so far; omit for the whole selected day.
- country
- Known country attribution. Evidence distinguishes location, actor origin, reporting and source association.
- basis
- publication retains the activity journal clock. reporting uses distinct served Events by occurrence date and location country (country_match=location), and Stories by reporting date under every authoritative country association (the Stories summary country_attribution=all mode). Country buckets may overlap for Stories; totals are computed independently. Reporting has day precision and rejects hour.
- include_event_metrics
- Include Event metric maxima with tied-country evidence, five AI-coded metric averages with scored Event counts, and per-country readings/linked identity counts. totals.entities_spotted counts distinct served identity/id-space pairs across the entire scoped Event set, never summed over countries; null when unavailable or not requested. Reporting basis only; occurrence-date and location scope. Averages weight each finite scored canonical Event equally, independently of directory pagination. Unrestricted world averages and linked-identity totals include unlocated/global Events; geographic filters use location. Goldstein remains a signed maximum only. No scored observations gives null/count 0; unavailable context remains null.
- include_context
- Include dated macro rollups for the selected geography, with same-period coverage and aggregation methods. Requires intelligence entitlement.
- directory
- Enumerate every registered country, including countries without observed activity; supports search, geography, sort and pagination.
- q
- Country directory name or ISO code search. Requires directory=true.
- region
- Registered region scope.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Registered continent scope.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- sort
- Directory order: most recently seen in reporting/publication activity (default), name alphabetically, events or stories descending with stable name ties. Requires directory=true.
- limit
- Countries per directory page (default 25 in directory mode). Requires directory=true; otherwise this parameter is rejected.
- offset
- Directory row offset (default 0 in directory mode). Requires directory=true.
GETGet country context/api/v2/countries/{iso3}
Country activity, dated economic/resource fundamentals, facilities and political-office inventories with evidence links. Unknown values remain null. Country association does not imply citizenship or headquarters. Counts of people, office-holder records, facilities and units are qualified separately.
Response: CountryContextCard · MCP tool: get_country
Parameters and accepted values (5)
- time_basis
- Clock for date/hour filters and ordering: published preserves the serving/reference publication time; recorded uses the durable journal commit time and includes late publications when they become available. Omission retains published compatibility. Choose recorded explicitly for ongoing activity Monitors; source dates remain unchanged.
Accepted values: published, recorded
- date_start
- First UTC date in the selected time_basis. Defaults to today; future dates are rejected. Neither clock is Event occurrence time.
- date_end
- Last UTC date in the selected time_basis, inclusive. Defaults to date_start and cannot be later than the current UTC day.
- hour
- Optional UTC hour, 0–23. Requires a single date and rejects hours that have not started. The current hour is allowed and describes publications so far; omit for the whole selected day.
- basis
- publication retains the activity journal clock. reporting uses distinct served Events by occurrence date and location country (country_match=location), and Stories by reporting date under every authoritative country association (the Stories summary country_attribution=all mode). Country buckets may overlap for Stories; totals are computed independently. Reporting has day precision and rejects hour.
GETAtlas GPR — geopolitical risk vs a place’s own normal/api/v2/intelligence/gpr
Vintaged Atlas GPR readings for one explicit geographic level and place. Every accepted query parameter is declared here; undeclared geographic shortcuts such as country= fail with UNKNOWN_PARAM rather than returning the World series. Country own_coverage rows may include a separate best_effort calculation below the daily count floor. The official pulse remains null; the estimate uses the same coder-matched denominator, carries no band or trend claim, and is absent for zero coverage, open UTC days, missing or pooled baselines. world_corpus gates are unchanged.
Response: success, series_id, level, geo_id, methodology_version, construction, baseline, coverage_floor, coverage_floor_basis, data, pagination · MCP tool: intelligence_gpr
Parameters and accepted values (15)
- construction
- Index construction. `world_corpus` is the count-weighted GPR reference and accepts only variant=gpr, metric=gpr, and weighting=attention.
Accepted values: own_coverage, world_corpus
- variant
- GPR lens. `lens` is the legacy alias. Defaults to `gpr` for world_corpus and `events` otherwise.
Accepted values: events, attention, fullspectrum, gpr
- component
- Variant-scoped decomposition component. `decompose` is the legacy alias.
Accepted values: all, threats, acts, verbal, material
- metric
- Returned GPR measure.
Accepted values: gpr, pulse, attention_share
- weighting
- Aggregate weighting.
Accepted values: attention, gdp
- level
- Geographic aggregation level.
Accepted values: world, continent, region, country
- geo
- Place identifier appropriate for `level`; required when level is continent, region, or country and omitted for world. `id` is the legacy alias.
- window
- Trailing display window in days, 1–30. Defaults to 7 only when no explicit dates are supplied; omit when sending date_start/date_end.
- date_start
- First observation date.
- date_end
- Last observation date.
- date
- One observation date; overrides the range.
- as_of
- Point-in-time vintage. `realtime_start` and `vintage` are aliases.
- limit
- Maximum observations returned.
- cursor
- Pagination cursor.
- offset
- Legacy numeric pagination offset.
GETAtlas Posture — country condition and annual context/api/v2/intelligence/posture
A 0–100 condition score with explicit dynamic and structural axes. Sparse Event windows retain null dynamic scores. Available annual WDI/WGI/V-Dem indicators can supply a structural-only headline, marked best_effort with its evidence note, indicator count and vintage. Headline insufficient_data means neither axis has a score. Annual indicators use fixed absolute anchors; dynamic indicators use frozen cross-country or absolute references. as_of constrains dynamic observations, not the latest annual indicators or frozen normalization; this is not a fully point-in-time structural backtest.
Response: Structured JSON response · MCP tool: intelligence_posture
Parameters and accepted values (8)
- country
- Country ISO3 shortcut. Takes precedence over geo.
- level
- Geographic level. Defaults to country.
Accepted values: world, continent, region, country
- geo
- Country ISO3, region or continent name. Required unless country is supplied or level=world.
- scope
- Optional dynamic evidence scope. Omission returns all scopes.
Accepted values: all, internal, external
- window
- Duration of the dynamic Event window.
Accepted values: 7d, 30d
- weighting
- Aggregate weighting. A country is not a rollup; response discloses any fallback.
Accepted values: attention, gdp
- date
- Window end date. Omission uses the latest computed observations.
- as_of
- Observation vintage cutoff. Structural inputs and normalization are not a historical snapshot; inspect response limitations.
GETAtlas coverage — where the index can and cannot be read/api/v2/intelligence/coverage
Per-country coded-event coverage over a trailing window, and therefore which country-level Atlas products (Pulse, Posture) each country is dense enough to serve today. Read it BEFORE treating a null Atlas reading as calm: below the floors means unknown, not quiet. All 206 countries are enumerated, so a country with no coverage is disclosed rather than omitted, and summary always describes the whole world even when the rows are filtered. The window is always trailing and always ends today — there is no historical or vintaged read here, which is why date, date_start, date_end and as_of are not parameters of this endpoint.
Response: Structured JSON response
Parameters and accepted values (4)
- window
- Trailing coverage-measurement window in days, 1–30, ending today. Both `30` and `30d` are accepted, so the same spelling works here and on `/api/v2/intelligence/posture`.
- tier
- Return only countries in this coverage tier. `depth` = dense enough for a country-level Posture reading (the curated servable set); `thin` = some coverage but below that floor; `none` = no coded events in the window at all.
Accepted values: depth, thin, none
- region
- Return only countries in this region, matched case-insensitively against the region name each row carries.
- continent
- Return only countries on this continent, matched case-insensitively against the continent name each row carries.
GETList Admin1 Values/api/v2/geo/admin1
Discover the admin1 (state / province / oblast) values available for one country, measured over a trailing window of the settled Events table and canonicalised to exactly the tokens the admin1 filter on /api/v2/events and /api/v2/stories accepts — so discover→filter round-trips without guessing spellings. Each region appears ONCE, under whichever spelling carries the most events, with that count attached; a trailing administrative suffix ("Donetsk" vs "Donetsk Oblast") is folded on both sides by the filter, so either spelling returns the same events. This endpoint is intentionally country-scoped and does not return the full admin1 catalog.
Response: Admin1DiscoveryResponse · MCP tool: list_admin1
Parameters and accepted values (5)
- country
- Country to enumerate admin1 (state/province) values for — required. Accepts a country name (`France`), ISO-2 (`FR`), or ISO-3 (`FRA`); an unresolvable or missing value returns `400 INVALID_COUNTRY`.
- days
- Trailing window in days (1–30) the region counts are measured over, ending today unless `date` moves the anchor. Both `7` and `7d` are accepted. The window actually used is echoed as `window_days` and in `applied_filters`.
- date
- Anchor date for the window. Alone it selects that single day; combined with `days` it ends the trailing span on that date.
- date_start
- First day of an explicit window. May not be combined with `days`/`window`.
- date_end
- Last day of an explicit window. May not be combined with `days`/`window`.
GETChina dev-finance projects/api/v2/china/projects
China overseas development-finance projects (AidData GCDF) — amounts, sector, status, financiers; joinable to the live event stream by country. Requires a plan with China development finance access (can_use_china) — see Pricing for the plans that include it.
Response: success, data, pagination, sort, applied_filters
Parameters and accepted values (18)
- search
- Project title search.
- country
- Recipient country. Accepts a country name (Kenya), ISO-2 (KE), or ISO-3 (KEN) via the shared resolveCountryInput layer (comma-separated list allowed; combinable with region/continent). Alias recipient_country is accepted; an unresolvable value returns 400 INVALID_COUNTRY. Full value list: https://docs.gdeltcloud.com/reference/enums#country
- sector
- Sector filter. Observed vocabulary, measured 2026-08-10 (24 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=sector. AidData's OECD-DAC sector name, stored verbatim and matched case-insensitively. Ours to serve, not ours to define — it changes when AidData republishes GCDF. The filter does not validate, so an unlisted sector returns an empty 200. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_sector
- region
- Recipient region — expanded to an ISO-3 country set and combinable with country/continent. Accepts the same plain-English region vocabulary as the events/stories region filter (e.g. Africa, East Asia, South America); an unresolvable value returns 400.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Recipient continent — expanded to an ISO-3 country set. Accepts Africa, Asia, Europe, North America, South America, or Oceania.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- status
- Project status, matched case-insensitively (e.g. Completion, Implementation, Pipeline: Commitment, Suspended, Cancelled). An unknown value returns 0 rows rather than a 400. Observed vocabulary, measured 2026-08-10 (6 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=status. AidData's project status. Note the two Pipeline: … values contain a colon and a space — a picker that offers a slugified form will silently match nothing. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_status
- flow_class
- OECD-style flow class, matched case-insensitively (e.g. ODA-like, OOF-like, Vague (Official Finance)). Unknown values return 0 rows. Observed vocabulary, measured 2026-08-10 (3 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=flow_class. AidData's ODA-like / OOF-like concessionality class. Unvalidated at the serve layer. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_flow_class
- intent
- Funding intent, matched case-insensitively (e.g. Development, Commercial, Representational, Mixed). Unknown values return 0 rows. Observed vocabulary, measured 2026-08-10 (4 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=intent. AidData's donor-intent classification. Unvalidated at the serve layer. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_intent
- financier
- Match a funding agency or co-financier (case-insensitive substring) — the marquee "who funded it" filter. Alias: funder.
- min_amount_usd
- Constant-USD floor on the project amount; 0 is a no-op. Alias: min_amount.
- geocoded_only
- When true, restrict to projects that carry geocoordinates.
- year_min
- Minimum commitment year (1990–2035).
- year_max
- Maximum commitment year (1990–2035).
- completion_year_min
- Minimum project completion year (1990–2050), filtered on completion_year. Symmetric with year_min/year_max (which filter commitment year).
- completion_year_max
- Maximum project completion year (1990–2050), filtered on completion_year.
- sort
- amount_desc | recent. Full value list: https://docs.gdeltcloud.com/reference/enums#china_projects_sort
Accepted values: amount_desc, recent
- limit
- Rows per page.
- cursor
- Pagination cursor (opaque offset).
GETChina dev-finance rollup/api/v2/china/projects/summary
Rollup of China overseas development finance by country, sector, status, commitment year, flow class, or funding intent — counts + total committed USD. Requires a plan with China development finance access (can_use_china) — see Pricing for the plans that include it.
Response: success, group_by, data, applied_filters
Parameters and accepted values (17)
- country
- Recipient country filter. Accepts a country name, ISO-2, or ISO-3 via the shared resolveCountryInput layer (comma-separated list allowed; combinable with region/continent); an unresolvable value returns 400 INVALID_COUNTRY.
- sector
- Sector filter. Observed vocabulary, measured 2026-08-10 (24 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=sector. AidData's OECD-DAC sector name, stored verbatim and matched case-insensitively. Ours to serve, not ours to define — it changes when AidData republishes GCDF. The filter does not validate, so an unlisted sector returns an empty 200. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_sector
- search
- Project title search (alias q).
- region
- Recipient region — expanded to an ISO-3 country set and combinable with country/continent. Same plain-English region vocabulary as the events/stories region filter; an unresolvable value returns 400.
Accepted values: Africa, Asia, Middle East, Northern Africa, Western Africa, Eastern Africa, Middle Africa, Southern Africa, Europe, Eastern Europe, South Asia, Southeast Asia, East Asia, Central Asia, North America, Central America, Caribbean, South America, Oceania
- continent
- Recipient continent — Africa, Asia, Europe, North America, South America, or Oceania.
Accepted values: Africa, Asia, Europe, North America, South America, Oceania
- status
- Project status, matched case-insensitively (e.g. Completion, Implementation, Pipeline: Commitment). Unknown values return 0 rows rather than a 400. Observed vocabulary, measured 2026-08-10 (6 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=status. AidData's project status. Note the two Pipeline: … values contain a colon and a space — a picker that offers a slugified form will silently match nothing. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_status
- flow_class
- OECD-style flow class, matched case-insensitively (e.g. ODA-like, OOF-like). Observed vocabulary, measured 2026-08-10 (3 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=flow_class. AidData's ODA-like / OOF-like concessionality class. Unvalidated at the serve layer. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_flow_class
- intent
- Funding intent, matched case-insensitively (e.g. Development, Commercial, Mixed). Observed vocabulary, measured 2026-08-10 (4 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/china/projects/summary?group_by=intent. AidData's donor-intent classification. Unvalidated at the serve layer. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#china_intent
- financier
- Match a funding agency or co-financier (case-insensitive substring). Alias: funder.
- min_amount_usd
- Constant-USD floor on the project amount; 0 is a no-op. Alias: min_amount.
- geocoded_only
- When true, restrict to projects that carry geocoordinates.
- year_min
- Minimum commitment year (1990–2035).
- year_max
- Maximum commitment year (1990–2035).
- completion_year_min
- Minimum project completion year (1990–2050).
- completion_year_max
- Maximum project completion year (1990–2050).
- group_by
- Bucket dimension. Each row is keyed by the active dimension (see the response schema). Full value list: https://docs.gdeltcloud.com/reference/enums#china_projects_group_by
Accepted values: country, sector, status, year, flow_class, intent
- summary_limit
- Max buckets returned (1–500, default 100), ordered by total committed USD then project count.
GETList FRED observations/api/v2/macro/observations
Point-in-time observations for a single series. Optional as_of selects the vintage known on/before that date (ALFRED — no look-ahead); otherwise the latest vintage is returned. When no dates are given, returns the most-recent observations across the full available history, bounded by limit — page further back via next_cursor; there is no fixed trailing window. Discover a valid series_id via GET /api/v2/macro/series. Requires a plan with Macro & economic data access (can_use_macro) — see Pricing for the plans that include it.
Response: success, series_id, data, pagination, applied_filters, meta
Parameters and accepted values (6)
- series_id
- FRED series ID (required). To discover valid IDs, call GET /api/v2/macro/series with no filters
- date_start
- Observation window start YYYY-MM-DD. Defaults to the beginning of the series; with no start date the response returns the most-recent observations by limit, with older history reachable via next_cursor.
- date_end
- Observation window end YYYY-MM-DD.
- as_of
- Vintage date YYYY-MM-DD — return values as they were known on/before this date (point-in-time, no look-ahead).
- limit
- Rows per page (1–100).
- cursor
- Pagination cursor (offset) from a prior response's next_cursor.
GETList FRED releases/api/v2/macro/releases
Rollup of the catalog by source agency and release, with series counts. Requires a plan with Macro & economic data access (can_use_macro) — see Pricing for the plans that include it.
Response: success, data, applied_filters, meta
Parameters and accepted values (4)
- search
- Case-insensitive substring match against the release name OR its (read-time-filled) source agency.
- agency
- Source agency filter, matched case-insensitively against the read-time-filled agency (so blank-agency releases are still reachable). Validated against the same allowlist as /api/v2/macro/series — an unknown value returns 400 INVALID_ENUM with details.accepted_values. See Taxonomy & Codes — Macro Finance. Full value list: https://docs.gdeltcloud.com/reference/enums#macro_agency
Accepted values: BEA, BLS, CBOE, Census, DOL, EIA, FHFA, FRB, Freddie Mac, Treasury, U. Michigan
- limit
- Rows per page (1–200). Defaults to 50.
- cursor
- Pagination cursor (opaque offset) from a prior response's pagination.next_cursor. offset is accepted as an alias.
GETGet FRED series detail/api/v2/macro/series/{series_id}
Series catalog detail plus the most recent 24 observations (latest vintage). An unknown or quarantined series_id returns 404 with a message pointing to GET /api/v2/macro/series and the catalog. Requires a plan with Macro & economic data access (can_use_macro) — see Pricing for the plans that include it.
Response: success, series, recent_observations, meta
Parameters and accepted values (1)
- series_id
- FRED series ID (e.g. UNRATE, CPIAUCSL, DGS10). To discover valid IDs, call GET /api/v2/macro/series with no filters
GETList FRED series/api/v2/macro/series
List the FRED economic time-series catalog by title/ID search, agency, frequency, and seasonal adjustment. Call with no filters to enumerate the full curated catalog (ordered by popularity) — this is the way to discover a valid series_id. Quarantined (third-party copyrighted) series are never returned. Requires a plan with Macro & economic data access (can_use_macro) — see Pricing for the plans that include it.
Response: success, data, pagination, applied_filters, meta
Parameters and accepted values (6)
- search
- Case-insensitive match against series title or series_id.
- agency
- Exact source agency (e.g. BLS, BEA, FRB, EIA). See Taxonomy & Codes — Macro Finance. Full value list: https://docs.gdeltcloud.com/reference/enums#macro_agency
Accepted values: BEA, BLS, CBOE, Census, DOL, EIA, FHFA, FRB, Freddie Mac, Treasury, U. Michigan
- frequency
- FRED frequency_short (D=Daily, W=Weekly, M=Monthly, Q=Quarterly, A=Annual). Case-insensitive; the word forms (Daily/Weekly/Monthly/Quarterly/Annual) are also accepted. Full value list: https://docs.gdeltcloud.com/reference/enums#macro_frequency
Accepted values: D, W, M, Q, A, Daily, Weekly, Monthly, Quarterly, Annual
- seasonal_adjustment
- FRED seasonal-adjustment classification. Case-insensitive; an unknown value returns 400 INVALID_ENUM. Full value list: https://docs.gdeltcloud.com/reference/enums#macro_seasonal_adjustment
Accepted values: Not Seasonally Adjusted, Seasonally Adjusted, Seasonally Adjusted Annual Rate
- limit
- Rows per page (1–100).
- cursor
- Pagination cursor (offset) from a prior response's next_cursor.
Government & public records
Inspect official lists, political offices and government relationships.
Original publishers · OpenSanctions crawler codeGETScreen a counterparty/api/v2/screening/match
Recall-first restricted-party candidate retrieval with explicit match evidence. Retrieval similarity is not an identity probability and is exposed separately from match confidence.
Response: ScreeningMatchResponse · MCP tool: screening_match
Parameters and accepted values (8)
- q
- Counterparty name. `name` is an alias.
- id
- Strong entity or list identifier.
- as_of
- Historical list-membership date.
- min_match_confidence
- Minimum returned match confidence. `threshold` is the deprecated alias.
- include_exposure
- Attach ownership-chain exposure context.
- limit
- Maximum matched entities returned.
- nationality
- Nationality / citizenship of the subject as ISO-3 codes, comma-separated (`IRN,IRQ`). Evidence only: compared against each candidate's `country_iso3` and reported per candidate as `evidence.nationality` (`match` | `mismatch` | `unknown`); it never filters retrieval and never rejects on its own, because list country fields are inconsistently populated (see the coverage warning on /api/v2/lists/entries). An unresolvable code returns `400 INVALID_COUNTRY`.
- birth_year
- Year of birth of the subject (1900 to the current year). Evidence only, compared with a ±1 tolerance because lists publish approximate and circa dates: a candidate whose recorded year contradicts it beyond that tolerance is moved to `rejected_candidates` with `decision_evidence: birth_year_mismatch`; agreement is reported as `evidence.birth_year: match` and raises confidence only together with an exact name; a candidate with no recorded year is `unknown` and remains a candidate. There is deliberately NO date-of-birth parameter: the served person field is a birth YEAR (schema 171 stores year only, never a date), so a full DOB could not be compared to anything and would only invite callers to send PII we do not hold.
GETOwnership-chain exposure/api/v2/exposure
Precomputed entity and facility exposure through sanctions, China, or state-ownership chains. Numeric stake filters apply to effective chain stake, never the direct asset-owner percentage alone.
Response: ExposureResponse · MCP tool: exposure_search
Parameters and accepted values (17)
- lens
- Exposure lens.
Accepted values: sanctions, china, state_owned
- subject
- Result unit.
Accepted values: assets, entities
- country
- Country filter.
- region
- Region expanded to countries.
- continent
- Continent expanded to countries.
- tracker
- GEM tracker filter.
- list
- Contributing restricted-party list. `source` is an alias.
Accepted values: csl_ofac_sdn, csl_ofac_ssi, csl_ofac_cmic, csl_ofac_nsmbs, csl_ofac_capta, csl_bis_entity, csl_bis_meu, csl_bis_uvl, csl_bis_dpl, csl_state_debarred, csl_state_isn, dod_1260h, un_consolidated, uk_uksl, state_owned, cn_state
- min_stake_pct
- Minimum effective ownership-chain stake.
- direct_only
- Restrict to direct exposure.
- entity
- Resolved entity identifier. `entity_id` is an alias.
- entity_search
- Fuzzy entity resolver query. `q` and `counterparty` are aliases.
- gem_id
- GEM asset identifier.
- group_by
- Aggregation dimension.
Accepted values: none, country, tracker
- sort
- Result ordering.
Accepted values: capacity_desc, stake_desc
- limit
- Maximum rows returned.
- cursor
- Pagination cursor.
- offset
- Legacy numeric offset.
GETList catalog/api/v2/lists
Catalog of the restricted-party list sources we ingest — issuer, jurisdiction, category, publisher provenance, refresh cadence, whether the source publishes natural persons, and the current entry count. The index for /api/v2/lists/entries and /api/v2/screening/match: every source_key here with ingested: true is a legal list= value there, and only those are. Catalogue fields that the crawler lane measures (category, publisher, publisher_country, official, licence, last_crawled, coverage_start) are null on a source that has not published them — never a fabricated default. includes_individuals is MEASURED (the source has projected at least one person row), so a person-screening caller can branch on it.
Response: ListsCatalogResponse
Parameters and accepted values (4)
- source
- Restrict the catalogue to one `source_key`. Case-insensitive. The accepted set grows as sources are ingested: the values published here are the snapshot at build time, and `/api/v2/lists` (rows with `ingested: true`) is the live list.
Accepted values: csl_ofac_sdn, csl_ofac_ssi, csl_ofac_cmic, csl_ofac_nsmbs, csl_ofac_capta, csl_bis_entity, csl_bis_meu, csl_bis_uvl, csl_bis_dpl, csl_state_debarred, csl_state_isn, dod_1260h, un_consolidated, uk_uksl
- category
- Return only sources of this kind. `sanctions` and `export_control` are the two categories that count toward the `sanctions` exposure lens; `debarment`, `wanted`, `maritime` and `domestic_terror` are catalogued and screenable but are not sanctions.
Accepted values: sanctions, domestic_terror, debarment, export_control, screening_list, military_affiliation, wanted, maritime
- jurisdiction
- Issuer jurisdiction code (`US`, `EU`, `UN`, `GB`, `CN`, `AU`, …), matched case-insensitively.
- cadence
- Our refresh cadence for the source. Observed vocabulary — matched exactly, case-sensitively.
Accepted values: daily, episodic
GETSearch list entries/api/v2/lists/entries
Search the entries on the restricted-party lists — by name or alias, country, programme, or resolved entity — current or point-in-time. Each entry carries its aliases, entity_kind (entity | vessel | aircraft | individual), programmes, legal basis, cross-source ids and our first/last observation dates. A natural-person row (entity_kind: individual) carries birth_year and topics and NEVER addresses — the served-person contract withholds them. A country filter is honoured best-effort where a source does not populate the structured country field, and the response says so in coverage_warning: treat a miss as "no match on file", not "not sanctioned".
Response: ListEntriesResponse
Parameters and accepted values (14)
- list
- The list to search, by `source_key`. `source` is an alias. Case-insensitive. The accepted set grows as sources are ingested: the values published here are the snapshot at build time, and `/api/v2/lists` (rows with `ingested: true`) is the live list.
Accepted values: csl_ofac_sdn, csl_ofac_ssi, csl_ofac_cmic, csl_ofac_nsmbs, csl_ofac_capta, csl_bis_entity, csl_bis_meu, csl_bis_uvl, csl_bis_dpl, csl_state_debarred, csl_state_isn, dod_1260h, un_consolidated, uk_uksl
- q
- Case-insensitive substring over the entry name, its normalized form and every alias. `search` is an alias.
- country
- Country of the entry — a name, ISO-2 or ISO-3. `country_iso3` is an alias. Matched on the structured field OR the trailing ISO-2 token of an address, see `coverage_warning`.
- region
- Region expanded to its countries (`Eastern Europe`).
- continent
- Continent expanded to its countries (`Asia`).
- program
- Sanctions programme code, matched case-insensitively (`UKRAINE-EO13662`).
- entity
- Only entries resolved to this entity — an `e_` spine id or a `wiki:` news id, collapsed through the arbiter. `entity_id` is an alias. An id the registry has never heard of answers `400 UNRESOLVED_ENTITY_ID` rather than an empty list.
- active_on
- Point-in-time: entries on the list on this date, by our observation history. A date outside `coverage_window` answers `screen_status: inconclusive` with the window, never an empty list.
- added_since
- Only entries first observed on or after this date. Ignored when `active_on` or `removed_since` is set.
- removed_since
- Only entries that LEFT a list on or after this date (`active: false`).
- sort
- `name` (A–Z) or `recent` (latest observation first).
Accepted values: name, recent
- limit
- Maximum entries returned.
- cursor
- Pagination cursor from `pagination.next_cursor`.
- offset
- Legacy numeric offset; `cursor` is preferred.
GETList change feed/api/v2/lists/changes
The daily diff feed for the restricted-party lists — who was added, removed or changed on each snapshot date. Snapshot dates are OUR observation dates; the feed begins at coverage_window.start on /api/v2/screening/match. Without a window it returns the most recent changes first.
Response: ListChangesResponse
Parameters and accepted values (9)
- list
- Restrict the feed to one list. `source` is an alias. Case-insensitive. The accepted set grows as sources are ingested: the values published here are the snapshot at build time, and `/api/v2/lists` (rows with `ingested: true`) is the live list.
Accepted values: csl_ofac_sdn, csl_ofac_ssi, csl_ofac_cmic, csl_ofac_nsmbs, csl_ofac_capta, csl_bis_entity, csl_bis_meu, csl_bis_uvl, csl_bis_dpl, csl_state_debarred, csl_state_isn, dod_1260h, un_consolidated, uk_uksl
- change_type
- `added`, `removed` or `changed`.
Accepted values: added, removed, changed
- date
- One snapshot date; with `days` it ends the trailing span on that date.
- date_start
- First snapshot date of an explicit window. `start_date` is an alias.
- date_end
- Last snapshot date of an explicit window. `end_date` is an alias.
- days
- Trailing window in snapshot days, 1–30. `window` is an alias; `7` and `7d` are both accepted.
- limit
- Maximum change rows returned.
- cursor
- Pagination cursor from `pagination.next_cursor`.
- offset
- Legacy numeric offset; `cursor` is preferred.
GETList Offices/api/v2/offices
Public political offices — legislative seats, cabinet posts, heads of state and government, courts, security and financial offices and IGO posts — one row per office, dataset-independent, with holder counts. Scope and branch are derived from the source's gov.* topics so they are closed, filterable vocabularies. holders_current is NULL, never 0, when no source asserts currency for the office. Actor context for geopolitical analysis; NOT a PEP or sanctions-screening tool.
Response: OfficeCard · MCP tool: offices_search
Parameters and accepted values (11)
- limit
- Rows per page. Default 25, max 100.
- cursor
- Opaque pagination cursor taken from the previous response's `pagination.next_cursor`.
- include_facets
- Include complete country facets over the served office registry, independent of pagination and country/name filters. Holder counts are terms across offices, not distinct people. Null facets mean unavailable.
- country
- Country of the office (ISO-3, ISO-2, or a name; comma-separate for OR). IGO / supranational posts carry no country and never match a country filter — use `scope=international` for those.
- scope
- Level of government: `national`, `subnational` (state / province / municipality) or `international` (IGO and supranational posts). Derived from the source's topics; an office with no scope topic is `national`.
Accepted values: national, subnational, international
- branch
- Branch of government. `head` (head of state / government) wins over `executive` when a office carries both topics. `other` is sendable and returns the offices whose topics name no recognised branch.
Accepted values: legislative, executive, head, judicial, security, financial, igo, other
- organization
- The legislature / ministry / court the office belongs to. A spine `e_…` id matches the resolved organization exactly (the arbiter family, so a merged-away alias still matches); any other value is a case-insensitive substring match on the organization name as published.
- q
- Case-insensitive substring match over the office `name`. This is NOT semantic search — nothing is embedded, and a conceptually related term that does not appear literally will not match. Results keep the `sort` order, not a relevance ranking, so a query matching more rows than `limit` returns the first page of that order — narrow with `country`.
- has_holders
- `true` restricts to offices with at least one office-holder on record (any status); `false` to offices we know only as an office, with nobody recorded in it. This counts office_holders, not asserted currency — an office whose only holders are `status: unknown` still has holders.
- as_of
- VALID TIME — who HELD the office on this date (YYYY-MM-DD), read from the start/end dates the publisher states. This is NOT knowledge-time replay: it is not routed through the `can_use_asof` gate and does not answer "what did we know then". An office-holder with no published start date cannot be placed on a date and is EXCLUDED rather than guessed — `meta.undated_office_holders` counts how many the date could not see. A future date is accepted and reads as "still in office as far as the source has published".
- sort
- Ordering: `name` (default) · `holders_desc` · `country`.
Accepted values: name, holders_desc, country
GETGet Office/api/v2/offices/{office_id}
One office by id — the Wikidata QID (Q…) or the p_… id /api/v2/offices serves — with a capped preview of its holders ordered current → ended → unknown. holders_truncated says when to walk holders_url instead. A name is not looked up here: resolve it on the list first.
Response: OfficeCard · MCP tool: office_get
Parameters and accepted values (1)
- as_of
- VALID TIME — who HELD the office on this date (YYYY-MM-DD), read from the start/end dates the publisher states. This is NOT knowledge-time replay: it is not routed through the `can_use_asof` gate and does not answer "what did we know then". An office-holder with no published start date cannot be placed on a date and is EXCLUDED rather than guessed — `meta.undated_office_holders` counts how many the date could not see. A future date is accepted and reads as "still in office as far as the source has published".
GETList Office Holders/api/v2/offices/{office_id}/holders
The valid-time roster of one office: every (holder, term) the publishers assert, ordered current → ended → unknown and most recent start first. Two datasets asserting one term are ONE row naming both sources. Holders are terminal spine ids collapsed through the arbiter; a holder the binder did not mint is served with entity_id: null and its holder_source_ref, never dropped. Pages by an opaque keyset cursor; a token from a different sort or filter set is refused with 400 CURSOR_STALE rather than answered plausibly.
Response: OfficeHolderCard · MCP tool: office_holders
Parameters and accepted values (4)
- limit
- Rows per page. Default 50, max 200.
- cursor
- Opaque pagination cursor taken from the previous response's `pagination.next_cursor`.
- status
- Restrict to office-holders the PUBLISHER asserts as `current`, `ended` or `unknown`. `unknown` is a real bucket, not a synonym for current: the source did not say, and nothing here infers currency from a missing `end_date`. Combine with `as_of` to ask "current AND in office on that date" — the two are independent predicates.
Accepted values: current, ended, unknown
- as_of
- VALID TIME — who HELD the office on this date (YYYY-MM-DD), read from the start/end dates the publisher states. This is NOT knowledge-time replay: it is not routed through the `can_use_asof` gate and does not answer "what did we know then". An office-holder with no published start date cannot be placed on a date and is EXCLUDED rather than guessed — `meta.undated_office_holders` counts how many the date could not see. A future date is accepted and reads as "still in office as far as the source has published".
GETList Entity Offices/api/v2/entities/{entity_id}/offices
Every public office one entity has held, as the publishers assert it. {entity_id} accepts a spine e_… id, a news wiki: / llm: id, or a wikipedia_url, resolved through the same arbiter every other surface uses — a merged-away alias still finds its rows. An entity that resolves but holds no office answers data: [] with meta.checked: true; one with no spine identity to look under answers data: [] with meta.checked: false; one that does not resolve at all is 404 ENTITY_NOT_FOUND, never an empty 200.
Response: OfficeHolderCard · MCP tool: entity_offices
Parameters and accepted values (3)
- status
- Restrict to office-holders the PUBLISHER asserts as `current`, `ended` or `unknown`. `unknown` is a real bucket, not a synonym for current: the source did not say, and nothing here infers currency from a missing `end_date`. Combine with `as_of` to ask "current AND in office on that date" — the two are independent predicates.
Accepted values: current, ended, unknown
- as_of
- VALID TIME — who HELD the office on this date (YYYY-MM-DD), read from the start/end dates the publisher states. This is NOT knowledge-time replay: it is not routed through the `can_use_asof` gate and does not answer "what did we know then". An office-holder with no published start date cannot be placed on a date and is EXCLUDED rather than guessed — `meta.undated_office_holders` counts how many the date could not see. A future date is accepted and reads as "still in office as far as the source has published".
- limit
- Maximum office-holders to return. Default 100, max 200; `truncated: true` when the entity has more.
GETFederal Awards (USAspending)/api/v2/gov/awards
US federal award exposure for an entity — USAspending prime awards (contracts + grants) resolved to the entity spine. Look a subject up three ways (at least one is required): a resolved spine entity_id (entity=), a SAM.gov Unique Entity Identifier (uei=), or a fuzzy recipient name (recipient=). Returns an aggregate summary (total obligated USD, award + recipient counts) with a per-UEI recipient_rollups breakdown (top 25 by obligated USD, each with its awarding agencies and first/last action dates), plus the recent awards timeline — every row cited to its USAspending permalink. **D&B carve-out:** keyed on the SAM.gov UEI only — Dun & Bradstreet's DUNS number and corporate-family (parent) tree are never ingested or surfaced. Plan-gated: requires the can_use_gov entitlement (Markets plan and up); non-entitled plans receive 403 PLAN_REQUIRED. Reads are bounded key-prefix lookups on the current award snapshot (no all-time scan).
Response: query, summary, awards, meta, cross_source
Parameters and accepted values (4)
- entity
- A resolved spine entity id (e_… / wiki:… / cik:…). A bare name is rejected with 400 INVALID_ENTITY_ID — resolve it first via GET /api/v2/search. Returns that entity's federal awards.
- uei
- A SAM.gov Unique Entity Identifier (12-char). Case-insensitive.
- recipient
- Fuzzy (case-insensitive substring) recipient-name match — no id required.
- limit
- Award-timeline rows to return (max 500). The summary and recipient_rollups aggregate across ALL matching awards regardless of this cap.
GETForeign Agents (FARA)/api/v2/gov/fara
US foreign-influence graph — DOJ FARA registrations linking a US registrant (law/lobby/PR firm) to the foreign principal it represents, resolved to the entity spine. Filter by a resolved entity (matches EITHER side of the link), a fuzzy registrant or foreign_principal name, or a country; adversary_only restricts to adversary governments and sanctioned_only to the killer cross — US firms registered as agents for a **sanctioned** entity (the foreign principal is matched to our screening lists — OFAC SDN / BIS Entity / DoD 1260H / OFAC CMIC / UK — with the specific fp_sanction_lists + fp_sanction_programs). At least one filter is required. Plan-gated: requires can_use_gov (Markets plan and up); non-entitled plans receive 403 PLAN_REQUIRED. US Public Domain (DOJ NSD FARA eFile).
Response: query, summary, links, meta, cross_source
Parameters and accepted values (8)
- entity
- A resolved spine entity id (e_…). Matches the registrant OR the foreign principal side of the link.
- registrant
- Fuzzy (case-insensitive) US-registrant name match.
- foreign_principal
- Fuzzy foreign-principal name match.
- country
- Country/location represented, as published by FARA (upper-case). Observed vocabulary, measured 2026-08-10 (265 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/gov/fara?entity=<id> — read country on each foreign principal. The foreign principal's country AS FARA SPELLS IT — KOREA, SOUTH, MYANMAR (BURMA), GREAT BRITAIN. The country= filter resolves your input to ISO-3 and then matches every stored spelling that maps to it, so you may send an ISO code or an English name; these are the raw values you will see in a response. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#fara_country
- adversary_only
- Restrict to adversary-government links (RU/CN/IR/KP/SY/CU/VE/BY/MM).
- sanctioned_only
- Restrict to links whose foreign principal is on a sanctions/restricted list.
- active_only
- Restrict to still-active registrations (no termination date).
- limit
- Link rows to return (max 500). Summary aggregates across ALL matching links.
AI & compute
Research models, hardware, data centers and the organizations building them.
Epoch AIGETAI chip sales/api/v2/epoch/chip-sales
Epoch AI chip-sales rollup (CC-BY 4.0) — cumulative installed compute by chip designer (H100-equivalent), unit counts, and power draw (MW), at the latest reported window per manufacturer. Sorted by installed compute descending. Requires a plan with AI compute & models access (can_use_epoch_ai) — see Pricing for the plans that include it. Filter by chip_manufacturer (the endpoint's sole filter); any other query param is surfaced back in applied_filters.ignored rather than silently applied.
Response: success, data, pagination, applied_filters
Parameters and accepted values (4)
- chip_manufacturer
- Filter to one chip designer — exact, case-insensitive match. The designers with data are Nvidia, Google, Amazon, Huawei, AMD, and Cambricon; any other value returns 0 rows rather than 400. Echoed in applied_filters. Observed vocabulary, measured 2026-08-10 (6 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/epoch/chip-sales?limit=1 — read chip_manufacturer. The accelerator designer in Epoch's chip-sales series. Lower-cased exact match with no validation — an unlisted manufacturer returns an empty 200. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#epoch_chip_manufacturer
- limit
- Rows per page (1–200). Defaults to 50.
- cursor
- Canonical page token — pass the pagination.next_cursor from the previous response here to fetch the next page (uniform across all list endpoints).
- offset
- Row offset for pagination. Prefer the canonical cursor token; both are supported.
GETAI companies/api/v2/epoch/companies
Epoch AI company tracker (CC-BY 4.0) — the tracked AI labs with latest valuation, annualized revenue, total equity funding, staff count, and company type. Latest financials are derived from the dated time-series (most recent closed funding round for valuation). Sorted by valuation descending. Requires a plan with AI compute & models access (can_use_epoch_ai) — see Pricing for the plans that include it. This endpoint takes no filter params beyond pagination — any other query param (e.g. search, org) is surfaced back in applied_filters.ignored rather than silently applied.
Response: success, data, pagination, applied_filters
Parameters and accepted values (3)
- limit
- Rows per page (1–200). Defaults to 50.
- cursor
- Canonical page token — pass the pagination.next_cursor from the previous response here to fetch the next page (uniform across all list endpoints).
- offset
- Row offset for pagination. Prefer the canonical cursor token; both are supported.
GETAI data centers/api/v2/epoch/data-centers
Epoch AI data-center registry (CC-BY 4.0) — the largest AI compute clusters with power (MW), H100-equivalent compute, capital cost ($B), owner, chip types, and named users. Rows sort by compute (H100e) descending. Includes a per-country rollup (by_country) and dataset totals (totals). Requires a plan with AI compute & models access (can_use_epoch_ai) — see Pricing for the plans that include it. Response echoes applied_filters.
Response: success, data, by_country, totals, pagination, applied_filters
Parameters and accepted values (5)
- country
- Data-center country filter. Accepts a country name (United States), ISO-2 (US), or ISO-3 (USA) via the shared resolveCountryInput layer, matched exactly on the canonical country name; an unresolvable value returns 400 INVALID_COUNTRY. Full value list: https://docs.gdeltcloud.com/reference/enums#country
- owner
- Case-insensitive substring match on operating owner (e.g. Microsoft, Meta, xAI, Amazon). Alias: org.
- limit
- Rows per page (1–200). Defaults to 25.
- cursor
- Canonical page token — pass the pagination.next_cursor from the previous response here to fetch the next page (uniform across all list endpoints).
- offset
- Row offset for pagination. Prefer the canonical cursor token; both are supported.
GETML hardware catalog/api/v2/epoch/hardware
Epoch AI ML-hardware catalog (CC-BY 4.0) — accelerators (GPU / TPU / NPU / ASIC …) with manufacturer, release date, TDP, memory, process size, and FP16/FP8 throughput. Rows sort by release date descending. Requires a plan with AI compute & models access (can_use_epoch_ai) — see Pricing for the plans that include it. Response echoes applied_filters.
Response: success, data, pagination, applied_filters
Parameters and accepted values (8)
- type
- Case-insensitive exact match on the accelerator class as recorded by Epoch; the enum lists every stored type. Some tokens are composite, e.g. DCU (GPGPU). An unknown value returns 400 INVALID_ENUM. Full value list: https://docs.gdeltcloud.com/reference/enums#epoch_hardware_type
Accepted values: GPU, TPU, XPU-R, NPU, GPGPU, ASIC, XPU, LPU, Hybrid CPU, DCU (GPGPU), Other
- manufacturer
- Case-insensitive substring match on manufacturer (e.g. Nvidia, AMD, Google, Huawei, Cambricon). Alias org is accepted.
- foundry
- Case-insensitive substring match on the fabricator. Observed values: TSMC, SMIC, Samsung, Intel (plus dual-fab SMIC,TSMC parts, which either SMIC or TSMC returns). Echoed in applied_filters. Not strictly validated — an unmatched value returns 0 rows rather than 400. Observed vocabulary, measured 2026-08-10 (5 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/epoch/hardware?limit=1 — read foundry. The fab that manufactured the accelerator, as Epoch publishes it. Matched as a case-insensitive SUBSTRING with no validation, so a typo returns an empty 200 rather than a 400. Note some rows carry a comma-joined pair (SMIC,TSMC). Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#epoch_foundry
- date_start
- Filter to hardware with release_date on or after this date (YYYY-MM-DD). A malformed date is ignored rather than erroring.
- date_end
- Filter to hardware with release_date on or before this date (YYYY-MM-DD). Combine with date_start for a release-date window.
- limit
- Rows per page (1–200). Defaults to 25.
- cursor
- Canonical page token — pass the pagination.next_cursor from the previous response here to fetch the next page (uniform across all list endpoints).
- offset
- Row offset for pagination. Prefer the canonical cursor token; both are supported.
GETAI models catalog/api/v2/epoch/models
Epoch AI notable-models catalog (CC-BY 4.0). Each model carries its developer, domain, parameters, training compute (FLOP), training hardware, frontier flag, and accessibility. Rows can be sorted by publication date or training compute. Requires a plan with AI compute & models access (can_use_epoch_ai) — see Pricing for the plans that include it. Boolean fields (frontier_model, open_weights) are real JSON booleans, training_compute_flop is de-artifacted, and the response echoes applied_filters (unknown params surface in applied_filters.ignored). This product uses data from Epoch AI (CC-BY 4.0).
Response: success, data, pagination, applied_filters
Parameters and accepted values (12)
- organization
- Case-insensitive substring match on the developing organization (e.g. OpenAI, Google, Anthropic, xAI, Meta AI). Alias org is accepted.
- domain
- Case-insensitive substring match on task domain. The enum lists the atomic domain vocabulary (models can span several, e.g. Vision,Multimodal — so Vision also catches those rows); any substring is accepted. Full value list: https://docs.gdeltcloud.com/reference/enums#epoch_model_domain
Accepted values: Language, Vision, Biology, Multimodal, Image generation, Video, Speech, Robotics, Games, Audio, Medicine, Mathematics, Materials science, Earth science, Recommendation, Driving, Search, 3D modeling, Other
- model_accessibility
- Release/access tier — exact, case-insensitive match on the stored value. Use the open-weights tiers to filter to models with released weights. Full value list: https://docs.gdeltcloud.com/reference/enums#epoch_model_accessibility
Accepted values: Open weights (unrestricted), Open weights (restricted use), Open weights (non-commercial), API access, Hosted access (no API), Unreleased
- organization_categorization
- Case-insensitive substring match on the developing organization's category. Accepted tokens: Industry, Academia, Government, Research collective. A model may carry several comma-composited categories, so a token matches any model with that contributor type (e.g. Academia = any model with an academic contributor, not academia-exclusive). Not strictly validated — an unmatched value returns 0 rows rather than 400. Observed vocabulary, measured 2026-08-10 (126 distinct values). Values outside it are accepted, not rejected. Discover current values: GET /api/v2/epoch/models?limit=1 — read organization_categorization. Epoch's classification of the publishing organization. The stored field is COMPOSITE — a paper with several organizations carries their categories comma-joined, which is why 126 distinct strings appear (measured 2026-08-10) behind four underlying categories, including repeats such as Academia,Academia. Substring-matched and unvalidated, so filtering on a single category works and an unlisted value is an empty 200 rather than a 400. Values seen in the corpus: https://docs.gdeltcloud.com/reference/enums#epoch_organization_categorization
- frontier
- true → only models Epoch flags as frontier; false → the non-frontier rows. Accepts true/false/1/0.
- min_compute
- Floor on training_compute_flop (e.g. 1e25).
- date_start
- Filter to models with publication_date on or after this date (YYYY-MM-DD). A malformed date is ignored rather than erroring.
- date_end
- Filter to models with publication_date on or before this date (YYYY-MM-DD). Combine with date_start for a publication-date window.
- sort
- Sort by publication date (default) or training compute (FLOP), both descending.
Accepted values: publication_date, compute
- limit
- Rows per page (1–200). Defaults to 25.
- cursor
- Canonical page token — pass the pagination.next_cursor from the previous response here to fetch the next page (uniform across all list endpoints).
- offset
- Row offset for pagination. Prefer the canonical cursor token; both are supported.
Monitors & API tools
Inspect saved monitoring workflows and the API’s supported values and costs.
GDELT CloudGETValue vocabularies, machine-readable/api/v2/meta/enums
Every vocabulary the API validates against, with the value-space of each — closed (the complete authoritative set, safe to switch on), observed (a dated measurement of what the corpus currently holds, never an allowlist) and identifier (a key with a format and a resolver, never enumerated). Carries a sha256 you can pin and diff in CI to detect a vocabulary change before it reaches your code. Requires a key so use stays attributable, and is NOT metered — checking a value before spending a query unit should not cost a query unit.
Response: success, data
Parameters and accepted values (0)
GETEndpoint contracts, machine-readable/api/v2/meta/endpoints
The contract-governed endpoints and every parameter each one accepts — names, aliases, bounds, defaults, the vocabulary a value is validated against, and the params deliberately rejected with what to use instead. Served from the same descriptors the API imports at request time, so it cannot describe behaviour the server does not have. Not metered.
Response: success, data
Parameters and accepted values (1)
- endpoint
- Return one endpoint instead of all of them. Accepts either the descriptor id (`events-list`) or the path (`/api/v2/events`). An unknown value returns `404 NOT_FOUND` with the available ids in `details.available`.
GETWhat a call costs, and what your plan allows/api/v2/meta/query-units
The query-unit cost model and this key's current allowance and measured consumption. Pricing remains available when usage aggregation is delayed: usage.measurement_status is fresh, stale, or pending; unknown consumption, remaining allowance, and percentages are null rather than zero or unlimited. Usage is pooled at the organization when the key belongs to one. Monitor execution is listed separately with a zero multiplier because scheduled Monitor checks do not consume Query Units. Not metered.
Response: success, data
Parameters and accepted values (0)
GETList Monitors/api/v2/monitors
Lists the active organization's shared Monitors together with the caller's current Monitor capabilities (plan, can_create, can_activate, active_monitors, total_monitors, max_monitors, available_monitor_slots, min_monitor_frequency, legacy_can_execute, can_use_monitor_webhook). The listing is complete and takes no filter or pagination parameter. max_monitors limits enabled schedules only; paused saved Monitors do not consume a slot. Monitor execution does not consume query units.
Response: success, monitors, capabilities
Parameters and accepted values (0)
GETGet Monitor/api/v2/monitors/{id}
Returns one organization-shared Monitor: its canonical subject, criteria, schedule, delivery state and legacy compatibility marker. A malformed id is a 404, not a 500.
Response: success, monitor
Parameters and accepted values (0)
GETList triggered Monitor runs/api/v2/monitors/{id}/runs
Lists the Monitor's triggered runs, retained for seven days. result_count, retained_row_count and results.length describe three different quantities — read them as such. This is the only Monitor operation that takes query parameters, and it takes exactly two.
Response: success, monitor, runs, total, limit, offset
Parameters and accepted values (2)
- limit
- Runs per page. Default 25, max 100. A value outside the range is refused, not clamped.
- offset
- Rows to skip, for paging back through the seven-day retention window. Plain integer offset — this endpoint has no opaque cursor.
GETGet a triggered Monitor run/api/v2/monitors/{id}/runs/{runId}
Returns one triggered run with its bounded canonical matches and exact replay instructions. Follow every cursor in replay_requests and then apply exact_window_filter — the matches embedded in the run are a bounded sample, not the run's full result set.
Response: success, monitor, run
Parameters and accepted values (0)
GETPage a run's matched items/api/v2/monitors/{id}/runs/{runId}/matches
Pages the COMPLETE list of items one triggered run matched, as it was at trigger time, with the current state of each hydrated live. GET /api/v2/monitors/{id}/runs/{runId} embeds a bounded SAMPLE of cards; this operation walks the whole matched set. Each entry carries as_triggered — exactly what the email or webhook asserted, frozen and never re-derived — alongside current, the live card, and a status of unchanged, updated, superseded or gone. superseded means a Story was merged away by same-day de-duplication; follow the id to GET /api/v2/stories/{story_id}, which answers 404 STORY_MERGED with the replacement id. Read result_count, retained_match_count and matched_items_truncated together: when the run matched more items than the writer retains, result_count remains the exact total and the retained list is a prefix that says so. Runs are retained for seven days.
Response: success, data
Parameters and accepted values (2)
- limit
- Matched items per page. Default 25, max 100. A value outside the range is refused, not clamped.
- cursor
- Opaque cursor over the run's frozen matched-item list. Copy `next_cursor` from the previous response verbatim; omit it for the first page, and stop when it is null. It is not an offset — a plain integer is refused rather than answered with page one.
GETExport a run's matched items as CSV/api/v2/monitors/{id}/runs/{runId}/matches.csv
Downloads every retained matched item for a Monitor run as UTF-8 CSV. The export includes the frozen as-triggered fields, the current hydrated card, reconciliation status, and run-level counts. It takes no query parameters and may contain fewer rows than result_count when the writer reports matched_items_truncated=true.
Response: success, data
Parameters and accepted values (0)
GETFetch Brief/api/v2/briefs/{id}
Fetch one Monitoring Brief: status, the original input, the structured document (Monitoring Brief content), citations, the evidence appendix, and report URLs. A still-running Brief is reconciled first. Requires a plan with Briefs access.
Response: id, title, brief_type, status, created_at, updated_at, error_message, input, document, citations, appendix, public_url, web_url
Parameters and accepted values (1)
- id
- Brief id from create or list.
GETList Briefs/api/v2/briefs
List the caller's Monitoring Briefs with status and report URLs. Still-running Briefs are reconciled first. Requires a plan with Briefs access.
Response: briefs
Parameters and accepted values (0)
UNDERSTAND THE SOURCE
Where the data comes from.
Retrieve SEC filer identity, filing records and evidence-backed company relationships through GDELT Cloud. Connect US registrants to reporting with resolved entity identifiers.
Read the source guideFRED ↗Use FRED and ALFRED economic series through GDELT Cloud’s macro API. Inspect metadata, dated observations, source attribution and redistribution limits.
Read the source guideGlobal Energy Monitor ↗Explore Global Energy Monitor facilities through a structured API. Filter by country or proximity, inspect capacity and registry dates, and connect reporting to infrastructure carefully.
Read the source guideSanctions & public records ↗Inspect original-publisher sanctions and public-record sources through GDELT Cloud. Understand list coverage, entity connections and how MIT-licensed OpenSanctions crawler code is used.
Read the source guide