Capduck Iran-Briefing API v2.1

Real-time geopolitical intelligence — Events / Posts / News / Markets
Last updated: 2026-03-31
715+
Sources
5min
Refresh
48h
Window
6
Endpoints
Endpoints
Auth Overview Events Posts News Polymarket Trump Truth

Authentication

Authorization: Bearer YOUR_API_KEY
Base URL https://api.capduck.com/v2 — Topic: iran

1 · Overview

GET /v2/event/{topic}

AI multi-perspective situation briefing, updated hourly. 4 perspectives + watch items.

2 · Events

GET /v2/event/{topic}/events

Structured event timeline with impact scores, categories, and source attribution.

Parameters

ParamTypeDefaultDescription
sincestring48h agoUnix timestamp (s/ms) or ISO 8601
limitint50Max 200
impactint0Min impact score (1-10)
categorystringallCONFLICT / DIPLOMACY / POLITICS / ECONOMY / PROTESTS
langstringalltranslated = only translated items

Response Fields

FieldTypeDescription
idstringUUID, dedup key
impactint1-10, ≥7 = high impact
confidenceint1-10, source confidence score
categorystringEvent classification
sentimentstringNEGATIVE / POSITIVE / NEUTRAL / MIXED
titlestringEnglish title
title_zhstring?Chinese title (impact≥7)
summarystringEnglish summary
summary_zhstring?Chinese summary
source_details[]arraySource attributions (see below)
published_atISO 8601Event timestamp

source_details[] Fields

FieldTypeDescription
display_namestringSource name
categorystringSource category
platformstringtelegram / tweet / news
langstringSource language (en / fa)
urlstringOriginal source URL
logo_urlstringSource logo
Cross-reference: To get posts/news linked to an event, use /posts?event={id} or /news?event={id}. This matches event source URLs against post/news items in the 48h window.

3 · Posts

GET /v2/event/{topic}/posts

Unified Twitter + Telegram social feed. Author classification, engagement metrics.

Parameters

ParamTypeDefaultDescription
eventstringEvent UUID — returns only posts linked to this event (ignores since)
sincestring48h agoUnix timestamp (s/ms) or ISO 8601
limitint50Max 200
categorystringallAuthor category filter
platformstringalltwitter or telegram
authorstringallFilter by entity_slug or author_handle (e.g. donald-trump, TrumpTruthOnX)
langstringalltranslated = only translated

Response Fields

FieldTypeDescription
idstringDedup key
author_namestringAuthor or channel name
author_handlestring?@handle (Twitter only)
author_avatarstringAvatar URL
source_typestringSimplified type (see dictionary below)
contentstringPost body
content_zhstring?Chinese translation
media_urlstring?Image/video attachment
source_urlstringOriginal link (Twitter/Telegram)
platformstringtwitter or telegram
retweetsint?Retweet count (Twitter only)
likesint?Like count (Twitter only)
translatedboolWhether content_zh is available
published_atISO 8601Publish time
fetched_atISO 8601When our system captured it

source_type Dictionary

source_typeDescriptionLabel (ZH)
news_agencyNews Agencies新闻机构
state_mediaIranian State/Government官方媒体
osintOSINT Accounts开源情报
gov_militaryGovernment & Military, Political Figures政军人物
journalistJournalists独立记者
think_tankThink Tanks / Policy Organizations智库
otherUnmatched / empty其他

Example Response

{
  "success": true,
  "data": [{
    "id": "683514831161",
    "author_name": "Commentary: Trump Truth Social Posts On X",
    "author_handle": "@TrumpTruthOnX",
    "author_avatar": "https://iran-monitor.okfrontier.com/img?url=...",
    "source_type": "gov_military",
    "content": "Trump to address the nation on #Iran tomorrow\n\n'Important Update' — WH\n\n#IranWar",
    "content_zh": "特朗普将于明天就#伊朗问题发表全国讲话\n\n“重要进展”——白宫\n\n#伊朗战争",
    "source_url": "https://x.com/TrumpTruthOnX/status/2039129683514831161",
    "platform": "twitter",
    "retweets": 5,
    "likes": 35,
    "translated": true,
    "published_at": "2026-03-31T23:56:16+00:00",
    "fetched_at": "2026-04-01T07:06:59.454Z"
  }],
  "meta": { "topic": "iran", "total": 285, "returned": 50, "limit": 50, "since": "2026-03-30T07:06:59Z" }
}

4 · News

GET /v2/event/{topic}/news

