Skip to main content
GET
/
api
/
v2
/
stories
cURL
curl "https://gdeltcloud.com/api/v2/stories" \
  -H "Authorization: Bearer $GDELT_CLOUD_API_KEY"
{
  "success": true,
  "data": [
    {
      "id": "story_123",
      "url": "https://gdeltcloud.com/story/example-story",
      "title": "Data center projects in Asia",
      "story_date": "2026-04-15",
      "category": "infrastructure",
      "subcategory": null,
      "geo": {
        "country": "Japan",
        "region": "Eastern Asia",
        "continent": "Asia",
        "admin1": "Tokyo",
        "location": "Tokyo",
        "latitude": 35.6762,
        "longitude": 139.6503
      },
      "metrics": {
        "significance": 0.82,
        "article_count": 12,
        "linked_event_count": 2,
        "max_linked_event_significance": 0.71
      },
      "has_events": true,
      "has_fatalities": false,
      "fatalities": 0,
      "linked_events": [
        {
          "id": "cameoplus_abc123",
          "title": "Infrastructure investment announced"
        }
      ],
      "entity_refs": [],
      "top_articles": [
        {
          "url": "https://www.example.com/data-center",
          "title": "New data center project announced",
          "domain": "example.com",
          "rank": 1
        }
      ]
    }
  ],
  "pagination": {
    "limit": 25,
    "cursor": null,
    "next_cursor": "eyJvZmZzZXQiOjI1fQ=="
  },
  "sort": "significance"
}

Documentation Index

Fetch the complete documentation index at: https://docs.gdeltcloud.com/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

GDELT Cloud API key. Send as Authorization: Bearer gdelt_sk_....

Query Parameters

date_start
string<date>

Inclusive start date in YYYY-MM-DD. Alias start_date is accepted for compatibility.

Example:

"2026-04-11"

date_end
string<date>

Inclusive end date in YYYY-MM-DD. Alias end_date is accepted for compatibility.

Example:

"2026-04-17"

observed_start
string<date-time>

Optional ingestion/updated-at lower bound. Useful for live dashboards that need records observed today, even when event_date or cluster_date is earlier.

observed_end
string<date-time>

Optional ingestion/updated-at exclusive upper bound.

country
string

Documented input is a plain English country name. ISO-3 and legacy FIPS aliases are accepted; output normalizes to the country name.

Example:

"Lebanon"

region
string

Plain English region such as Middle East, Western Africa, South Asia, or Europe. The backend expands this value to an ISO-3 country list; Events match location and actor-origin countries, while Stories match linked Event primary location.

Example:

"Middle East"

continent
string

Plain English continent such as Africa, Asia, Europe, North America, South America, or Oceania. The backend expands this value to an ISO-3 country list; Events match location and actor-origin countries, while Stories match linked Event primary location.

Example:

"Africa"

admin1
string

Optional state/province/admin1 location filter. Discover valid values through /api/v2/geo/admin1. Filters Event or Story location only, not actor origin.

Example:

"Beirut"

category
string

Stable product category, such as Protests, Riots, or a CAMEO+ domain such as POLITICAL or CRIME. Event endpoints accept a single value or comma-separated values.

Example:

"Protests"

event_category
string

Linked Event top-level category filter for Story endpoints. Use values such as Protests, Battles, or CAMEO+ domains like POLITICAL or CRIME. Accepts a single value or comma-separated values. This is distinct from Story cluster category.

subcategory
string

More specific Event subtype, CAMEO+ event description, or code group.

Example:

"Peaceful protest"

domain
enum<string>

CAMEO+ domain enum. Most useful with event_family=cameoplus.

Available options:
POLITICAL,
ECONOMIC,
CORPORATE,
TECHNOLOGY,
INFRASTRUCTURE,
HEALTH,
INFORMATION,
ENVIRONMENT,
CRIME

Free-text semantic search. The API embeds this text and ranks the filtered candidate set by ClickHouse cosine similarity against stored Event or Story embeddings. It is not a lexical keyword filter and has no public similarity cutoff.

Example:

"attacks on energy infrastructure"

has_events
boolean

For Stories, set true to require linked structured Events or false for Stories without linked Events.

Example:

true

has_fatalities
boolean

Set true for fatality monitoring. v2 intentionally exposes only this boolean fatality filter.

Example:

true

confidence_profile
enum<string>
default:precise

Quality profile for Event and Story list/summary endpoints. Default precise favors analyst-ready, non-duplicative results. strictest is highest precision; balanced is broader; loose is exhaustive/raw and disables the default quality filters. Detail endpoints remain exhaustive by ID.

Available options:
strictest,
precise,
balanced,
loose
Example:

"precise"

article_count_min
integer

Minimum Story article count.

Required range: x >= 0
Example:

2

article_count_max
integer

Maximum Story article count.

Required range: x >= 0
Example:

25

sort
enum<string>
default:significance

significance is the default analyst ranking. Use recent when freshness matters more than importance.

Available options:
significance,
recent
Example:

"significance"

limit
integer
default:25

Number of records to return.

Required range: 1 <= x <= 100
Example:

25

cursor
string

Pagination cursor from pagination.next_cursor.

Response

200 - application/json

Story cards

success
enum<boolean>
Available options:
true
pagination
object
data
object[]
sort
enum<string>
default:significance
Available options:
significance,
recent