Omnist API
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;
};

On this page