mirror of
https://github.com/koala73/worldmonitor.git
synced 2026-04-25 17:14:57 +02:00
* feat(intelligence): cross-source signal aggregator with composite escalation (#2143) Adds a threshold-based signal aggregator seeder that reads 15+ already-seeded Redis keys every 15 minutes, ranks cross-domain signals by severity, and detects composite escalation when >=3 signal categories co-fire in the same theater. * fix(cross-source-signals): wire panel data loading, inline styles, seeder cleanup - New src/services/cross-source-signals.ts: fetch via IntelligenceServiceClient with circuit breaker - data-loader.ts: add loadCrossSourceSignals() + startup batch entry (SITE_VARIANT !== 'happy' guard) - App.ts: add primeVisiblePanelData entry + scheduleRefresh at 15min interval - base.ts: add crossSourceSignals: 15 * 60 * 1000 to REFRESH_INTERVALS - CrossSourceSignalsPanel.ts: replace all CSS class usage with inline styles (MarketImplicationsPanel pattern) - seed-cross-source-signals.mjs: remove dead isMain var, fix afterPublish double-write, deterministic signal IDs, GDELT per-topic tone keys (military/nuclear/maritime) with 3-point declining trend + < -1.5 threshold per spec, bundled topics fallback * fix(cross-source-signals): complete bootstrap wiring, seeder fixes, cmd-k entry - cache-keys.ts: add crossSourceSignals to BOOTSTRAP_CACHE_KEYS + BOOTSTRAP_TIERS (slow) - bootstrap.js: add crossSourceSignals key + SLOW_KEYS entry - cross-source-signals.ts: add getHydratedData('crossSourceSignals') bootstrap hydration - seed script: fix isDeclinig typo, maritime theater ternary (Global->Indo-Pacific), displacement year dynamic - commands.ts: add panel:cross-source-signals to cmd-k * feat(cross-source-signals): redesign panel — severity bars, filled badges, icons, theater pills - 4px severity accent bar on all signal rows (scannable without reading badges) - Filled severity badges: CRITICAL=solid red/white, HIGH=faint red bg, MED=faint yellow bg - Type badge emoji prefix: ⚡ composite, 🔴 geo-physical, 📡 EW, ✈️ military, 📊 market, ⚠️ geopolitical - Composite card: full glow (box-shadow) instead of 3px left border only - Theater pill with inline age: "Middle East · 8m ago" - Contributor pills: individual chips instead of dot-separated string - Pulsing dot on composite escalation banner * fix(cross-source-signals): code review fixes — module-level Sets, signal cap, keyframe scoping, OREF expansion - Replace per-call Array literals in list-cross-source-signals.ts with module-level Set constants for O(1) lookups - Add index-based fallback ID in normalizeSignal to avoid undefined ids - Remove unused military:flights:stale:v1 from SOURCE_KEYS - Add MAX_SIGNALS=30 cap before writing to Redis - Expand extractOrefAlertCluster to any "do not travel" advisory (not just Israel) - Add BASE_WEIGHT inline documentation explaining scoring scale - Fix animation keyframe: move from setContent() <style> block to constructor (injected once), rename to cross-source-pulse-dot - Fix GDELT extractor to read per-topic gdelt:intel:tone:{topic} keys with correct decline logic - Fix isDeclinig typo, maritime dead ternary, and displacement year reference
1790 lines
71 KiB
YAML
1790 lines
71 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: IntelligenceService API
|
|
version: 1.0.0
|
|
paths:
|
|
/api/intelligence/v1/get-risk-scores:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: GetRiskScores
|
|
description: GetRiskScores retrieves composite risk scores and strategic assessments.
|
|
operationId: GetRiskScores
|
|
parameters:
|
|
- name: region
|
|
in: query
|
|
description: Optional region filter. Empty returns all tracked regions.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetRiskScoresResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/get-pizzint-status:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: GetPizzintStatus
|
|
description: GetPizzintStatus retrieves Pentagon Pizza Index and GDELT tension data.
|
|
operationId: GetPizzintStatus
|
|
parameters:
|
|
- name: include_gdelt
|
|
in: query
|
|
description: Whether to include GDELT tension pairs in the response.
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetPizzintStatusResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/classify-event:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ClassifyEvent
|
|
description: ClassifyEvent analyzes a news event using AI models.
|
|
operationId: ClassifyEvent
|
|
parameters:
|
|
- name: title
|
|
in: query
|
|
description: Event title or headline.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: description
|
|
in: query
|
|
description: Event description or body text.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: source
|
|
in: query
|
|
description: Event source (e.g., "reuters", "acled").
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: country
|
|
in: query
|
|
description: Country context (ISO 3166-1 alpha-2).
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ClassifyEventResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/get-country-intel-brief:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: GetCountryIntelBrief
|
|
description: GetCountryIntelBrief generates a strategic brief for a specific country.
|
|
operationId: GetCountryIntelBrief
|
|
parameters:
|
|
- name: country_code
|
|
in: query
|
|
description: ISO 3166-1 alpha-2 country code.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetCountryIntelBriefResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/search-gdelt-documents:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: SearchGdeltDocuments
|
|
description: SearchGdeltDocuments searches the GDELT GKG API for relevant documentation.
|
|
operationId: SearchGdeltDocuments
|
|
parameters:
|
|
- name: query
|
|
in: query
|
|
description: Search query string.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: max_records
|
|
in: query
|
|
description: Maximum number of articles to return (1-250).
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
- name: timespan
|
|
in: query
|
|
description: Time span filter (e.g., "15min", "1h", "24h").
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: tone_filter
|
|
in: query
|
|
description: |-
|
|
Tone filter appended to query (e.g., "tone>5" for positive, "tone<-5" for negative).
|
|
Left empty to skip tone filtering.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: sort
|
|
in: query
|
|
description: 'Sort mode: "DateDesc" (default), "ToneDesc", "ToneAsc", "HybridRel".'
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SearchGdeltDocumentsResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/deduct-situation:
|
|
post:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: DeductSituation
|
|
description: DeductSituation performs broad situational analysis using LLMs.
|
|
operationId: DeductSituation
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeductSituationRequest'
|
|
required: true
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeductSituationResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-satellites:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListSatellites
|
|
description: ListSatellites retrieves current orbital positions and metadata.
|
|
operationId: ListSatellites
|
|
parameters:
|
|
- name: country
|
|
in: query
|
|
description: Filter by country code. Empty returns all.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListSatellitesResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-gps-interference:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListGpsInterference
|
|
description: ListGpsInterference retrieves detected GPS/GNSS interference data (jamming).
|
|
operationId: ListGpsInterference
|
|
parameters:
|
|
- name: region
|
|
in: query
|
|
description: Optional region filter.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListGpsInterferenceResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-oref-alerts:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListOrefAlerts
|
|
description: ListOrefAlerts retrieves Israeli Home Front Command alerts (Red Alerts).
|
|
operationId: ListOrefAlerts
|
|
parameters:
|
|
- name: mode
|
|
in: query
|
|
description: Mode selection. MODE_UNSPECIFIED defaults to active alerts.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListOrefAlertsResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-telegram-feed:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListTelegramFeed
|
|
description: ListTelegramFeed retrieves real-time OSINT messages from monitored Telegram channels.
|
|
operationId: ListTelegramFeed
|
|
parameters:
|
|
- name: limit
|
|
in: query
|
|
description: Maximum number of messages to return (default 50).
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
- name: topic
|
|
in: query
|
|
description: Filter by topic keyword (e.g. "military", "cyber").
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: channel
|
|
in: query
|
|
description: Filter by specific channel ID or name.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListTelegramFeedResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/get-company-enrichment:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: GetCompanyEnrichment
|
|
description: GetCompanyEnrichment aggregates company data from multiple public sources (GitHub, SEC, HN).
|
|
operationId: GetCompanyEnrichment
|
|
parameters:
|
|
- name: domain
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: name
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetCompanyEnrichmentResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-company-signals:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListCompanySignals
|
|
description: ListCompanySignals discovers activity signals for a company from public sources.
|
|
operationId: ListCompanySignals
|
|
parameters:
|
|
- name: company
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
- name: domain
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListCompanySignalsResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/get-country-facts:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: GetCountryFacts
|
|
description: GetCountryFacts retrieves factual country data from RestCountries and Wikipedia.
|
|
operationId: GetCountryFacts
|
|
parameters:
|
|
- name: country_code
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetCountryFactsResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-security-advisories:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListSecurityAdvisories
|
|
description: ListSecurityAdvisories retrieves pre-seeded travel and health advisories.
|
|
operationId: ListSecurityAdvisories
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListSecurityAdvisoriesResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/get-gdelt-topic-timeline:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: GetGdeltTopicTimeline
|
|
description: GetGdeltTopicTimeline retrieves tone and volume timelines for a GDELT intel topic.
|
|
operationId: GetGdeltTopicTimeline
|
|
parameters:
|
|
- name: topic
|
|
in: query
|
|
description: Topic ID (military, cyber, nuclear, sanctions, intelligence, maritime).
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetGdeltTopicTimelineResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-cross-source-signals:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListCrossSourceSignals
|
|
description: ListCrossSourceSignals returns cross-domain signals ranked by severity with composite escalation detection.
|
|
operationId: ListCrossSourceSignals
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListCrossSourceSignalsResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
/api/intelligence/v1/list-market-implications:
|
|
get:
|
|
tags:
|
|
- IntelligenceService
|
|
summary: ListMarketImplications
|
|
description: ListMarketImplications returns AI-generated trade-implication cards from live world state.
|
|
operationId: ListMarketImplications
|
|
responses:
|
|
"200":
|
|
description: Successful response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ListMarketImplicationsResponse'
|
|
"400":
|
|
description: Validation error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ValidationError'
|
|
default:
|
|
description: Error response
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
components:
|
|
schemas:
|
|
Error:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: Error message (e.g., 'user not found', 'database connection failed')
|
|
description: Error is returned when a handler encounters an error. It contains a simple error message that the developer can customize.
|
|
FieldViolation:
|
|
type: object
|
|
properties:
|
|
field:
|
|
type: string
|
|
description: The field path that failed validation (e.g., 'user.email' for nested fields). For header validation, this will be the header name (e.g., 'X-API-Key')
|
|
description:
|
|
type: string
|
|
description: Human-readable description of the validation violation (e.g., 'must be a valid email address', 'required field missing')
|
|
required:
|
|
- field
|
|
- description
|
|
description: FieldViolation describes a single validation error for a specific field.
|
|
ValidationError:
|
|
type: object
|
|
properties:
|
|
violations:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/FieldViolation'
|
|
description: List of validation violations
|
|
required:
|
|
- violations
|
|
description: ValidationError is returned when request validation fails. It contains a list of field violations describing what went wrong.
|
|
GetRiskScoresRequest:
|
|
type: object
|
|
properties:
|
|
region:
|
|
type: string
|
|
description: Optional region filter. Empty returns all tracked regions.
|
|
description: GetRiskScoresRequest specifies parameters for retrieving risk scores.
|
|
GetRiskScoresResponse:
|
|
type: object
|
|
properties:
|
|
ciiScores:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CiiScore'
|
|
strategicRisks:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/StrategicRisk'
|
|
description: GetRiskScoresResponse contains composite risk scores and strategic assessments.
|
|
CiiScore:
|
|
type: object
|
|
properties:
|
|
region:
|
|
type: string
|
|
description: Region or country identifier.
|
|
staticBaseline:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: Static baseline score (0-100).
|
|
dynamicScore:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: Dynamic real-time score (0-100).
|
|
combinedScore:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: Combined weighted score (0-100).
|
|
trend:
|
|
type: string
|
|
enum:
|
|
- TREND_DIRECTION_UNSPECIFIED
|
|
- TREND_DIRECTION_RISING
|
|
- TREND_DIRECTION_STABLE
|
|
- TREND_DIRECTION_FALLING
|
|
description: |-
|
|
TrendDirection represents the directional movement of a metric over time.
|
|
Used in markets, GDELT tension scores, and risk assessments.
|
|
components:
|
|
$ref: '#/components/schemas/CiiComponents'
|
|
computedAt:
|
|
type: integer
|
|
format: int64
|
|
description: 'Last computation time, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
description: CiiScore represents a Composite Instability Index score for a region or country.
|
|
CiiComponents:
|
|
type: object
|
|
properties:
|
|
newsActivity:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: News activity signal contribution (0-100).
|
|
ciiContribution:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: CII index contribution (0-100).
|
|
geoConvergence:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: Geographic convergence score (0-100).
|
|
militaryActivity:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: Military activity contribution (0-100).
|
|
description: CiiComponents represents the contributing factors to a CII score.
|
|
StrategicRisk:
|
|
type: object
|
|
properties:
|
|
region:
|
|
type: string
|
|
description: Country or region identifier.
|
|
level:
|
|
type: string
|
|
enum:
|
|
- SEVERITY_LEVEL_UNSPECIFIED
|
|
- SEVERITY_LEVEL_LOW
|
|
- SEVERITY_LEVEL_MEDIUM
|
|
- SEVERITY_LEVEL_HIGH
|
|
description: |-
|
|
SeverityLevel represents a three-tier severity classification used across domains.
|
|
Maps to existing TS unions: 'low' | 'medium' | 'high'.
|
|
score:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: Risk score (0-100).
|
|
factors:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: Risk factors contributing to the assessment.
|
|
trend:
|
|
type: string
|
|
enum:
|
|
- TREND_DIRECTION_UNSPECIFIED
|
|
- TREND_DIRECTION_RISING
|
|
- TREND_DIRECTION_STABLE
|
|
- TREND_DIRECTION_FALLING
|
|
description: |-
|
|
TrendDirection represents the directional movement of a metric over time.
|
|
Used in markets, GDELT tension scores, and risk assessments.
|
|
description: StrategicRisk represents a strategic risk assessment for a country or region.
|
|
GetPizzintStatusRequest:
|
|
type: object
|
|
properties:
|
|
includeGdelt:
|
|
type: boolean
|
|
description: Whether to include GDELT tension pairs in the response.
|
|
description: GetPizzintStatusRequest specifies parameters for retrieving PizzINT and GDELT data.
|
|
GetPizzintStatusResponse:
|
|
type: object
|
|
properties:
|
|
pizzint:
|
|
$ref: '#/components/schemas/PizzintStatus'
|
|
tensionPairs:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/GdeltTensionPair'
|
|
description: GetPizzintStatusResponse contains Pentagon Pizza Index and GDELT tension data.
|
|
PizzintStatus:
|
|
type: object
|
|
properties:
|
|
defconLevel:
|
|
type: integer
|
|
maximum: 5
|
|
minimum: 1
|
|
format: int32
|
|
description: DEFCON-style level (1-5).
|
|
defconLabel:
|
|
type: string
|
|
description: Human-readable DEFCON label.
|
|
aggregateActivity:
|
|
type: number
|
|
format: double
|
|
description: Aggregate activity score.
|
|
activeSpikes:
|
|
type: integer
|
|
format: int32
|
|
description: Number of active spike locations.
|
|
locationsMonitored:
|
|
type: integer
|
|
format: int32
|
|
description: Total monitored locations.
|
|
locationsOpen:
|
|
type: integer
|
|
format: int32
|
|
description: Currently open locations.
|
|
updatedAt:
|
|
type: integer
|
|
format: int64
|
|
description: 'Last data update time, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
dataFreshness:
|
|
type: string
|
|
enum:
|
|
- DATA_FRESHNESS_UNSPECIFIED
|
|
- DATA_FRESHNESS_FRESH
|
|
- DATA_FRESHNESS_STALE
|
|
description: DataFreshness represents how current the data is.
|
|
locations:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/PizzintLocation'
|
|
description: PizzintStatus represents the Pentagon Pizza Index status (proxy for late-night DC activity).
|
|
PizzintLocation:
|
|
type: object
|
|
properties:
|
|
placeId:
|
|
type: string
|
|
description: Google Places ID.
|
|
name:
|
|
type: string
|
|
description: Location name.
|
|
address:
|
|
type: string
|
|
description: Street address.
|
|
currentPopularity:
|
|
type: integer
|
|
format: int32
|
|
description: Current popularity score (0-200+).
|
|
percentageOfUsual:
|
|
type: integer
|
|
format: int32
|
|
description: Percentage of usual activity. Zero if unavailable.
|
|
isSpike:
|
|
type: boolean
|
|
description: Whether activity constitutes a spike.
|
|
spikeMagnitude:
|
|
type: number
|
|
format: double
|
|
description: Spike magnitude above baseline. Zero if no spike.
|
|
dataSource:
|
|
type: string
|
|
description: Data source identifier.
|
|
recordedAt:
|
|
type: string
|
|
description: Recording timestamp as ISO 8601 string.
|
|
dataFreshness:
|
|
type: string
|
|
enum:
|
|
- DATA_FRESHNESS_UNSPECIFIED
|
|
- DATA_FRESHNESS_FRESH
|
|
- DATA_FRESHNESS_STALE
|
|
description: DataFreshness represents how current the data is.
|
|
isClosedNow:
|
|
type: boolean
|
|
description: Whether the location is currently closed.
|
|
lat:
|
|
type: number
|
|
format: double
|
|
description: Latitude of the location.
|
|
lng:
|
|
type: number
|
|
format: double
|
|
description: Longitude of the location.
|
|
description: PizzintLocation represents a single monitored pizza location near the Pentagon.
|
|
GdeltTensionPair:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Pair identifier.
|
|
countries:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: Country pair (ISO 3166-1 alpha-2 codes).
|
|
label:
|
|
type: string
|
|
description: Human-readable label (e.g., "US-China").
|
|
score:
|
|
type: number
|
|
maximum: 100
|
|
minimum: 0
|
|
format: double
|
|
description: Tension score (0-100).
|
|
trend:
|
|
type: string
|
|
enum:
|
|
- TREND_DIRECTION_UNSPECIFIED
|
|
- TREND_DIRECTION_RISING
|
|
- TREND_DIRECTION_STABLE
|
|
- TREND_DIRECTION_FALLING
|
|
description: |-
|
|
TrendDirection represents the directional movement of a metric over time.
|
|
Used in markets, GDELT tension scores, and risk assessments.
|
|
changePercent:
|
|
type: number
|
|
format: double
|
|
description: Percentage change from previous period.
|
|
region:
|
|
type: string
|
|
description: Geographic region.
|
|
description: GdeltTensionPair represents a bilateral tension score between two countries from GDELT.
|
|
ClassifyEventRequest:
|
|
type: object
|
|
properties:
|
|
title:
|
|
type: string
|
|
minLength: 1
|
|
description: Event title or headline.
|
|
description:
|
|
type: string
|
|
description: Event description or body text.
|
|
source:
|
|
type: string
|
|
description: Event source (e.g., "reuters", "acled").
|
|
country:
|
|
type: string
|
|
description: Country context (ISO 3166-1 alpha-2).
|
|
required:
|
|
- title
|
|
description: ClassifyEventRequest specifies an event to classify using AI.
|
|
ClassifyEventResponse:
|
|
type: object
|
|
properties:
|
|
classification:
|
|
$ref: '#/components/schemas/EventClassification'
|
|
description: ClassifyEventResponse contains the AI-generated event classification.
|
|
EventClassification:
|
|
type: object
|
|
properties:
|
|
category:
|
|
type: string
|
|
description: Event category (e.g., "military", "economic", "social").
|
|
subcategory:
|
|
type: string
|
|
description: Event subcategory.
|
|
severity:
|
|
type: string
|
|
enum:
|
|
- SEVERITY_LEVEL_UNSPECIFIED
|
|
- SEVERITY_LEVEL_LOW
|
|
- SEVERITY_LEVEL_MEDIUM
|
|
- SEVERITY_LEVEL_HIGH
|
|
description: |-
|
|
SeverityLevel represents a three-tier severity classification used across domains.
|
|
Maps to existing TS unions: 'low' | 'medium' | 'high'.
|
|
confidence:
|
|
type: number
|
|
maximum: 1
|
|
minimum: 0
|
|
format: double
|
|
description: Classification confidence (0.0 to 1.0).
|
|
analysis:
|
|
type: string
|
|
description: Brief AI-generated analysis.
|
|
entities:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: Related entities identified.
|
|
description: EventClassification represents an AI-generated classification of a real-world event.
|
|
GetCountryIntelBriefRequest:
|
|
type: object
|
|
properties:
|
|
countryCode:
|
|
type: string
|
|
pattern: ^[A-Z]{2}$
|
|
description: ISO 3166-1 alpha-2 country code.
|
|
required:
|
|
- countryCode
|
|
description: GetCountryIntelBriefRequest specifies which country to generate a brief for.
|
|
GetCountryIntelBriefResponse:
|
|
type: object
|
|
properties:
|
|
countryCode:
|
|
type: string
|
|
description: ISO 3166-1 alpha-2 country code.
|
|
countryName:
|
|
type: string
|
|
description: Country name.
|
|
brief:
|
|
type: string
|
|
description: AI-generated intelligence brief text.
|
|
model:
|
|
type: string
|
|
description: AI model used for generation.
|
|
generatedAt:
|
|
type: integer
|
|
format: int64
|
|
description: 'Brief generation time, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
description: GetCountryIntelBriefResponse contains an AI-generated intelligence brief for a country.
|
|
SearchGdeltDocumentsRequest:
|
|
type: object
|
|
properties:
|
|
query:
|
|
type: string
|
|
minLength: 1
|
|
description: Search query string.
|
|
maxRecords:
|
|
type: integer
|
|
maximum: 250
|
|
minimum: 1
|
|
format: int32
|
|
description: Maximum number of articles to return (1-250).
|
|
timespan:
|
|
type: string
|
|
description: Time span filter (e.g., "15min", "1h", "24h").
|
|
toneFilter:
|
|
type: string
|
|
description: |-
|
|
Tone filter appended to query (e.g., "tone>5" for positive, "tone<-5" for negative).
|
|
Left empty to skip tone filtering.
|
|
sort:
|
|
type: string
|
|
description: 'Sort mode: "DateDesc" (default), "ToneDesc", "ToneAsc", "HybridRel".'
|
|
required:
|
|
- query
|
|
description: SearchGdeltDocumentsRequest specifies filters for searching GDELT news articles.
|
|
SearchGdeltDocumentsResponse:
|
|
type: object
|
|
properties:
|
|
articles:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/GdeltArticle'
|
|
query:
|
|
type: string
|
|
description: Echo of the search query.
|
|
error:
|
|
type: string
|
|
description: Error message if the search failed.
|
|
description: SearchGdeltDocumentsResponse contains GDELT article search results.
|
|
GdeltArticle:
|
|
type: object
|
|
properties:
|
|
title:
|
|
type: string
|
|
description: Article headline.
|
|
url:
|
|
type: string
|
|
description: Article URL.
|
|
source:
|
|
type: string
|
|
description: Source domain name.
|
|
date:
|
|
type: string
|
|
description: Publication date string.
|
|
image:
|
|
type: string
|
|
description: Article image URL.
|
|
language:
|
|
type: string
|
|
description: Article language code.
|
|
tone:
|
|
type: number
|
|
format: double
|
|
description: GDELT tone score (negative = negative tone, positive = positive tone).
|
|
description: GdeltArticle represents a single article from the GDELT document API.
|
|
DeductSituationRequest:
|
|
type: object
|
|
properties:
|
|
query:
|
|
type: string
|
|
geoContext:
|
|
type: string
|
|
DeductSituationResponse:
|
|
type: object
|
|
properties:
|
|
analysis:
|
|
type: string
|
|
model:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
ListSatellitesRequest:
|
|
type: object
|
|
properties:
|
|
country:
|
|
type: string
|
|
description: Filter by country code. Empty returns all.
|
|
description: ListSatellitesRequest specifies filters for orbital data.
|
|
ListSatellitesResponse:
|
|
type: object
|
|
properties:
|
|
satellites:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Satellite'
|
|
description: ListSatellitesResponse contains the current orbital snapshot.
|
|
Satellite:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
minLength: 1
|
|
description: NORAD identifier (e.g., "25544").
|
|
name:
|
|
type: string
|
|
description: Name of the satellite.
|
|
country:
|
|
type: string
|
|
description: ISO country code of the operator/owner.
|
|
type:
|
|
type: string
|
|
description: Purpose category (e.g., "sar", "optical", "military").
|
|
alt:
|
|
type: number
|
|
format: double
|
|
description: Orbital altitude in kilometers.
|
|
velocity:
|
|
type: number
|
|
format: double
|
|
description: Velocity in km/s.
|
|
inclination:
|
|
type: number
|
|
format: double
|
|
description: Orbital inclination in degrees.
|
|
line1:
|
|
type: string
|
|
description: TLE line 1.
|
|
line2:
|
|
type: string
|
|
description: TLE line 2.
|
|
required:
|
|
- id
|
|
description: Satellite represents an orbital asset tracked by WorldMonitor.
|
|
ListGpsInterferenceRequest:
|
|
type: object
|
|
properties:
|
|
region:
|
|
type: string
|
|
description: Optional region filter.
|
|
description: ListGpsInterferenceRequest specifies filters for GPS interference data.
|
|
ListGpsInterferenceResponse:
|
|
type: object
|
|
properties:
|
|
hexes:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/GpsJamHex'
|
|
stats:
|
|
$ref: '#/components/schemas/GpsJamStats'
|
|
source:
|
|
type: string
|
|
description: Data source name.
|
|
fetchedAt:
|
|
type: integer
|
|
format: int64
|
|
description: 'Data fetch time, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
description: ListGpsInterferenceResponse contains GPS interference data and stats.
|
|
GpsJamHex:
|
|
type: object
|
|
properties:
|
|
h3:
|
|
type: string
|
|
minLength: 1
|
|
description: H3 index of the hexagon.
|
|
lat:
|
|
type: number
|
|
format: double
|
|
description: Centroid latitude.
|
|
lon:
|
|
type: number
|
|
format: double
|
|
description: Centroid longitude.
|
|
level:
|
|
type: string
|
|
enum:
|
|
- INTERFERENCE_LEVEL_UNSPECIFIED
|
|
- INTERFERENCE_LEVEL_LOW
|
|
- INTERFERENCE_LEVEL_MEDIUM
|
|
- INTERFERENCE_LEVEL_HIGH
|
|
description: InterferenceLevel represents the severity of detected signal interference.
|
|
npAvg:
|
|
type: number
|
|
format: double
|
|
description: Average Navigation Precision (np) - lower means more interference.
|
|
sampleCount:
|
|
type: integer
|
|
format: int32
|
|
description: Number of samples in this hex.
|
|
aircraftCount:
|
|
type: integer
|
|
format: int32
|
|
description: Number of unique aircraft that reported in this hex.
|
|
required:
|
|
- h3
|
|
description: GpsJamHex represents a geographic hexagon with detected GPS interference.
|
|
GpsJamStats:
|
|
type: object
|
|
properties:
|
|
totalHexes:
|
|
type: integer
|
|
format: int32
|
|
highCount:
|
|
type: integer
|
|
format: int32
|
|
mediumCount:
|
|
type: integer
|
|
format: int32
|
|
description: GpsJamStats contains aggregate statistics for GPS interference.
|
|
ListOrefAlertsRequest:
|
|
type: object
|
|
properties:
|
|
mode:
|
|
type: string
|
|
enum:
|
|
- MODE_UNSPECIFIED
|
|
- MODE_HISTORY
|
|
description: Request to fetch Israeli Red Alerts (OREF).
|
|
ListOrefAlertsResponse:
|
|
type: object
|
|
properties:
|
|
configured:
|
|
type: boolean
|
|
description: Whether the OREF bridge is configured.
|
|
alerts:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/OrefAlert'
|
|
history:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/OrefWave'
|
|
historyCount24h:
|
|
type: integer
|
|
format: int32
|
|
description: Number of alerts in the last 24 hours.
|
|
totalHistoryCount:
|
|
type: integer
|
|
format: int32
|
|
description: Total alerts in the historical buffer.
|
|
timestampMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds of the response generation.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
error:
|
|
type: string
|
|
description: Optional error message from the relay.
|
|
description: OREF alert wave snapshot.
|
|
OrefAlert:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
cat:
|
|
type: string
|
|
title:
|
|
type: string
|
|
data:
|
|
type: array
|
|
items:
|
|
type: string
|
|
desc:
|
|
type: string
|
|
timestampMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds for when the alert was issued.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
description: A single Red Alert event.
|
|
OrefWave:
|
|
type: object
|
|
properties:
|
|
alerts:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/OrefAlert'
|
|
timestampMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds for this wave.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
description: A wave of alerts occurring at the same time.
|
|
ListTelegramFeedRequest:
|
|
type: object
|
|
properties:
|
|
limit:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum number of messages to return (default 50).
|
|
topic:
|
|
type: string
|
|
description: Filter by topic keyword (e.g. "military", "cyber").
|
|
channel:
|
|
type: string
|
|
description: Filter by specific channel ID or name.
|
|
description: Request to fetch real-time Telegram OSINT feed.
|
|
ListTelegramFeedResponse:
|
|
type: object
|
|
properties:
|
|
enabled:
|
|
type: boolean
|
|
description: Whether the bridge is currently active.
|
|
messages:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TelegramMessage'
|
|
count:
|
|
type: integer
|
|
format: int32
|
|
description: Total count of messages in the current window.
|
|
error:
|
|
type: string
|
|
description: Detailed error message if the fetch failed.
|
|
description: OSINT feed containing validated Telegram messages.
|
|
TelegramMessage:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique message identifier.
|
|
channelId:
|
|
type: string
|
|
description: Identifier of the originating channel.
|
|
channelName:
|
|
type: string
|
|
description: Human-readable name of the channel.
|
|
text:
|
|
type: string
|
|
description: Sanitized message content.
|
|
timestampMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds for when the message was posted.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
mediaUrls:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: Direct links to associated media (images, videos).
|
|
sourceUrl:
|
|
type: string
|
|
description: Link to the original post on Telegram.
|
|
topic:
|
|
type: string
|
|
description: Auto-classified topic based on content.
|
|
description: Validated OSINT post from Telegram channels.
|
|
GetCompanyEnrichmentRequest:
|
|
type: object
|
|
properties:
|
|
domain:
|
|
type: string
|
|
name:
|
|
type: string
|
|
description: |-
|
|
Request to fetch enrichment data for a company.
|
|
Requires either domain (e.g. "github.com") or name (e.g. "GitHub").
|
|
GetCompanyEnrichmentResponse:
|
|
type: object
|
|
properties:
|
|
company:
|
|
$ref: '#/components/schemas/EnrichedCompany'
|
|
github:
|
|
$ref: '#/components/schemas/EnrichedGithub'
|
|
techStack:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TechStackItem'
|
|
secFilings:
|
|
$ref: '#/components/schemas/SecFilings'
|
|
hackerNewsMentions:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/HNMention'
|
|
enrichedAtMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds when this data was fetched.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
sources:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: List of sources successfully reached (e.g. "github", "sec_edgar").
|
|
description: Aggregated company data from multiple public sources.
|
|
EnrichedCompany:
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
domain:
|
|
type: string
|
|
description:
|
|
type: string
|
|
location:
|
|
type: string
|
|
website:
|
|
type: string
|
|
founded:
|
|
type: integer
|
|
format: int32
|
|
EnrichedGithub:
|
|
type: object
|
|
properties:
|
|
publicRepos:
|
|
type: integer
|
|
format: int32
|
|
followers:
|
|
type: integer
|
|
format: int32
|
|
avatarUrl:
|
|
type: string
|
|
TechStackItem:
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
category:
|
|
type: string
|
|
confidence:
|
|
type: number
|
|
format: float
|
|
SecFilings:
|
|
type: object
|
|
properties:
|
|
totalFilings:
|
|
type: integer
|
|
format: int32
|
|
recentFilings:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/SecFiling'
|
|
SecFiling:
|
|
type: object
|
|
properties:
|
|
form:
|
|
type: string
|
|
fileDate:
|
|
type: string
|
|
description:
|
|
type: string
|
|
HNMention:
|
|
type: object
|
|
properties:
|
|
title:
|
|
type: string
|
|
url:
|
|
type: string
|
|
points:
|
|
type: integer
|
|
format: int32
|
|
comments:
|
|
type: integer
|
|
format: int32
|
|
createdAtMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds when the post was created.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
ListCompanySignalsRequest:
|
|
type: object
|
|
properties:
|
|
company:
|
|
type: string
|
|
domain:
|
|
type: string
|
|
description: Request to discover and classify company signals (hiring, funding, tech changes).
|
|
ListCompanySignalsResponse:
|
|
type: object
|
|
properties:
|
|
company:
|
|
type: string
|
|
domain:
|
|
type: string
|
|
signals:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CompanySignal'
|
|
summary:
|
|
$ref: '#/components/schemas/SignalSummary'
|
|
discoveredAtMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds when signals were discovered.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
description: Discovered company signals with classification and engagement metrics.
|
|
CompanySignal:
|
|
type: object
|
|
properties:
|
|
type:
|
|
type: string
|
|
description: Classification type (e.g. "Hiring", "Product Launch", "Expansion").
|
|
title:
|
|
type: string
|
|
url:
|
|
type: string
|
|
source:
|
|
type: string
|
|
sourceTier:
|
|
type: integer
|
|
format: int32
|
|
description: Data quality tier (1 is authoritative, 5 is low confidence).
|
|
timestampMs:
|
|
type: integer
|
|
format: int64
|
|
description: 'Unix timestamp in milliseconds of the event occurrence.. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
strength:
|
|
type: string
|
|
description: Qualitative strength of the signal (e.g. "Strong", "Emerging").
|
|
engagement:
|
|
$ref: '#/components/schemas/SignalEngagement'
|
|
SignalEngagement:
|
|
type: object
|
|
properties:
|
|
points:
|
|
type: integer
|
|
format: int32
|
|
comments:
|
|
type: integer
|
|
format: int32
|
|
stars:
|
|
type: integer
|
|
format: int32
|
|
forks:
|
|
type: integer
|
|
format: int32
|
|
mentions:
|
|
type: integer
|
|
format: int32
|
|
SignalSummary:
|
|
type: object
|
|
properties:
|
|
totalSignals:
|
|
type: integer
|
|
format: int32
|
|
byType:
|
|
type: object
|
|
additionalProperties:
|
|
type: integer
|
|
format: int32
|
|
strongestSignal:
|
|
$ref: '#/components/schemas/CompanySignal'
|
|
signalDiversity:
|
|
type: integer
|
|
format: int32
|
|
ByTypeEntry:
|
|
type: object
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: integer
|
|
format: int32
|
|
GetCountryFactsRequest:
|
|
type: object
|
|
properties:
|
|
countryCode:
|
|
type: string
|
|
pattern: ^[A-Z]{2}$
|
|
required:
|
|
- countryCode
|
|
GetCountryFactsResponse:
|
|
type: object
|
|
properties:
|
|
headOfState:
|
|
type: string
|
|
headOfStateTitle:
|
|
type: string
|
|
wikipediaSummary:
|
|
type: string
|
|
wikipediaThumbnailUrl:
|
|
type: string
|
|
population:
|
|
type: integer
|
|
format: int64
|
|
description: 'Warning: Values > 2^53 may lose precision in JavaScript'
|
|
capital:
|
|
type: string
|
|
languages:
|
|
type: array
|
|
items:
|
|
type: string
|
|
currencies:
|
|
type: array
|
|
items:
|
|
type: string
|
|
areaSqKm:
|
|
type: number
|
|
format: double
|
|
countryName:
|
|
type: string
|
|
ListSecurityAdvisoriesRequest:
|
|
type: object
|
|
ListSecurityAdvisoriesResponse:
|
|
type: object
|
|
properties:
|
|
advisories:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/SecurityAdvisoryItem'
|
|
byCountry:
|
|
type: object
|
|
additionalProperties:
|
|
type: string
|
|
ByCountryEntry:
|
|
type: object
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
SecurityAdvisoryItem:
|
|
type: object
|
|
properties:
|
|
title:
|
|
type: string
|
|
link:
|
|
type: string
|
|
pubDate:
|
|
type: string
|
|
source:
|
|
type: string
|
|
sourceCountry:
|
|
type: string
|
|
level:
|
|
type: string
|
|
country:
|
|
type: string
|
|
GetGdeltTopicTimelineRequest:
|
|
type: object
|
|
properties:
|
|
topic:
|
|
type: string
|
|
description: Topic ID (military, cyber, nuclear, sanctions, intelligence, maritime).
|
|
description: GetGdeltTopicTimelineRequest retrieves tone and volume timelines for a GDELT intel topic.
|
|
GetGdeltTopicTimelineResponse:
|
|
type: object
|
|
properties:
|
|
topic:
|
|
type: string
|
|
description: Topic ID.
|
|
tone:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/GdeltTimelinePoint'
|
|
vol:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/GdeltTimelinePoint'
|
|
fetchedAt:
|
|
type: string
|
|
description: ISO timestamp when this data was fetched.
|
|
error:
|
|
type: string
|
|
description: Error message if fetch failed.
|
|
description: GetGdeltTopicTimelineResponse contains tone and volume timelines for a topic.
|
|
GdeltTimelinePoint:
|
|
type: object
|
|
properties:
|
|
date:
|
|
type: string
|
|
description: Date string from GDELT (e.g. "20240101T000000").
|
|
value:
|
|
type: number
|
|
format: double
|
|
description: Tone or volume value at this point.
|
|
description: GdeltTimelinePoint is a single data point in a tone or volume timeline.
|
|
ListCrossSourceSignalsRequest:
|
|
type: object
|
|
description: ListCrossSourceSignalsRequest has no required parameters (returns all signals).
|
|
ListCrossSourceSignalsResponse:
|
|
type: object
|
|
properties:
|
|
signals:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CrossSourceSignal'
|
|
evaluatedAt:
|
|
type: integer
|
|
format: int64
|
|
description: 'Timestamp when the aggregator last ran (Unix epoch milliseconds).. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
compositeCount:
|
|
type: integer
|
|
format: int32
|
|
description: Total number of composite escalation zones detected.
|
|
description: ListCrossSourceSignalsResponse contains ranked cross-domain signals.
|
|
CrossSourceSignal:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique signal identifier.
|
|
type:
|
|
type: string
|
|
enum:
|
|
- CROSS_SOURCE_SIGNAL_TYPE_UNSPECIFIED
|
|
- CROSS_SOURCE_SIGNAL_TYPE_COMPOSITE_ESCALATION
|
|
- CROSS_SOURCE_SIGNAL_TYPE_THERMAL_SPIKE
|
|
- CROSS_SOURCE_SIGNAL_TYPE_GPS_JAMMING
|
|
- CROSS_SOURCE_SIGNAL_TYPE_MILITARY_FLIGHT_SURGE
|
|
- CROSS_SOURCE_SIGNAL_TYPE_UNREST_SURGE
|
|
- CROSS_SOURCE_SIGNAL_TYPE_OREF_ALERT_CLUSTER
|
|
- CROSS_SOURCE_SIGNAL_TYPE_VIX_SPIKE
|
|
- CROSS_SOURCE_SIGNAL_TYPE_COMMODITY_SHOCK
|
|
- CROSS_SOURCE_SIGNAL_TYPE_CYBER_ESCALATION
|
|
- CROSS_SOURCE_SIGNAL_TYPE_SHIPPING_DISRUPTION
|
|
- CROSS_SOURCE_SIGNAL_TYPE_SANCTIONS_SURGE
|
|
- CROSS_SOURCE_SIGNAL_TYPE_EARTHQUAKE_SIGNIFICANT
|
|
- CROSS_SOURCE_SIGNAL_TYPE_RADIATION_ANOMALY
|
|
- CROSS_SOURCE_SIGNAL_TYPE_INFRASTRUCTURE_OUTAGE
|
|
- CROSS_SOURCE_SIGNAL_TYPE_WILDFIRE_ESCALATION
|
|
- CROSS_SOURCE_SIGNAL_TYPE_DISPLACEMENT_SURGE
|
|
- CROSS_SOURCE_SIGNAL_TYPE_FORECAST_DETERIORATION
|
|
- CROSS_SOURCE_SIGNAL_TYPE_MARKET_STRESS
|
|
- CROSS_SOURCE_SIGNAL_TYPE_WEATHER_EXTREME
|
|
- CROSS_SOURCE_SIGNAL_TYPE_MEDIA_TONE_DETERIORATION
|
|
- CROSS_SOURCE_SIGNAL_TYPE_RISK_SCORE_SPIKE
|
|
description: CrossSourceSignalType enumerates all monitored cross-domain signal categories.
|
|
theater:
|
|
type: string
|
|
description: Theater / geographic context (e.g. "Eastern Europe", "Red Sea", "Global Markets").
|
|
summary:
|
|
type: string
|
|
description: Human-readable summary of the signal.
|
|
severity:
|
|
type: string
|
|
enum:
|
|
- CROSS_SOURCE_SIGNAL_SEVERITY_UNSPECIFIED
|
|
- CROSS_SOURCE_SIGNAL_SEVERITY_LOW
|
|
- CROSS_SOURCE_SIGNAL_SEVERITY_MEDIUM
|
|
- CROSS_SOURCE_SIGNAL_SEVERITY_HIGH
|
|
- CROSS_SOURCE_SIGNAL_SEVERITY_CRITICAL
|
|
description: CrossSourceSignalSeverity indicates the urgency tier of a detected signal.
|
|
severityScore:
|
|
type: number
|
|
format: double
|
|
description: 'Raw severity score used for ranking (higher = more severe).. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
detectedAt:
|
|
type: integer
|
|
format: int64
|
|
description: 'Detection timestamp (Unix epoch milliseconds).. Warning: Values > 2^53 may lose precision in JavaScript'
|
|
contributingTypes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: 'For COMPOSITE_ESCALATION: list of contributing signal type names.'
|
|
signalCount:
|
|
type: integer
|
|
format: int32
|
|
description: 'For COMPOSITE_ESCALATION: number of co-firing signals in theater.'
|
|
description: CrossSourceSignal represents a single detected cross-domain signal event.
|
|
ListMarketImplicationsRequest:
|
|
type: object
|
|
ListMarketImplicationsResponse:
|
|
type: object
|
|
properties:
|
|
cards:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/MarketImplicationCard'
|
|
degraded:
|
|
type: boolean
|
|
emptyReason:
|
|
type: string
|
|
generatedAt:
|
|
type: string
|
|
MarketImplicationCard:
|
|
type: object
|
|
properties:
|
|
ticker:
|
|
type: string
|
|
name:
|
|
type: string
|
|
direction:
|
|
type: string
|
|
timeframe:
|
|
type: string
|
|
confidence:
|
|
type: string
|
|
title:
|
|
type: string
|
|
narrative:
|
|
type: string
|
|
riskCaveat:
|
|
type: string
|
|
driver:
|
|
type: string
|