API Reference
Schemas
Shared response objects used across content, entities, clusters, monitors, and webhooks.
These TypeScript shapes cover the fields most integrations use. Source metadata varies, so many fields are optional.
Content Item
type ContentItem = {
id: string;
content_id: string;
media_type: "news" | "wire" | "podcast";
source_record_type?: string;
source_record_id?: string;
published_date?: string;
completion_date?: string;
title?: string;
canonical_url?: string;
source?: {
name?: string;
domain?: string;
};
logline?: string;
informative_abstract?: string;
key_points?: string[];
iptc_topics?: {
level_0?: string[];
level_1?: string[];
};
linked_entities?: Array<{
entity_id: string;
name?: string;
type?: string;
}>;
// News and wire items
article_id?: string;
article_url?: string;
language?: string;
author?: string;
image?: string;
content_format?: string;
// Podcast items
episode_id?: string;
podcast_id?: string;
enrichment_tier?: string;
tier_reasons?: string[];
risk_flags?: string[];
segments?: PodcastSegment[];
};
Podcast Segment
type PodcastSegment = {
id?: string;
episode_id?: string;
sequence_ordinal?: number;
segment_type?: string;
start_ms?: number;
end_ms?: number;
duration_ms?: number;
logline?: string;
informative_abstract?: string;
key_points?: string[];
linked_entities?: unknown[];
};
Search Request
type SearchRequest = {
query: string;
start_date?: string;
end_date?: string;
media_types?: Array<"news" | "wire" | "podcast">;
include_domains?: string[];
exclude_domains?: string[];
entity_ids?: string[];
limit?: number;
};
If a search request includes either start_date or end_date, it must include both. Explicit search windows can span at most 60 days. Without dates, search defaults to the trailing 60 days.
Search Result
type ContentSearchResult = {
score: number;
content_item: ContentItem;
};
Entity
type Entity = {
id: string;
entity_id: string;
display_name: string;
entity_kind: string;
description?: string;
aliases?: string[];
tags?: string[];
status?: string;
};
Monitor Search Request
type MonitorSearchRequest = {
query: string;
media_types?: Array<"news" | "wire" | "podcast">;
include_domains?: string[];
exclude_domains?: string[];
entity_ids?: string[];
};
Monitor search requests do not include dates or limits. Omnist computes the published-date window for each run and uses an internal limit of 1000.
Monitor
type Monitor = {
id: string;
team_id: string;
name: string;
description?: string | null;
status: "active" | "disabled";
search: MonitorSearchRequest;
schedule: {
frequency: "hourly" | "daily";
timezone: string;
minute?: number;
run_time?: string;
};
next_run_at?: string | null;
last_run_at?: string | null;
last_run_id?: string | null;
disabled_at?: string | null;
disabled_by?: string | null;
created_at: string;
updated_at: string;
};
Monitor Run
type MonitorRun = {
id: string;
monitor_id: string;
status: "queued" | "running" | "succeeded" | "failed" | "skipped";
run_type: "scheduled" | "backfill_request" | "manual" | "backfill" | "legacy";
parent_run_id?: string | null;
published_date?: string | null;
task_id?: string | null;
started_at?: string | null;
completed_at?: string | null;
result_count?: number;
error_message?: string | null;
created_at: string;
};
Monitor Backfill Response
type MonitorBackfillResponse = {
task_id: string;
status: "queued" | "running" | "succeeded" | "failed" | "skipped";
queued: Array<{
published_date: string;
run_id: string;
task_id: string;
already_complete: false;
latest_indexed_content?: string | null;
}>;
skipped: Array<{
published_date: string;
already_complete?: boolean;
already_running?: boolean;
latest_indexed_content?: string | null;
reason?: string;
}>;
summary: {
requested: number;
queued: number;
already_complete: number;
already_running: number;
failed: number;
};
};
Offset Page
type OffsetPage<T> = {
[key: string]: T[] | number | boolean | null;
limit: number;
offset: number;
next_offset: number | null;
has_more: boolean;
};