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 - name: framework in: query description: Optional analytical framework instructions to append to system prompt. Max 2000 chars enforced at handler level. 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' /api/intelligence/v1/get-social-velocity: get: tags: - IntelligenceService summary: GetSocialVelocity description: GetSocialVelocity returns trending Reddit posts from r/worldnews and r/geopolitics ranked by velocity. operationId: GetSocialVelocity responses: "200": description: Successful response content: application/json: schema: $ref: '#/components/schemas/GetSocialVelocityResponse' "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. framework: type: string description: Optional analytical framework instructions to append to system prompt. Max 2000 chars enforced at handler level. 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 framework: type: string description: Optional analytical framework instructions. 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 GetSocialVelocityRequest: type: object GetSocialVelocityResponse: type: object properties: posts: type: array items: $ref: '#/components/schemas/SocialVelocityPost' fetchedAt: type: integer format: int64 description: 'Warning: Values > 2^53 may lose precision in JavaScript' SocialVelocityPost: type: object properties: id: type: string description: Reddit post ID. title: type: string description: Post title. subreddit: type: string description: Subreddit name (without r/ prefix). url: type: string description: Direct URL to the post. score: type: integer format: int32 description: Reddit score (upvotes - downvotes). upvoteRatio: type: number format: double description: Upvote ratio (0.0–1.0). numComments: type: integer format: int32 description: Number of comments. velocityScore: type: number format: double description: Composite velocity score accounting for recency, score, and ratio. createdAt: type: integer format: int64 description: 'Unix epoch milliseconds when posted.. Warning: Values > 2^53 may lose precision in JavaScript' description: SocialVelocityPost represents a trending Reddit post with velocity scoring.