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
5
Endpoints
Endpoints
Auth Overview Events Posts News Polymarket

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
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}

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"

# 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());