18 major outlets: Reuters, AP, CNN, NYT, WaPo, Fox, Bloomberg, Guardian, BBC, Al Jazeera, and more.

Parameters

ParamTypeDefaultDescription
eventstringEvent UUID — returns only news linked to this event (ignores since)
sincestring48h agoUnix timestamp (s/ms) or ISO 8601
limitint50Max 200
languagestringallen / fa
regionstringallintl / us / mideast / israel / persian
langstringalltranslated = only translated

Response Fields

FieldTypeDescription
idstringContent hash, dedup key
titlestringArticle headline
title_zhstring?Chinese headline (non-EN auto-translated)
urlstringArticle URL
author_namestringOutlet name
author_avatarstringOutlet logo
media_regionstringMedia region (see dictionary below)
languagestringen / fa
published_atISO 8601Publish time

media_region Dictionary

media_regionDescription
intlInternational (Reuters, AP, BBC, Al Jazeera)
usUS media (CNN, NYT, WaPo, Fox, Bloomberg)
mideastMiddle East media
israelIsraeli media
persianPersian-language media
asiaAsian media
russiaRussian media
chinaChinese media
otherOther

Example Response

{
  "success": true,
  "data": [{
    "id": "a7c3e1f29b04",
    "title": "U.S. deploys additional carrier strike group to Middle East amid Iran tensions",
    "title_zh": "美国在伊朗紧张局势加剧之际向中东增派航母打击群",
    "url": "https://www.reuters.com/world/middle-east/us-deploys-additional-carrier-2026-03-31/",
    "author_name": "Reuters",
    "author_avatar": "https://iran-monitor.okfrontier.com/img?url=...",
    "media_region": "intl",
    "sentiment": "NEGATIVE",
    "language": "en",
    "translated": true,
    "published_at": "2026-03-31T18:42:00+00:00",
    "fetched_at": "2026-04-01T07:06:59.454Z"
  }],
  "meta": { "topic": "iran", "total": 143, "returned": 50, "limit": 50, "since": "2026-03-30T07:06:59Z" }
}

5 · Polymarket

GET /v2/event/{topic}/polymarket

Prediction market data with current probabilities and price history series.

Response Fields

FieldTypeDescription
eventstringEvent title (EN)
event_zhstringEvent title (ZH)
urlstringPolymarket page
conditions[].labelstringCondition label
conditions[].yes_pricefloatCurrent probability (0-1)
conditions[].historyarray{t: unix, p: price}

6 · Trump Truth Social

GET /trump PUBLIC

Full Trump Truth Social feed — all posts, no topic filtering. No auth required. Response schema identical to Posts with additional tags field.

Parameters

ParamTypeDefaultDescription
limitint50Max 200
sincestringISO 8601 or Unix timestamp
cursorstringPagination cursor (value from meta.next_cursor)
offsetint0Skip N items
langstringzhzh or en
tagsstringallComma-separated tag filter (e.g. iran-war, energy)

Response Fields

FieldTypeDescription
idstringUnique post ID
author_namestringDonald J. Trump
author_handlestring@realDonaldTrump
author_avatarstringAvatar URL
source_typestringgov_military
entity_slugstringdonald-trump
contentstringPost body (English)
content_zhstring?Chinese translation
source_urlstringOriginal Truth Social URL
platformstringtruth-social
media_urlstring?Media attachment
tagsstring[]Auto-tagged topics (e.g. iran-war, trade, energy)
translatedboolWhether content_zh is available
published_atISO 8601Publish time
fetched_atISO 8601Fetch time

Example

# All Trump posts (latest 20, no auth needed)
curl "https://api.capduck.com/trump?limit=20"

# Iran-related posts only
curl "https://api.capduck.com/trump?tags=iran-war&limit=50"

# Paginate with cursor
curl "https://api.capduck.com/trump?limit=10&cursor=2026-04-06T04:57:00+00:00"

Example Response

{
  "success": true,
  "data": [{
    "id": "93607e27-683f-44d0-8390-ec74ef74c611",
    "author_name": "Donald J. Trump",
    "author_handle": "@realDonaldTrump",
    "author_avatar": "https://r2.okfrontier.com/files/8cf2a24f...jpg",
    "source_type": "gov_military",
    "entity_slug": "donald-trump",
    "content": "Tuesday will be Power Plant Day, and Bridge Day...",
    "content_zh": "周二在伊朗将是发电厂之日和桥梁之日...",
    "source_url": "https://truthsocial.com/@realDonaldTrump/statuses/...",
    "platform": "truth-social",
    "tags": ["iran-war"],
    "translated": true,
    "published_at": "2026-04-05T12:30:45+00:00",
    "fetched_at": "2026-04-05T12:30:45+00:00"
  }],
  "meta": {
    "topic": "trump",
    "total": 10,
    "returned": 10,
    "offset": 0,
    "limit": 50,
    "has_more": true,
    "next_cursor": "2026-04-04T19:22:00+00:00"
  }
}

Incremental Polling

# 1. Initial fetch
GET /v2/event/iran/events?limit=100

# 2. Record latest published_at
last = response.data[0].published_at

# 3. Next fetch — Unix timestamp or ISO 8601
GET /v2/event/iran/events?since=1743321600           # Unix seconds
GET /v2/event/iran/events?since=1743321600000        # Unix milliseconds
GET /v2/event/iran/events?since=2026-03-30T00:00:00Z # ISO 8601

# 4. Dedup by id (edge overlap)
Window: 48h rolling. Data beyond 48h is automatically purged. Use lang=translated to filter translated-only items.

Errors

StatusCodeDescription
401UNAUTHORIZEDInvalid or missing API key
403FORBIDDENKey not authorized for this topic
404NOT_FOUNDUnknown endpoint or topic
429RATE_LIMITEDRate limit exceeded
500INTERNAL_ERRORServer error
{
  "success": false,
  "error": { "code": "UNAUTHORIZED", "message": "Invalid or missing API key" }
}

SDK Examples

cURL

# Overview briefing
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.capduck.com/v2/event/iran"

# High-impact events (translated only)
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.capduck.com/v2/event/iran/events?impact=8&lang=translated"

# Political figure posts (e.g. Trump Truth Social)
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.capduck.com/v2/event/iran/posts?source_type=gov_military&limit=20"

# Filter by specific author (entity_slug or handle)
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.capduck.com/v2/event/iran/posts?author=donald-trump&since=0&limit=50"

# US media news
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.capduck.com/v2/event/iran/news?region=us&limit=50"

# Posts linked to a specific event
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.capduck.com/v2/event/iran/posts?event=77a29138-954f-4767-9246-493f7bcc34aa"

TypeScript

const BASE = 'https://api.capduck.com/v2/event/iran';
const headers = { Authorization: 'Bearer YOUR_KEY' };

interface ApiResponse<T> {
  success: boolean;
  data: T;
  meta: { topic: string; total: number; returned: number; limit: number; since?: string };
}

interface Post {
  id: string;
  author_name: string;
  author_handle?: string;
  author_avatar: string;
  source_type: 'news_agency' | 'state_media' | 'osint' | 'gov_military' | 'journalist' | 'think_tank' | 'other';
  content: string;
  content_zh?: string;
  source_url: string;
  platform: 'twitter' | 'telegram';
  retweets?: number;
  likes?: number;
  translated: boolean;
  published_at: string;
  fetched_at: string;
}

async function fetchPosts(params?: Record<string, string>): Promise<ApiResponse<Post[]>> {
  const qs = params ? '?' + new URLSearchParams(params).toString() : '';
  const res = await fetch(`${BASE}/posts${qs}`, { headers });
  return res.json();
}

// Usage
const { data: posts } = await fetchPosts({ source_type: 'gov_military', limit: '20' });
posts.forEach(p => console.log(`[${p.source_type}] ${p.author_name}: ${p.content.slice(0, 80)}`));

Python

import requests

BASE = "https://api.capduck.com/v2/event/iran"
H = {"Authorization": "Bearer YOUR_KEY"}

briefing = requests.get(BASE, headers=H).json()
events   = requests.get(f"{BASE}/events", headers=H, params={"impact": 8}).json()
posts    = requests.get(f"{BASE}/posts", headers=H, params={"source_type": "gov_military"}).json()
news     = requests.get(f"{BASE}/news", headers=H, params={"region": "us", "limit": 50}).json()

JavaScript

const BASE = 'https://api.capduck.com/v2/event/iran';
const h = { 'Authorization': 'Bearer YOUR_KEY' };

const briefing = await fetch(BASE, {headers: h}).then(r => r.json());
const events   = await fetch(`${BASE}/events?impact=8`, {headers: h}).then(r => r.json());
const posts    = await fetch(`${BASE}/posts?platform=telegram`, {headers: h}).then(r => r.json());
const news     = await fetch(`${BASE}/news?region=us&limit=50`, {headers: h}).then(r => r.json());