{
  "openapi": "3.1.0",
  "info": {
    "title": "Synorb API",
    "version": "1.2.0",
    "description": "Machine-readable intelligence for AI agents. 1,000+ streams of structured claims from 10,000+ sources.\n\nSynorb ingests content from tracked publications, extracts atomic claims, resolves tags (people, organizations, places, topics, data), and delivers structured stories via streams.\n\n## Quick Start\n1. Call `GET /connect` to self-provision free credentials (no signup required)\n2. Call `GET /account` and `GET /streams` in parallel to learn your quota and available streams\n3. Call `GET /streams/{id}/manifests` to get record + signal + brief triplets\n\n## Response Envelope\nAll authenticated endpoints wrap responses in a standard envelope:\n```json\n{\n  \"data\": { ... },\n  \"usage\": {\n    \"quota_limit\": 1000,\n    \"quota_used\": 42,\n    \"quota_remaining\": 958,\n    \"period\": \"2026-03\",\n    \"available\": \"signal, brief\",\n    \"items_in_response\": 50\n  }\n}\n```\nThe `data` object contains the actual response payload. The `usage` object is always present on authenticated responses.\n\n## Content Access by Plan\nAll plans include **Signals** and **Briefs** in manifest responses. **Records** (full source content) are available on Enterprise plans only.\n\nUse `GET /streams/{id}/manifests` to fetch content. The manifest includes signal, brief, and record \u2014 record fields show an upgrade message on non-Enterprise plans.\n\n## Authentication\nAdd two headers to every request:\n- `api-key: YOUR_API_KEY`\n- `secret: YOUR_API_SECRET`\n\nMCP tokens (`access_token`) are NOT accepted on the REST API. Use them only with the MCP server at mcp.synorb.com."
  },
  "servers": [
    {
      "url": "https://api.synorb.com",
      "description": "Production API"
    }
  ],
  "paths": {
    "/account": {
      "get": {
        "operationId": "getAccount",
        "summary": "Get organization profile, plan, quota, and usage",
        "description": "Returns your org profile, subscription details, team members, usage counters, and MCP connector config. Call this after `getCredentials` to learn your quota. The response `usage` object includes `manifests_limit`, `manifests_remaining` \u00e2\u20ac\u201d use these to inform the user about their capacity.",
        "tags": [
          "Account"
        ],
        "responses": {
          "200": {
            "description": "Account profile with quota info",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseEnvelope"
                },
                "example": {
                  "data": {
                    "org": {
                      "id": "17724793080269856",
                      "name": "My Company",
                      "org_type": "individual",
                      "contact_email": "user@example.com",
                      "is_active": true,
                      "created_on": "2026-03-01T00:00:00Z"
                    },
                    "subscription": {
                      "status": "active",
                      "plan_display_name": "Free",
                      "billing_cycle": "monthly",
                      "endpoint_mcp": true,
                      "endpoint_api": true,
                      "endpoint_s3": false,
                      "endpoint_websocket": false,
                      "endpoint_webhook": false,
                      "endpoint_digests": true
                    },
                    "users": [
                      {
                        "id": "17724793080489611",
                        "name": "User Name",
                        "email": "user@example.com",
                        "role": "owner",
                        "is_active": true,
                        "has_active_key": true,
                        "created_on": "2026-03-01T00:00:00Z"
                      }
                    ],
                    "usage": {
                      "period": "2026-03",
                      "api_calls": 42,
                      "tokens_consumed": 0.0,
                      "manifests_limit": 1000,
                      "manifests_remaining": 958
                    },
                    "mcp_connector": {
                      "url": "https://mcp.synorb.com/sse?token=YOUR_TOKEN",
                      "config": {
                        "mcpServers": {
                          "synorb": {
                            "url": "https://mcp.synorb.com/sse?token=YOUR_TOKEN"
                          }
                        }
                      },
                      "docs": "https://synorb.com/docs#mcp"
                    }
                  },
                  "usage": {
                    "quota_limit": 1000,
                    "quota_used": 42,
                    "quota_remaining": 958,
                    "period": "2026-03",
                    "available": "signal",
                    "items_in_response": 0
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/streams": {
      "get": {
        "operationId": "listStreams",
        "summary": "List all intelligence streams with volume metrics",
        "description": "Returns paginated list of streams sorted by recent activity (manifests_last30d descending). Each stream includes volume metrics (manifests_last24h, manifests_last7d, manifests_last30d), domain classification, and activation dates.\n\nUse `home_domain` to filter by primary domain. The response is wrapped in the standard `data` envelope with `pagination` inside `data`.",
        "tags": [
          "Streams"
        ],
        "parameters": [
          {
            "name": "home_domain",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "arts-culture-entertainment",
                "economics-business-work",
                "engineering-technology",
                "everyday-life-practical-knowledge",
                "health-medicine",
                "people-biography-history",
                "language-literature",
                "life-environment",
                "physical-sciences-mathematics",
                "places-geography",
                "society-law-government",
                "universe-earth"
              ]
            },
            "description": "Filter to streams in this primary domain"
          },
          {
            "name": "is_public",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "description": "Filter by public visibility"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/pageSize"
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated stream list",
            "content": {
              "application/json": {
                "example": {
                  "data": {
                    "streams": [
                      {
                        "id": "17724793080269856",
                        "name": "OpenAI",
                        "description": "Intelligence from OpenAI research, blog posts, and announcements",
                        "home_domain": "engineering-technology",
                        "cross_domains": [
                          "economics-business-work"
                        ],
                        "is_public": true,
                        "is_active": true,
                        "manifests_last24h": 3,
                        "manifests_last7d": 18,
                        "manifests_last30d": 72,
                        "activated_on": "2026-01-15T00:00:00Z",
                        "public_on": "2026-01-15T00:00:00Z",
                        "source_url": "https://openai.com"
                      }
                    ],
                    "pagination": {
                      "total_count": 521,
                      "page_num": 0,
                      "page_size": 50,
                      "next": 1,
                      "prev": null
                    }
                  },
                  "usage": {
                    "quota_limit": 1000,
                    "quota_used": 42,
                    "quota_remaining": 958,
                    "period": "2026-03",
                    "available": "signal",
                    "items_in_response": 50
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "streams": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/StreamSummary"
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "required": [
                        "streams",
                        "pagination"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/streams/{stream_id}": {
      "get": {
        "operationId": "getStream",
        "summary": "Stream details with filters, tags, and volume metrics",
        "description": "Returns full stream metadata including filter definitions, associated tag IDs, source channels, and volume metrics. Use this before fetching content to understand what a stream contains.\n\nThe `manifests_last*` and `claims_last*` fields show recent volume. The `status` field shows whether the stream is live.",
        "tags": [
          "Streams"
        ],
        "parameters": [
          {
            "name": "stream_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Stream ID (unique ID string)"
          }
        ],
        "responses": {
          "200": {
            "description": "Stream details",
            "content": {
              "application/json": {
                "example": {
                  "data": {
                    "id": "17724793080269856",
                    "name": "openai",
                    "title": "OpenAI",
                    "description": "Intelligence from OpenAI research, blog posts, and announcements",
                    "home_domain": "engineering-technology",
                    "cross_domains": [
                      "economics-business-work"
                    ],
                    "is_public": true,
                    "is_active": true,
                    "status": "live",
                    "stream_type": "public",
                    "stream_class": "discovery",
                    "source_type": "organization",
                    "source_url": "https://openai.com",
                    "source_ids": [
                      "17730001234567890"
                    ],
                    "source_channel_ids": [
                      "17730001234567891"
                    ],
                    "source_channels": [
                      {
                        "id": "17730001234567891",
                        "name": "openai-blog",
                        "source_type": "firecrawl",
                        "media_format": "text",
                        "is_active": true,
                        "activated_on": "2026-01-15T00:00:00Z",
                        "deactivated_on": "1970-01-01T00:00:00Z",
                        "deactivation_reason": "none"
                      }
                    ],
                    "filter_definition": {
                      "tag_ids": [
                        "17724793080269856"
                      ],
                      "source_type": "organization",
                      "source_names": []
                    },
                    "claim_type_ids": null,
                    "tag_ids": [
                      "17724793080269856"
                    ],
                    "manifests_last24h": 3,
                    "manifests_last7d": 18,
                    "manifests_last30d": 72,
                    "claims_last24h": 45,
                    "claims_last7d": 310,
                    "claims_last30d": 1250,
                    "counts_updated_at": "2026-03-19T14:22:00Z",
                    "activated_on": "2026-01-15T00:00:00Z",
                    "public_on": "2026-01-15T00:00:00Z",
                    "deactivated_on": "1970-01-01T00:00:00Z",
                    "created_on": "2026-01-15T00:00:00Z",
                    "updated_on": "2026-03-19T14:22:00Z"
                  },
                  "usage": {
                    "quota_limit": 1000,
                    "quota_used": 42,
                    "quota_remaining": 958,
                    "period": "2026-03",
                    "available": "signal",
                    "items_in_response": 0
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/StreamDetail"
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/streams/{stream_id}/manifests": {
      "get": {
        "operationId": "getStreamManifests",
        "summary": "Record + Signal + Brief triplets from a stream",
        "description": "Returns manifests \u00e2\u20ac\u201d the complete triplet of Record (source content), Signal (structured claims), and Brief (narrative summary) for each piece of content in a stream. This is the most comprehensive endpoint.\n\nFilter by date range, tag IDs, or tag type. Content within each manifest is gated by plan level:\n- all plans: signal only\n- all plans: signal + brief\n- Enterprise: signal + brief + record\n\nResults are sorted by `matched_at` descending (most recent first).",
        "tags": [
          "Streams"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/streamId"
          },
          {
            "$ref": "#/components/parameters/publishedDateFrom"
          },
          {
            "$ref": "#/components/parameters/publishedDateTo"
          },
          {
            "name": "tag_ids",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated tag IDs to filter manifests by. Use `browseTags` to find tag IDs.",
            "example": "17724793080269856,17724793080269857"
          },
          {
            "name": "tag_type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "person",
                "organization",
                "place",
                "topic",
                "data"
              ]
            },
            "description": "Filter to manifests with tags of this type"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/pageSize"
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated manifest triplets",
            "content": {
              "application/json": {
                "example": {
                  "data": {
                    "manifests": [
                      {
                        "manifest_id": "17737682899496764",
                        "record_id": "17737682899496700",
                        "stream_id": "17724793080269856",
                        "matched_at": "2026-03-18T14:22:00Z",
                        "source": {
                          "record_title": "OpenAI Announces GPT-5 Architecture",
                          "source_url": "https://openai.com/blog/gpt-5-architecture",
                          "source_published_date": "2026-03-18",
                          "source_name": "OpenAI Blog",
                          "source_type": "organization",
                          "media_format": "text",
                          "claim_type": "announcement",
                          "author": "OpenAI Research"
                        },
                        "signal": {
                          "story_id": "17737682899496764",
                          "headline": "OpenAI Announces GPT-5 Architecture",
                          "summary": "OpenAI revealed the architecture behind GPT-5.",
                          "sentiment": "positive",
                          "significance": "high",
                          "version": 1,
                          "claim_count": 22,
                          "reading_time_minutes": 4.2,
                          "body": {
                            "signal": {
                              "source_url": "https://openai.com/blog/gpt-5-architecture",
                              "claim_count": 22,
                              "featured_count": 5
                            },
                            "claims": [
                              {
                                "claim_text": "OpenAI announced GPT-5 uses a mixture-of-experts architecture",
                                "claim_type": "announcement",
                                "confidence": "stated",
                                "evidence": "direct_quote",
                                "signal": "Major architectural shift from dense to sparse models.",
                                "featured": true,
                                "entities": [
                                  {
                                    "name": "OpenAI",
                                    "type": "organization",
                                    "role": "source_org"
                                  }
                                ]
                              }
                            ]
                          }
                        },
                        "brief": {
                          "story_id": "17737682899496765",
                          "headline": "OpenAI Announces GPT-5 Architecture",
                          "summary": "OpenAI revealed the architecture behind GPT-5.",
                          "sentiment": "positive",
                          "significance": "high",
                          "version": 1,
                          "key_points_count": 4,
                          "quote_count": 1,
                          "reading_time_minutes": 3.0,
                          "body": {
                            "key_points": [
                              "GPT-5 uses mixture-of-experts architecture"
                            ],
                            "quotes": [
                              {
                                "text": "This is our most capable model...",
                                "speaker": "Sam Altman",
                                "context": "CEO announcement"
                              }
                            ],
                            "entity_details": [
                              {
                                "tag_type": "Organization",
                                "tag_value": "OpenAI"
                              }
                            ]
                          }
                        },
                        "record": null
                      }
                    ],
                    "pagination": {
                      "total_count": 72,
                      "page_num": 0,
                      "page_size": 50,
                      "next": 1,
                      "prev": null
                    }
                  },
                  "usage": {
                    "quota_limit": 1000,
                    "quota_used": 92,
                    "quota_remaining": 908,
                    "period": "2026-03",
                    "available": "signal, brief",
                    "items_in_response": 50
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "manifests": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Manifest"
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "required": [
                        "manifests",
                        "pagination"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/signal/{manifest_id}": {
      "get": {
        "operationId": "getSignalByManifest",
        "summary": "Signal by manifest ID (Platform/Firehose only)",
        "description": "Retrieve the Signal component for a given manifest. Platform/Firehose plans only. Firehose customers receive manifest_id via WebSocket delivery and use this endpoint to pull the signal.",
        "tags": [
          "Platform"
        ],
        "parameters": [
          {
            "name": "manifest_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Signal object",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Signal"
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/brief/{manifest_id}": {
      "get": {
        "operationId": "getBriefByManifest",
        "summary": "Brief by manifest ID (Platform/Firehose only)",
        "description": "Retrieve the Brief component for a given manifest. Platform/Firehose plans only.",
        "tags": [
          "Platform"
        ],
        "parameters": [
          {
            "name": "manifest_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Brief object",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Brief"
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/record/{manifest_id}": {
      "get": {
        "operationId": "getRecordByManifest",
        "summary": "Record by manifest ID (Platform/Firehose only)",
        "description": "Retrieve the Record component for a given manifest. Platform/Firehose plans only. Streams customers on Enterprise plans get records within the /manifests endpoint response instead.",
        "tags": [
          "Platform"
        ],
        "parameters": [
          {
            "name": "manifest_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Record object",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Record"
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/digests": {
      "get": {
        "operationId": "listDigests",
        "summary": "List your org's digests",
        "description": "Returns all active digests for your organization with stream counts and filter status. Two types: User Digests (org-built, included in plan) and Synorb Digests (pre-curated, subscription).\n\nRequires Pro Developer plan or above.",
        "tags": [
          "Digest Builder"
        ],
        "responses": {
          "200": {
            "description": "Digest list",
            "content": {
              "application/json": {
                "example": {
                  "data": {
                    "digests": [
                      {
                        "id": 42,
                        "name": "AI Policy Watch",
                        "stream_count": 12,
                        "digest_type": "user",
                        "has_dynamic_filter": true
                      }
                    ]
                  },
                  "usage": {
                    "quota_limit": 100000,
                    "quota_used": 500,
                    "quota_remaining": 99500,
                    "period": "2026-03",
                    "available": "signal, brief",
                    "items_in_response": 1
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "digests": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/DigestSummary"
                          }
                        }
                      },
                      "required": [
                        "digests"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      },
      "post": {
        "operationId": "createDigest",
        "summary": "Create a custom digest from streams or filters",
        "description": "Build a digest from explicit stream IDs, dynamic filter rules (topics, tags, sources, domains, source_type, claim_type, media_format), or both. At least one of `stream_ids` or `filter_spec` is required.\n\nUse `previewDigestFilter` first to see what streams match your filter before creating.",
        "tags": [
          "Digest Builder"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "example": "AI Policy Watch"
                  },
                  "stream_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "description": "Explicit stream IDs to include"
                  },
                  "filter_spec": {
                    "$ref": "#/components/schemas/FilterSpec"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Digest created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/DigestSummary"
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/digests/{id}": {
      "get": {
        "operationId": "getDigest",
        "summary": "Digest detail with resolved streams",
        "description": "Returns digest metadata, resolved stream list, and filter spec. Works for both User Digests (by org ownership) and Synorb Digests (by subscription).",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "Digest ID"
          }
        ],
        "responses": {
          "200": {
            "description": "Digest detail",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "digest": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "integer"
                            },
                            "name": {
                              "type": "string"
                            },
                            "description": {
                              "type": "string",
                              "nullable": true
                            },
                            "stream_count": {
                              "type": "integer"
                            },
                            "stream_ids": {
                              "type": "array",
                              "items": {
                                "type": "integer"
                              }
                            },
                            "filter_spec": {
                              "$ref": "#/components/schemas/FilterSpec"
                            },
                            "created_on": {
                              "type": "string",
                              "format": "date-time"
                            },
                            "updated_on": {
                              "type": "string",
                              "format": "date-time"
                            }
                          }
                        },
                        "streams": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/StreamSummary"
                          }
                        }
                      }
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  }
                },
                "example": {
                  "data": {
                    "digest": {
                      "id": 17737682899496764,
                      "name": "AI Policy Watch",
                      "description": "AI regulation and policy developments",
                      "slug": "ai-policy-watch",
                      "digest_type": "user",
                      "is_active": true,
                      "has_dynamic_filter": true,
                      "stream_count": 8,
                      "created_on": "2026-03-01T00:00:00Z",
                      "updated_on": "2026-03-15T00:00:00Z"
                    },
                    "streams": [
                      {
                        "id": 17723038993540102,
                        "title": "Federal Reserve",
                        "description": "Federal Reserve publications and data releases",
                        "home_domain": "society-law-government",
                        "stream_class": "discovery",
                        "manifests_last24h": 5,
                        "manifests_last7d": 42,
                        "manifests_last30d": 187
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "operationId": "updateDigest",
        "summary": "Update digest name, stream_ids, or filter_spec",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "stream_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "format": "int64"
                    }
                  },
                  "filter_spec": {
                    "$ref": "#/components/schemas/FilterSpec"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Digest updated"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "operationId": "deleteDigest",
        "summary": "Soft-delete a digest (permanently deactivates)",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Digest deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/digests/{id}/activate": {
      "post": {
        "operationId": "activateDigest",
        "summary": "Re-enable a deactivated digest",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Digest activated"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/digests/{id}/deactivate": {
      "post": {
        "operationId": "deactivateDigest",
        "summary": "Pause a digest (reversible via activateDigest)",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Digest deactivated"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/digests/{id}/streams": {
      "post": {
        "operationId": "addDigestStreams",
        "summary": "Add streams to a digest",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "stream_ids"
                ],
                "properties": {
                  "stream_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "format": "int64"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Streams added to digest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      },
      "delete": {
        "operationId": "removeDigestStreams",
        "summary": "Remove streams from a digest",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "stream_ids"
                ],
                "properties": {
                  "stream_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "format": "int64"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Streams removed from digest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/digests/preview-filter": {
      "post": {
        "operationId": "previewDigestFilter",
        "summary": "Preview matching streams before creating a digest",
        "description": "Returns up to 50 matching streams for a given filter_spec without creating a digest. Use this to validate your filter before calling `createDigest`.",
        "tags": [
          "Digest Builder"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "filter_spec"
                ],
                "properties": {
                  "filter_spec": {
                    "$ref": "#/components/schemas/FilterSpec"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Matching streams preview",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "stream_count": {
                          "type": "integer"
                        },
                        "streams": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/StreamSummary"
                          }
                        }
                      }
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/digests/{id}/manifests": {
      "get": {
        "operationId": "getDigestManifests",
        "summary": "Manifests across all streams in a digest",
        "description": "Same manifest triplet structure as `getStreamManifests` but aggregated across all streams in the digest. Works for both User Digests and Synorb Digests.",
        "tags": [
          "Digest Builder"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "$ref": "#/components/parameters/publishedDateFrom"
          },
          {
            "$ref": "#/components/parameters/publishedDateTo"
          },
          {
            "name": "tag_ids",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated tag IDs"
          },
          {
            "name": "tag_type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "person",
                "organization",
                "place",
                "topic",
                "data"
              ]
            }
          },
          {
            "name": "source_channel_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated source channel IDs to filter by"
          },
          {
            "name": "source_channel",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated source channel display names to filter by (case-insensitive)",
            "example": "Federal Reserve Bank of St. Louis"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/pageSize"
          }
        ],
        "responses": {
          "200": {
            "description": "Manifest triplets across digest streams",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "manifests": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Manifest"
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "required": [
                        "manifests",
                        "pagination"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/digests/{id}/briefs": {
      "get": {
        "operationId": "getDigestBriefs",
        "summary": "Briefs across all streams in a digest",
        "description": "Briefs aggregated across all streams in the digest. Works for both User Digests and Synorb Digests.",
        "tags": [
          "Digests"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "$ref": "#/components/parameters/publishedDateFrom"
          },
          {
            "$ref": "#/components/parameters/publishedDateTo"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/pageSize"
          }
        ],
        "responses": {
          "200": {
            "description": "Briefs across digest streams",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "briefs": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Brief"
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        },
                        "digest_id": {
                          "type": "string",
                          "description": "Digest ID"
                        },
                        "stream_ids": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Stream IDs in this digest"
                        }
                      },
                      "required": [
                        "briefs",
                        "pagination"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/digests/synorb/{id}/add": {
      "post": {
        "operationId": "subscribeSynorbDigest",
        "summary": "Subscribe to a Synorb Digest ($5/month)",
        "description": "Adds a pre-curated Synorb Digest to your org. Requires an active subscription. Free on Pro Developer, Startup, and Enterprise plans; $5/month on lower tiers.",
        "tags": [
          "Synorb Digests"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "Synorb Digest ID"
          }
        ],
        "responses": {
          "200": {
            "description": "Subscribed to Synorb Digest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/digests/synorb/{id}/remove": {
      "delete": {
        "operationId": "unsubscribeSynorbDigest",
        "summary": "Unsubscribe from a Synorb Digest",
        "tags": [
          "Synorb Digests"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Unsubscribed"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/webhooks": {
      "get": {
        "operationId": "listWebhooks",
        "summary": "List registered webhooks",
        "description": "Returns all webhooks for your org with delivery status. Startup and Enterprise plans.",
        "tags": [
          "Webhooks"
        ],
        "responses": {
          "200": {
            "description": "Webhook list"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      },
      "post": {
        "operationId": "createWebhook",
        "summary": "Register a webhook endpoint",
        "description": "Register a URL to receive push notifications for manifest and lifecycle events: manifest.matched, stream.created, stream.removed, stream.unpublished, digest.new_content, digest.created, digest.updated, digest.removed.\n\nStartup and Enterprise plans.",
        "tags": [
          "Webhooks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url",
                  "events"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "example": "https://example.com/webhooks/synorb"
                  },
                  "events": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "manifest.matched",
                        "stream.created",
                        "stream.removed",
                        "stream.unpublished",
                        "digest.new_content",
                        "digest.created",
                        "digest.updated",
                        "digest.removed"
                      ]
                    }
                  },
                  "secret": {
                    "type": "string",
                    "description": "Optional HMAC signing secret for payload verification"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Webhook registered"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/webhooks/{id}": {
      "delete": {
        "operationId": "deleteWebhook",
        "summary": "Delete a webhook",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Webhook deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/webhooks/{id}/disable": {
      "post": {
        "operationId": "disableWebhook",
        "summary": "Disable a webhook (stop deliveries)",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Webhook disabled"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/webhooks/{id}/reactivate": {
      "post": {
        "operationId": "reactivateWebhook",
        "summary": "Re-enable a disabled webhook",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Webhook reactivated"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/webhooks/{id}/test": {
      "post": {
        "operationId": "testWebhook",
        "summary": "Send a test event to a webhook",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Test event sent"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/webhooks/{id}/logs": {
      "get": {
        "operationId": "getWebhookLogs",
        "summary": "Webhook delivery history",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Delivery log"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/backfill/grants": {
      "get": {
        "operationId": "listBackfillGrants",
        "summary": "List your backfill (S3 export) grants",
        "description": "Returns all active backfill grants with stream details, date ranges, and download status. Startup and Enterprise plans.",
        "tags": [
          "S3 Export"
        ],
        "responses": {
          "200": {
            "description": "Backfill grants"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/backfill/{id}/download": {
      "post": {
        "operationId": "downloadBackfill",
        "summary": "Generate S3 presigned URL for a backfill grant",
        "tags": [
          "S3 Export"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Presigned URL"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/ontology/sync": {
      "post": {
        "operationId": "createSync",
        "summary": "Map a Synorb tag/topic/stream to your internal ID",
        "description": "Creates a sync that maps a Synorb object to your internal identifier. Re-syncing the same object overwrites the previous sync. Enterprise only.\n\nUse `browseTags` or `browseTopics` first to find the Synorb object_id.",
        "tags": [
          "Ontology Sync"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "object_type",
                  "object_id",
                  "external_id"
                ],
                "properties": {
                  "object_type": {
                    "type": "string",
                    "enum": [
                      "tag",
                      "topic",
                      "stream"
                    ],
                    "description": "What to sync"
                  },
                  "object_id": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Synorb object ID (from `browseTags` or `browseTopics`)"
                  },
                  "external_id": {
                    "type": "string",
                    "description": "Your internal ID (e.g., 'CRM-TSLA-001', 'ticker:TSLA')",
                    "example": "ticker:TSLA"
                  },
                  "external_name": {
                    "type": "string",
                    "description": "Your internal display name",
                    "example": "Tesla Inc"
                  },
                  "labels": {
                    "type": "string",
                    "description": "Comma-separated labels (e.g., 'buy-side,research')",
                    "example": "portfolio,tech"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Sync created or updated"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/ontology/sync/{id}": {
      "delete": {
        "operationId": "removeSync",
        "summary": "Remove a sync (soft delete)",
        "description": "Soft-deletes the sync, which can be re-created later. Enterprise only.",
        "tags": [
          "Ontology Sync"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "Sync ID from `listSyncs`"
          }
        ],
        "responses": {
          "200": {
            "description": "Sync removed"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/ontology/syncs": {
      "get": {
        "operationId": "listSyncs",
        "summary": "List active syncs for your organization",
        "description": "Returns all active syncs with Synorb names resolved. Filter by object_type or label. Enterprise only.",
        "tags": [
          "Ontology Sync"
        ],
        "parameters": [
          {
            "name": "object_type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "tag",
                "topic",
                "stream"
              ]
            },
            "description": "Filter by sync type"
          },
          {
            "name": "label",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Filter by label"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "name": "page_size",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 200,
              "maximum": 500
            },
            "description": "Results per page, max 500"
          }
        ],
        "responses": {
          "200": {
            "description": "Active syncs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "syncs": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Sync"
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "required": [
                        "syncs",
                        "pagination"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/ontology/tags": {
      "get": {
        "operationId": "browseTags",
        "summary": "Search the Synorb tag catalog with fuzzy matching",
        "description": "Fuzzy search tags by name. Filter by tag_type or browse by stream frequency. Returns tag_id, canonical_name, tag_type, aliases, relevance, and claim_count.\n\nUse `search` for fuzzy name matching. Use `stream_id` to browse tags by frequency in a specific stream. Enterprise only.",
        "tags": [
          "Ontology Sync"
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Fuzzy search query (e.g., 'Tesla', 'Elon Musk')",
            "example": "Tesla"
          },
          {
            "name": "tag_type",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "person",
                "organization",
                "place",
                "topic",
                "data"
              ]
            },
            "description": "Filter by tag type"
          },
          {
            "name": "stream_id",
            "in": "query",
            "schema": {
              "type": "integer"
            },
            "description": "Browse tags by frequency in this stream"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/pageSize"
          }
        ],
        "responses": {
          "200": {
            "description": "Tag search results",
            "content": {
              "application/json": {
                "example": {
                  "data": {
                    "tags": [
                      {
                        "tag_id": "17724793080269856",
                        "canonical_name": "Tesla Inc",
                        "tag_type": "organization",
                        "aliases": [
                          "Tesla",
                          "TSLA",
                          "Tesla Motors"
                        ],
                        "relevance": 0.85,
                        "claim_count": 0
                      }
                    ],
                    "pagination": {
                      "total_count": 3,
                      "page_num": 0,
                      "page_size": 50,
                      "next": null,
                      "prev": null
                    }
                  },
                  "usage": {
                    "quota_limit": 1000000,
                    "quota_used": 500,
                    "quota_remaining": 999500,
                    "period": "2026-03",
                    "available": "signal, brief, record",
                    "items_in_response": 3
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Tag"
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "required": [
                        "tags",
                        "pagination"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/ontology/tags/{tag_id}/related": {
      "get": {
        "operationId": "getRelatedTags",
        "summary": "Suggest related tags from knowledge graph",
        "description": "Given a tag_id, returns related tags from the knowledge graph. For example, syncing 'Tesla Inc' might suggest 'Elon Musk', 'SpaceX', 'TSLA'. Enterprise only.",
        "tags": [
          "Ontology Sync"
        ],
        "parameters": [
          {
            "name": "tag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 10
            },
            "description": "Max suggestions to return"
          }
        ],
        "responses": {
          "200": {
            "description": "Related tag suggestions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "related": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Tag"
                          }
                        }
                      }
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/ontology/topics": {
      "get": {
        "operationId": "browseTopics",
        "summary": "Browse the Synorb topic catalog",
        "description": "Search and browse topics by name or domain. Topics are thematic categories that organize content. Enterprise only.",
        "tags": [
          "Ontology Sync"
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Search query"
          },
          {
            "name": "domain",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Filter by domain (e.g., tech, finance, policy, health)"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/pageSize"
          }
        ],
        "responses": {
          "200": {
            "description": "Topic catalog",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "topics": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Topic"
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "required": [
                        "topics",
                        "pagination"
                      ]
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  },
                  "required": [
                    "data",
                    "usage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    },
    "/ontology/labels": {
      "get": {
        "operationId": "listLabels",
        "summary": "List custom label definitions for your org",
        "description": "Returns all label definitions. Labels help categorize syncs (e.g., 'buy-side', 'portfolio', 'watchlist'). Enterprise only.",
        "tags": [
          "Ontology Sync"
        ],
        "responses": {
          "200": {
            "description": "Label definitions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "labels": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "label_name": {
                                "type": "string",
                                "example": "buy-side"
                              },
                              "label_group": {
                                "type": "string",
                                "example": "trading"
                              },
                              "description": {
                                "type": "string",
                                "example": "Buy-side research portfolio"
                              }
                            }
                          }
                        }
                      }
                    },
                    "usage": {
                      "$ref": "#/components/schemas/Usage"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      },
      "post": {
        "operationId": "createLabel",
        "summary": "Create a custom label for organizing syncs",
        "description": "Labels help categorize syncs (e.g., 'buy-side', 'portfolio', 'watchlist'). Enterprise only.",
        "tags": [
          "Ontology Sync"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "label_name"
                ],
                "properties": {
                  "label_name": {
                    "type": "string",
                    "example": "buy-side"
                  },
                  "label_group": {
                    "type": "string",
                    "example": "trading"
                  },
                  "description": {
                    "type": "string",
                    "example": "Buy-side research portfolio"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Label created"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/PlanGated"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ResponseEnvelope": {
        "type": "object",
        "description": "Standard response wrapper for all authenticated endpoints. The `data` object contains the actual payload. The `usage` object tracks quota consumption.",
        "properties": {
          "data": {
            "type": "object",
            "description": "Response payload \u00e2\u20ac\u201d structure varies by endpoint"
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          }
        },
        "required": [
          "data",
          "usage"
        ]
      },
      "Pagination": {
        "type": "object",
        "description": "Pagination metadata. Always nested inside `data`. Use `next` to determine if more pages exist \u00e2\u20ac\u201d when `next` is null, you are on the last page.",
        "properties": {
          "total_count": {
            "type": "integer",
            "description": "Total matching results across all pages",
            "example": 521
          },
          "page_num": {
            "type": "integer",
            "description": "Current page number (0-indexed)",
            "example": 0
          },
          "page_size": {
            "type": "integer",
            "description": "Results per page",
            "example": 50
          },
          "next": {
            "type": "integer",
            "nullable": true,
            "description": "Next page number, or null if on last page",
            "example": 1
          },
          "prev": {
            "type": "integer",
            "nullable": true,
            "description": "Previous page number, or null if on first page",
            "example": null
          }
        },
        "required": [
          "total_count",
          "page_num",
          "page_size",
          "next",
          "prev"
        ]
      },
      "Usage": {
        "type": "object",
        "description": "Quota usage metadata. Present on every authenticated response. Also sent as X-Synorb-* response headers.",
        "properties": {
          "quota_limit": {
            "type": "integer",
            "description": "Monthly manifest quota",
            "example": 1000
          },
          "quota_used": {
            "type": "integer",
            "description": "Manifests consumed this period",
            "example": 42
          },
          "quota_remaining": {
            "type": "integer",
            "description": "Manifests remaining this period",
            "example": 958
          },
          "period": {
            "type": "string",
            "description": "Current billing period (YYYY-MM)",
            "example": "2026-03"
          },
          "available": {
            "type": "string",
            "description": "Content levels available on your plan (comma-separated)",
            "example": "signal, brief"
          },
          "items_in_response": {
            "type": "integer",
            "description": "Number of items in this specific response",
            "example": 50
          }
        },
        "required": [
          "quota_limit",
          "quota_used",
          "quota_remaining",
          "period",
          "available",
          "items_in_response"
        ]
      },
      "StreamSummary": {
        "type": "object",
        "description": "Stream summary with volume metrics. IDs exceeding JavaScript's Number.MAX_SAFE_INTEGER (2^53-1) are returned as strings.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Stream ID (unique ID string)",
            "example": "17724793080269856"
          },
          "name": {
            "type": "string",
            "example": "OpenAI"
          },
          "description": {
            "type": "string",
            "example": "Intelligence from OpenAI research, blog posts, and announcements"
          },
          "home_domain": {
            "type": "string",
            "example": "engineering-technology"
          },
          "cross_domains": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "economics-business-work"
            ]
          },
          "is_public": {
            "type": "boolean",
            "example": true
          },
          "is_active": {
            "type": "boolean",
            "example": true
          },
          "manifests_last24h": {
            "type": "integer",
            "description": "Manifests published in last 24 hours",
            "example": 3
          },
          "manifests_last7d": {
            "type": "integer",
            "description": "Manifests published in last 7 days",
            "example": 18
          },
          "manifests_last30d": {
            "type": "integer",
            "description": "Manifests published in last 30 days",
            "example": 72
          },
          "created_on": {
            "type": "string",
            "format": "date-time",
            "description": "When the stream was created",
            "example": "2026-01-15T00:00:00Z"
          },
          "updated_on": {
            "type": "string",
            "format": "date-time",
            "description": "When the stream was last updated",
            "example": "2026-03-19T03:24:50Z"
          },
          "activated_on": {
            "type": "string",
            "format": "date-time",
            "description": "When the stream was first activated (internal)",
            "example": "2026-01-15T00:00:00Z"
          },
          "public_on": {
            "type": "string",
            "format": "date-time",
            "description": "When the stream was made public (customer-facing)",
            "example": "2026-01-15T00:00:00Z"
          },
          "deactivated_on": {
            "type": "string",
            "format": "date-time",
            "description": "When the stream was deactivated (epoch = still active)",
            "example": "1970-01-01T00:00:00Z"
          },
          "tag_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Associated tag IDs",
            "example": [
              "17724793080269856"
            ]
          },
          "source_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "Primary source URL for this stream",
            "example": "https://openai.com"
          }
        }
      },
      "StreamDetail": {
        "type": "object",
        "description": "Full stream metadata including filter definitions, source channels, and volume metrics",
        "properties": {
          "id": {
            "type": "string",
            "description": "Stream ID (unique ID string)",
            "example": "17724793080269856"
          },
          "name": {
            "type": "string",
            "description": "URL-safe stream name (slug)",
            "example": "openai"
          },
          "title": {
            "type": "string",
            "description": "Human-readable stream title",
            "example": "OpenAI"
          },
          "description": {
            "type": "string"
          },
          "home_domain": {
            "type": "string",
            "example": "engineering-technology"
          },
          "cross_domains": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "is_public": {
            "type": "boolean"
          },
          "is_active": {
            "type": "boolean"
          },
          "status": {
            "type": "string",
            "description": "Stream status",
            "example": "live"
          },
          "stream_type": {
            "type": "string",
            "nullable": true,
            "description": "Stream type classification",
            "example": "public"
          },
          "stream_class": {
            "type": "string",
            "nullable": true,
            "description": "Stream class (discovery, narrative, research)",
            "example": "discovery"
          },
          "source_type": {
            "type": "string",
            "nullable": true,
            "description": "Primary source type",
            "example": "organization"
          },
          "source_url": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "source_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Associated source config IDs"
          },
          "source_channel_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Associated source channel IDs"
          },
          "source_channels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string",
                  "description": "Machine slug (e.g. pitch-the-pm-podcast)"
                },
                "source_channel_display": {
                  "type": "string",
                  "nullable": true,
                  "description": "Human-readable label (e.g. Pitch The PM)"
                },
                "source_type": {
                  "type": "string"
                },
                "media_format": {
                  "type": "string"
                },
                "is_active": {
                  "type": "boolean"
                },
                "activated_on": {
                  "type": "string",
                  "format": "date-time"
                },
                "deactivated_on": {
                  "type": "string",
                  "format": "date-time"
                },
                "deactivation_reason": {
                  "type": "string",
                  "nullable": true
                }
              }
            },
            "description": "Source channel details with connector type and status"
          },
          "filter_definition": {
            "type": "object",
            "description": "Stream filter rules (tag_ids, source_type, source_names)"
          },
          "claim_type_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "description": "Claim type filter (null = all types)"
          },
          "tag_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Associated tag IDs"
          },
          "manifests_last24h": {
            "type": "integer",
            "description": "Manifests published in last 24 hours"
          },
          "manifests_last7d": {
            "type": "integer",
            "description": "Manifests published in last 7 days"
          },
          "manifests_last30d": {
            "type": "integer",
            "description": "Manifests published in last 30 days"
          },
          "claims_last24h": {
            "type": "integer",
            "description": "Claims published in last 24 hours"
          },
          "claims_last7d": {
            "type": "integer",
            "description": "Claims published in last 7 days"
          },
          "claims_last30d": {
            "type": "integer",
            "description": "Claims published in last 30 days"
          },
          "counts_updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "When volume counts were last refreshed"
          },
          "activated_on": {
            "type": "string",
            "format": "date-time"
          },
          "public_on": {
            "type": "string",
            "format": "date-time"
          },
          "deactivated_on": {
            "type": "string",
            "format": "date-time",
            "description": "Epoch (1970-01-01) means still active"
          },
          "created_on": {
            "type": "string",
            "format": "date-time"
          },
          "updated_on": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Signal": {
        "type": "object",
        "description": "Structured claims extraction for reasoning systems. Contains 15-50 atomic assertions per record with claim_type, confidence, and evidence metadata.",
        "properties": {
          "story_id": {
            "type": "string",
            "description": "Signal ID (unique ID string)",
            "example": "17737682899496764"
          },
          "stream_id": {
            "type": "string",
            "description": "Stream this signal was matched to",
            "example": "17724793080269856"
          },
          "source_published_date": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "When the source was originally published",
            "example": "2026-03-18"
          },
          "source_type": {
            "type": "string",
            "enum": [
              "person",
              "organization",
              "data"
            ],
            "description": "Source type",
            "example": "organization"
          },
          "media_format": {
            "type": "string",
            "enum": [
              "text",
              "audio",
              "video",
              "social",
              "data",
              "transcript",
              "regulatory"
            ],
            "description": "Media format of the source",
            "example": "text"
          },
          "matched_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this signal was matched to the stream"
          },
          "headline": {
            "type": "string",
            "example": "OpenAI Announces GPT-5 Architecture"
          },
          "summary": {
            "type": "string",
            "example": "OpenAI revealed the architecture behind GPT-5, highlighting a new mixture-of-experts approach."
          },
          "sentiment": {
            "type": "string",
            "enum": [
              "positive",
              "negative",
              "neutral",
              "mixed",
              "indeterminate"
            ],
            "example": "positive"
          },
          "significance": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "example": "high"
          },
          "content_quality_score": {
            "type": "number",
            "nullable": true,
            "description": "Content quality score (0-1)"
          },
          "reading_time_minutes": {
            "type": "number",
            "nullable": true,
            "description": "Estimated reading time in minutes"
          },
          "key_points_count": {
            "type": "integer",
            "nullable": true,
            "description": "Number of key points"
          },
          "quote_count": {
            "type": "integer",
            "nullable": true,
            "description": "Number of quotes"
          },
          "story_created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this signal was created"
          },
          "record_id": {
            "type": "string",
            "description": "ID of the source record"
          },
          "story_version": {
            "type": "integer",
            "description": "Signal version number",
            "example": 1
          },
          "story_version_note": {
            "type": "string",
            "nullable": true,
            "description": "Note about this version"
          },
          "record_url": {
            "type": "string",
            "format": "uri",
            "description": "Original source URL",
            "example": "https://openai.com/blog/gpt-5-architecture"
          },
          "record_published_date": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "When the source record was published"
          },
          "synorb_ingested_at": {
            "type": "string",
            "format": "date-time",
            "description": "When Synorb ingested the source"
          },
          "record_version": {
            "type": "integer",
            "description": "Record version number"
          },
          "record_version_note": {
            "type": "string",
            "nullable": true,
            "description": "Note about the record version"
          },
          "body": {
            "type": "object",
            "description": "Structured claims body containing atomic assertions, source metadata, and domain classification",
            "properties": {
              "signal": {
                "type": "object",
                "description": "Source metadata for the extraction",
                "properties": {
                  "source_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "published_date": {
                    "type": "string",
                    "format": "date"
                  },
                  "source_name": {
                    "type": "string",
                    "description": "Source publication name"
                  },
                  "source_channel": {
                    "type": "string",
                    "description": "Source channel identifier"
                  },
                  "claim_count": {
                    "type": "integer",
                    "description": "Total claims extracted"
                  },
                  "featured_count": {
                    "type": "integer",
                    "description": "Number of featured/key claims"
                  }
                }
              },
              "claims": {
                "type": "array",
                "description": "15-50 atomic assertions extracted from the source",
                "items": {
                  "type": "object",
                  "properties": {
                    "claim_text": {
                      "type": "string",
                      "description": "One atomic assertion, one sentence"
                    },
                    "claim_type": {
                      "type": "string",
                      "enum": [
                        "publication",
                        "announcement",
                        "disclosure",
                        "remarks",
                        "data",
                        "analysis",
                        "event"
                      ],
                      "description": "publication=research/report, announcement=official statement, disclosure=filing, remarks=speech/interview, data=statistic, analysis=derived insight, event=occurrence"
                    },
                    "confidence": {
                      "type": "string",
                      "enum": [
                        "stated",
                        "implied",
                        "inferred",
                        "measured"
                      ],
                      "description": "stated=explicit, implied=strongly suggested, inferred=derived by reasoning, measured=backed by data"
                    },
                    "evidence": {
                      "type": "string",
                      "enum": [
                        "direct_quote",
                        "paraphrase",
                        "derived",
                        "observed"
                      ],
                      "description": "direct_quote=exact quote (quote field populated), paraphrase=restated, derived=synthesized, observed=factual"
                    },
                    "quote": {
                      "type": "string",
                      "nullable": true,
                      "description": "Exact quote from source when evidence=direct_quote, null otherwise"
                    },
                    "signal": {
                      "type": "string",
                      "description": "1-2 sentences explaining why this claim matters"
                    },
                    "featured": {
                      "type": "boolean",
                      "description": "Whether this is a key claim"
                    },
                    "key_point_index": {
                      "type": "integer",
                      "nullable": true,
                      "description": "Position in key points list, null if not featured"
                    },
                    "entities": {
                      "type": "array",
                      "description": "Entities mentioned in this claim",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Canonical entity name"
                          },
                          "type": {
                            "type": "string",
                            "enum": [
                              "organization",
                              "person",
                              "place",
                              "topic"
                            ]
                          },
                          "role": {
                            "type": "string",
                            "enum": [
                              "source_org",
                              "speaker",
                              "subject",
                              "mentioned"
                            ]
                          }
                        }
                      }
                    }
                  }
                }
              },
              "entity_details": {
                "type": "array",
                "description": "Resolved tags for the entire signal",
                "items": {
                  "type": "object",
                  "properties": {
                    "tag_type": {
                      "type": "string",
                      "enum": [
                        "Organization",
                        "Person",
                        "Place",
                        "Topic"
                      ]
                    },
                    "tag_value": {
                      "type": "string"
                    }
                  }
                }
              },
              "domain_classification": {
                "type": "object",
                "description": "Domain classification for the signal",
                "properties": {
                  "home_domain": {
                    "type": "string",
                    "description": "Primary domain"
                  },
                  "cross_domains": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "0-3 secondary domains"
                  }
                }
              },
              "topics": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "nullable": true,
                "description": "Resolved topic names"
              }
            }
          }
        }
      },
      "Brief": {
        "type": "object",
        "description": "Structured narrative for human-readable reporting. Contains headline, summary, and structured body narrative with sentiment and significance ratings.",
        "properties": {
          "story_id": {
            "type": "string",
            "example": "17737682899496765"
          },
          "stream_id": {
            "type": "string",
            "description": "Stream this brief was matched to",
            "example": "17724793080269856"
          },
          "source_published_date": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "When the source was originally published",
            "example": "2026-03-18"
          },
          "source_type": {
            "type": "string",
            "enum": [
              "person",
              "organization",
              "data"
            ],
            "description": "Source type",
            "example": "organization"
          },
          "media_format": {
            "type": "string",
            "enum": [
              "text",
              "audio",
              "video",
              "social",
              "data",
              "transcript",
              "regulatory"
            ],
            "description": "Media format of the source",
            "example": "text"
          },
          "matched_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this brief was matched to the stream"
          },
          "headline": {
            "type": "string",
            "example": "OpenAI Announces GPT-5 Architecture"
          },
          "summary": {
            "type": "string"
          },
          "sentiment": {
            "type": "string",
            "enum": [
              "positive",
              "negative",
              "neutral",
              "mixed",
              "indeterminate"
            ]
          },
          "significance": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "content_quality_score": {
            "type": "number",
            "nullable": true,
            "description": "Content quality score (0-1)"
          },
          "reading_time_minutes": {
            "type": "number",
            "nullable": true,
            "description": "Estimated reading time in minutes"
          },
          "key_points_count": {
            "type": "integer",
            "nullable": true,
            "description": "Number of key points"
          },
          "quote_count": {
            "type": "integer",
            "nullable": true,
            "description": "Number of quotes"
          },
          "story_created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this brief was created"
          },
          "record_id": {
            "type": "string",
            "description": "ID of the source record"
          },
          "story_version": {
            "type": "integer",
            "description": "Brief version number",
            "example": 1
          },
          "story_version_note": {
            "type": "string",
            "nullable": true,
            "description": "Note about this version"
          },
          "record_url": {
            "type": "string",
            "format": "uri",
            "description": "Original source URL"
          },
          "record_published_date": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "When the source record was published"
          },
          "synorb_ingested_at": {
            "type": "string",
            "format": "date-time",
            "description": "When Synorb ingested the source"
          },
          "record_version": {
            "type": "integer",
            "description": "Record version number"
          },
          "record_version_note": {
            "type": "string",
            "nullable": true,
            "description": "Note about the record version"
          },
          "body": {
            "type": "object",
            "description": "Structured narrative body with key insights, quotes, and entity details",
            "properties": {
              "key_insights": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "3-4 key takeaways ordered by importance"
              },
              "notable_quotes": {
                "type": "array",
                "description": "Direct quotes from the source",
                "items": {
                  "type": "object",
                  "properties": {
                    "text": {
                      "type": "string",
                      "description": "Exact quote"
                    },
                    "speaker": {
                      "type": "string",
                      "description": "Name of person quoted"
                    },
                    "context": {
                      "type": "string",
                      "description": "Why this quote matters (1 sentence)"
                    }
                  }
                }
              },
              "entity_details": {
                "type": "array",
                "description": "Resolved tags",
                "items": {
                  "type": "object",
                  "properties": {
                    "tag_type": {
                      "type": "string",
                      "enum": [
                        "Organization",
                        "Person",
                        "Place",
                        "Topic"
                      ]
                    },
                    "tag_value": {
                      "type": "string"
                    }
                  }
                }
              },
              "domain_classification": {
                "type": "object",
                "properties": {
                  "home_domain": {
                    "type": "string"
                  },
                  "cross_domains": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "topics": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "nullable": true,
                "description": "Resolved topic names"
              },
              "actionable_takeaways": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "nullable": true,
                "description": "Actionable recommendations derived from the content. Audio only — present when media_format is 'audio'."
              },
              "guest_details": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "Guest or performer name"
                    },
                    "title": {
                      "type": "string",
                      "description": "Professional title"
                    },
                    "affiliation": {
                      "type": "string",
                      "description": "Organization or company"
                    }
                  }
                },
                "nullable": true,
                "description": "Guest or performer details with name, title, and affiliation. Audio only — present when media_format is 'audio'."
              },
              "cross_promotion": {
                "type": "string",
                "nullable": true,
                "description": "Cross-promotion or mentions of other shows, products, or platforms. Audio only — present when media_format is 'audio'."
              },
              "cultural_relevance": {
                "type": "string",
                "nullable": true,
                "description": "Cultural or social relevance of the content in the current context. Audio only — present when media_format is 'audio'."
              }
            }
          },
          "body_markdown": {
            "type": "string",
            "description": "Markdown-rendered brief body. Standard briefs include ## Key Insights and ## Notable Quotes. Audio briefs (media_format='audio') additionally include ## Actionable Takeaways, ## Guest or Performer Details, ## Cross-Promotion or Mentions, and ## Cultural or Social Relevance."
          }
        }
      },
      "Record": {
        "type": "object",
        "description": "Original ingested content payload. Enterprise only (Enterprise access).",
        "properties": {
          "record_id": {
            "type": "string",
            "description": "Record ID (unique ID string)",
            "example": "17737682899496700"
          },
          "title": {
            "type": "string",
            "example": "OpenAI Announces GPT-5 Architecture"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "example": "https://openai.com/blog/gpt-5-architecture"
          },
          "source_published_date": {
            "type": "string",
            "format": "date",
            "example": "2026-03-18"
          },
          "source_name": {
            "type": "string",
            "example": "OpenAI Blog"
          },
          "source_type": {
            "type": "string",
            "enum": [
              "person",
              "organization",
              "data"
            ],
            "example": "organization"
          },
          "media_format": {
            "type": "string",
            "enum": [
              "text",
              "audio",
              "video",
              "social",
              "data",
              "transcript",
              "regulatory"
            ]
          },
          "claim_type": {
            "type": "string",
            "enum": [
              "publication",
              "announcement",
              "disclosure",
              "remarks",
              "data",
              "analysis",
              "event"
            ]
          },
          "author": {
            "type": "string",
            "nullable": true,
            "description": "Author name if available"
          },
          "content": {
            "type": "string",
            "description": "Full ingested content text"
          },
          "extra_data": {
            "type": "object",
            "nullable": true,
            "description": "Additional metadata (varies by source type)"
          },
          "synorb_ingested_at": {
            "type": "string",
            "format": "date-time",
            "description": "When Synorb ingested this record"
          },
          "record_version": {
            "type": "integer",
            "description": "Record version number",
            "example": 1
          },
          "record_version_note": {
            "type": "string",
            "nullable": true,
            "description": "Note about the record version"
          },
          "status": {
            "type": "string",
            "description": "Record processing status",
            "example": "pending"
          },
          "stream_id": {
            "type": "string",
            "description": "Stream this record was matched to"
          },
          "matched_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this record was matched to the stream"
          }
        }
      },
      "Manifest": {
        "type": "object",
        "description": "Record + Signal + Brief triplet. The complete delivery unit. All top-level keys are always present. Content within signal/brief/record is gated by plan level (all plans: signal + brief, Enterprise: +record). Fields below your plan level show all keys with an upgrade message string (e.g. 'Requires Startup plan or higher'), never omitted.",
        "required": [
          "manifest_id",
          "record_id",
          "stream_ids",
          "stream_names",
          "matched_at",
          "source",
          "signal",
          "brief",
          "record"
        ],
        "properties": {
          "manifest_id": {
            "type": "string",
            "description": "Manifest ID (unique ID string)",
            "example": "17737682899496764"
          },
          "record_id": {
            "type": "string",
            "example": "17737682899496700"
          },
          "stream_ids": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Stream IDs this manifest is routed to",
            "example": ["17724793080269856"]
          },
          "stream_names": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Human-readable stream names corresponding to stream_ids",
            "example": ["Bloomberg"]
          },
          "matched_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this manifest was routed to the stream",
            "example": "2026-03-18T14:22:00Z"
          },
          "source": {
            "type": "object",
            "description": "Source metadata. All keys always present (null if unknown).",
            "required": [
              "record_title",
              "source_url",
              "source_published_date",
              "synorb_ingested_at",
              "source_name",
              "source_type",
              "media_format",
              "claim_type",
              "author",
              "record_version"
            ],
            "properties": {
              "record_title": {
                "type": "string",
                "nullable": true,
                "example": "OpenAI Announces GPT-5 Architecture"
              },
              "source_url": {
                "type": "string",
                "format": "uri",
                "nullable": true,
                "example": "https://openai.com/blog/gpt-5-architecture"
              },
              "source_published_date": {
                "type": "string",
                "format": "date",
                "nullable": true,
                "example": "2026-03-18"
              },
              "synorb_ingested_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "example": "2026-03-18T14:22:00Z"
              },
              "source_name": {
                "type": "string",
                "nullable": true,
                "example": "OpenAI Blog"
              },
              "source_type": {
                "type": "string",
                "enum": [
                  "person",
                  "organization",
                  "data"
                ],
                "nullable": true
              },
              "media_format": {
                "type": "string",
                "enum": [
                  "text",
                  "audio",
                  "video",
                  "social",
                  "data",
                  "transcript",
                  "regulatory"
                ],
                "nullable": true
              },
              "claim_type": {
                "type": "string",
                "enum": [
                  "publication",
                  "announcement",
                  "disclosure",
                  "remarks",
                  "data",
                  "analysis",
                  "event"
                ],
                "nullable": true
              },
              "author": {
                "type": "string",
                "nullable": true
              },
              "record_version": {
                "type": "integer",
                "nullable": true
              },
              "source_channel_ids": {
                "type": "array",
                "items": { "type": "string" },
                "nullable": true,
                "description": "Source channel IDs that produced this record",
                "example": ["17732516384529123"]
              },
              "source_channel_display": {
                "type": "string",
                "nullable": true,
                "description": "Human-readable source channel name",
                "example": "Federal Reserve Bank of St. Louis"
              }
            }
          },
          "signal": {
            "type": "object",
            "nullable": true,
            "description": "Structured claims extraction. Always present at all plans. All keys always present (null if unavailable).",
            "required": [
              "story_id",
              "headline",
              "summary",
              "body",
              "sentiment",
              "significance",
              "version",
              "reading_time_minutes",
              "claim_count"
            ],
            "properties": {
              "story_id": {
                "type": "string",
                "nullable": true,
                "description": "Signal story ID"
              },
              "headline": {
                "type": "string",
                "nullable": true
              },
              "summary": {
                "type": "string",
                "nullable": true
              },
              "body": {
                "type": "object",
                "nullable": true,
                "description": "Structured signal body containing claims, entity_details, topics, and domain_classification",
                "properties": {
                  "claims": {
                    "type": "array",
                    "description": "15-50 atomic assertions extracted from the source",
                    "items": {
                      "type": "object"
                    }
                  },
                  "entity_details": {
                    "type": "array",
                    "nullable": true,
                    "description": "Resolved tags for the entire signal. Array of objects, each with tag_type and tag_value.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "tag_type": {
                          "type": "string",
                          "enum": ["Organization", "Person", "Place", "Topic"]
                        },
                        "tag_value": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "topics": {
                    "type": "array",
                    "nullable": true,
                    "items": { "type": "string" },
                    "description": "Resolved topic names"
                  },
                  "domain_classification": {
                    "type": "object",
                    "nullable": true,
                    "description": "Domain classification",
                    "properties": {
                      "home_domain": { "type": "string" },
                      "cross_domains": { "type": "array", "items": { "type": "string" } }
                    }
                  }
                }
              },
              "sentiment": {
                "type": "string",
                "enum": [
                  "positive",
                  "negative",
                  "neutral",
                  "mixed",
                  "indeterminate"
                ],
                "nullable": true
              },
              "significance": {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high"
                ],
                "nullable": true
              },
              "version": {
                "type": "integer",
                "nullable": true
              },
              "reading_time_minutes": {
                "type": "number",
                "nullable": true
              },
              "claim_count": {
                "type": "integer",
                "nullable": true
              }
            }
          },
          "brief": {
            "type": "object",
            "description": "Structured narrative. Always present. Full content at all plans. On plans without this access, all keys present with value 'Requires Startup plan or higher'.",
            "required": [
              "story_id",
              "headline",
              "summary",
              "body",
              "sentiment",
              "significance",
              "version",
              "reading_time_minutes",
              "key_points_count",
              "quote_count"
            ],
            "properties": {
              "story_id": {
                "type": "string",
                "nullable": true
              },
              "headline": {
                "type": "string",
                "nullable": true
              },
              "summary": {
                "type": "string",
                "nullable": true
              },
              "body": {
                "type": "object",
                "nullable": true,
                "description": "Structured brief body containing key_insights, notable_quotes, entity_details, topics, and domain_classification",
                "properties": {
                  "key_insights": {
                    "type": "array",
                    "items": { "type": "string" },
                    "description": "3-4 key takeaways ordered by importance"
                  },
                  "notable_quotes": {
                    "type": "array",
                    "description": "Direct quotes from the source",
                    "items": {
                      "type": "object",
                      "properties": {
                        "text": { "type": "string" },
                        "speaker": { "type": "string" },
                        "context": { "type": "string" }
                      }
                    }
                  },
                  "entity_details": {
                    "type": "array",
                    "nullable": true,
                    "description": "Resolved tags. Array of objects, each with tag_type and tag_value.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "tag_type": {
                          "type": "string",
                          "enum": ["Organization", "Person", "Place", "Topic"]
                        },
                        "tag_value": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "topics": {
                    "type": "array",
                    "nullable": true,
                    "items": { "type": "string" },
                    "description": "Resolved topic names"
                  },
                  "domain_classification": {
                    "type": "object",
                    "nullable": true,
                    "description": "Domain classification",
                    "properties": {
                      "home_domain": { "type": "string" },
                      "cross_domains": { "type": "array", "items": { "type": "string" } }
                    }
                  },
                  "actionable_takeaways": {
                    "type": "array",
                    "items": { "type": "string" },
                    "description": "Actionable recommendations (audio manifests only)"
                  },
                  "guest_details": {
                    "type": "array",
                    "description": "Guest information (audio manifests only)",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": { "type": "string" },
                        "title": { "type": "string" },
                        "affiliation": { "type": "string" }
                      }
                    }
                  },
                  "cross_promotion": {
                    "type": "array",
                    "items": { "type": "string" },
                    "description": "Mentions of other shows/products/platforms (audio manifests only)"
                  },
                  "cultural_relevance": {
                    "type": "string",
                    "nullable": true,
                    "description": "Cultural context note (audio manifests only)"
                  }
                }
              },
              "sentiment": {
                "type": "string",
                "enum": [
                  "positive",
                  "negative",
                  "neutral",
                  "mixed",
                  "indeterminate"
                ],
                "nullable": true
              },
              "significance": {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high"
                ],
                "nullable": true
              },
              "version": {
                "type": "integer",
                "nullable": true
              },
              "reading_time_minutes": {
                "type": "number",
                "nullable": true
              },
              "key_points_count": {
                "type": "integer",
                "nullable": true
              },
              "quote_count": {
                "type": "integer",
                "nullable": true
              }
            }
          },
          "record": {
            "type": "object",
            "description": "Full source content. Always present. Full content at Enterprise plans (Enterprise). Below Enterprise, all keys present with value 'Requires Enterprise plan'.",
            "required": [
              "record_id",
              "title",
              "url",
              "source_published_date",
              "source_name",
              "source_type",
              "media_format",
              "claim_type",
              "content",
              "extra_data"
            ],
            "properties": {
              "record_id": {
                "type": "string",
                "nullable": true,
                "description": "Record ID"
              },
              "title": {
                "type": "string",
                "nullable": true
              },
              "url": {
                "type": "string",
                "format": "uri",
                "nullable": true
              },
              "source_published_date": {
                "type": "string",
                "format": "date",
                "nullable": true
              },
              "source_name": {
                "type": "string",
                "nullable": true
              },
              "source_type": {
                "type": "string",
                "nullable": true
              },
              "media_format": {
                "type": "string",
                "nullable": true
              },
              "claim_type": {
                "type": "string",
                "nullable": true
              },
              "content": {
                "type": "string",
                "description": "Full ingested content text"
              },
              "extra_data": {
                "type": "object",
                "nullable": true,
                "description": "Additional metadata (varies by source type)"
              },
              "record_version": {
                "type": "integer",
                "nullable": true,
                "description": "Record version number"
              }
            }
          }
        }
      },
      "DigestSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "17724272565117011"
          },
          "name": {
            "type": "string",
            "example": "AI Policy Watch"
          },
          "slug": {
            "type": "string",
            "example": "ai-policy-watch"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "stream_count": {
            "type": "integer",
            "example": 12
          },
          "is_active": {
            "type": "boolean",
            "example": true
          },
          "created_on": {
            "type": "string",
            "format": "date-time"
          },
          "updated_on": {
            "type": "string",
            "format": "date-time"
          },
          "added_on": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When this digest was added to the org (for Synorb digests)"
          },
          "digest_type": {
            "type": "string",
            "enum": [
              "user",
              "synorb"
            ],
            "description": "'user' = org-built (included in plan), 'synorb' = pre-curated ($5/mo on lower tiers)"
          },
          "access_type": {
            "type": "string",
            "enum": [
              "included",
              "subscribed"
            ],
            "nullable": true,
            "description": "How this digest was accessed (for Synorb digests)"
          },
          "has_dynamic_filter": {
            "type": "boolean",
            "description": "Whether this digest uses a filter_spec for dynamic stream resolution"
          }
        }
      },
      "FilterSpec": {
        "type": "object",
        "description": "Dynamic filter rules for digest stream resolution. Combine rules with AND or OR logic.",
        "properties": {
          "rules": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "dimension": {
                  "type": "string",
                  "enum": [
                    "topic",
                    "tag",
                    "domain",
                    "source",
                    "source_type",
                    "claim_type",
                    "media_format"
                  ],
                  "description": "Filter dimension"
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Values to match (OR within dimension)"
                }
              },
              "required": [
                "dimension",
                "values"
              ]
            }
          },
          "combine": {
            "type": "string",
            "enum": [
              "AND",
              "OR"
            ],
            "default": "AND",
            "description": "How to combine rules across dimensions"
          }
        },
        "example": {
          "rules": [
            {
              "dimension": "domain",
              "values": [
                "engineering-technology"
              ]
            },
            {
              "dimension": "source_type",
              "values": [
                "organization"
              ]
            }
          ],
          "combine": "AND"
        }
      },
      "Tag": {
        "type": "object",
        "description": "Synorb tag catalog entry \u00e2\u20ac\u201d a resolved entity (person, organization, place, topic, or data)",
        "properties": {
          "tag_id": {
            "type": "string",
            "description": "Tag ID (unique ID string)",
            "example": "17724793080269856"
          },
          "canonical_name": {
            "type": "string",
            "example": "Tesla Inc"
          },
          "tag_type": {
            "type": "string",
            "enum": [
              "person",
              "organization",
              "place",
              "topic",
              "data"
            ],
            "example": "organization"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "Tesla",
              "TSLA",
              "Tesla Motors"
            ]
          },
          "claim_count": {
            "type": "integer",
            "description": "Number of claims referencing this tag",
            "example": 142
          },
          "relevance": {
            "type": "number",
            "nullable": true,
            "description": "Similarity score (0-1) when using search query. Null when browsing without search.",
            "example": 0.85
          }
        }
      },
      "Topic": {
        "type": "object",
        "description": "Synorb topic catalog entry \u00e2\u20ac\u201d a thematic category",
        "properties": {
          "id": {
            "type": "string",
            "example": "17724793080269900"
          },
          "name": {
            "type": "string",
            "example": "Artificial Intelligence"
          },
          "domain": {
            "type": "string",
            "example": "engineering-technology"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "AI",
              "machine learning"
            ]
          }
        }
      },
      "Sync": {
        "type": "object",
        "description": "A sync mapping between a Synorb object and a customer's internal identifier",
        "properties": {
          "id": {
            "type": "string",
            "description": "Sync ID",
            "example": "42"
          },
          "org_id": {
            "type": "string",
            "description": "Organization ID",
            "example": "17724793080269856"
          },
          "object_type": {
            "type": "string",
            "enum": [
              "tag",
              "topic",
              "stream"
            ],
            "example": "tag"
          },
          "object_id": {
            "type": "string",
            "example": "17724793080269856"
          },
          "synorb_name": {
            "type": "string",
            "description": "Canonical Synorb name for the synced object",
            "example": "Tesla Inc"
          },
          "external_id": {
            "type": "string",
            "description": "Customer's internal identifier",
            "example": "ticker:TSLA"
          },
          "external_name": {
            "type": "string",
            "description": "Customer's internal display name",
            "example": "Tesla"
          },
          "labels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "portfolio",
              "tech"
            ]
          },
          "is_active": {
            "type": "boolean",
            "example": true
          },
          "bound_via": {
            "type": "string",
            "enum": [
              "mcp",
              "api",
              "sdk"
            ],
            "example": "api"
          },
          "created_on": {
            "type": "string",
            "format": "date-time"
          },
          "updated_on": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "Standard error response. HTTP status code is also in the response status line.",
        "properties": {
          "detail": {
            "type": "string",
            "description": "Human-readable error message",
            "example": "Stream 12345 not found"
          }
        },
        "required": [
          "detail"
        ]
      },
      "AccountResponse": {
        "type": "object",
        "description": "Full account profile returned by GET /account",
        "properties": {
          "org": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "org_type": {
                "type": "string",
                "enum": [
                  "individual",
                  "startup",
                  "enterprise"
                ]
              },
              "contact_email": {
                "type": "string"
              },
              "is_active": {
                "type": "boolean"
              },
              "created_on": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "subscription": {
            "$ref": "#/components/schemas/AccountSubscription"
          },
          "users": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string"
                },
                "role": {
                  "type": "string"
                },
                "is_active": {
                  "type": "boolean"
                },
                "has_active_key": {
                  "type": "boolean"
                },
                "created_on": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          },
          "mcp_connector": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "config": {
                "type": "object"
              },
              "docs": {
                "type": "string"
              }
            }
          }
        }
      },
      "AccountSubscription": {
        "type": "object",
        "description": "Subscription summary shown in account and subscription responses",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "active",
              "canceled",
              "past_due",
              "trialing"
            ]
          },
          "plan_display_name": {
            "type": "string"
          },
          "billing_cycle": {
            "type": "string"
          },
          "endpoint_mcp": {
            "type": "boolean"
          },
          "endpoint_api": {
            "type": "boolean"
          },
          "endpoint_s3": {
            "type": "boolean"
          },
          "endpoint_websocket": {
            "type": "boolean"
          },
          "endpoint_webhook": {
            "type": "boolean"
          },
          "endpoint_digests": {
            "type": "boolean"
          }
        }
      },
      "DigestDetail": {
        "type": "object",
        "description": "Digest detail returned by GET /digests/{id}",
        "properties": {
          "digest": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "digest_type": {
                "type": "string",
                "enum": [
                  "user",
                  "synorb"
                ]
              },
              "is_active": {
                "type": "boolean"
              },
              "has_dynamic_filter": {
                "type": "boolean"
              },
              "stream_count": {
                "type": "integer"
              },
              "created_on": {
                "type": "string",
                "format": "date-time"
              },
              "updated_on": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "streams": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "home_domain": {
                  "type": "string"
                },
                "stream_class": {
                  "type": "string"
                },
                "manifests_last24h": {
                  "type": "integer"
                },
                "manifests_last7d": {
                  "type": "integer"
                },
                "manifests_last30d": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "parameters": {
      "streamId": {
        "name": "stream_id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "integer",
          "format": "int64"
        },
        "description": "Stream ID (unique ID string)"
      },
      "publishedDateFrom": {
        "name": "published_date_from",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date"
        },
        "description": "Start date filter (YYYY-MM-DD). Defaults to your plan's earliest allowed date.",
        "example": "2026-03-01"
      },
      "publishedDateTo": {
        "name": "published_date_to",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date"
        },
        "description": "End date filter (YYYY-MM-DD). Defaults to today.",
        "example": "2026-03-19"
      },
      "page": {
        "name": "page",
        "in": "query",
        "schema": {
          "type": "integer",
          "default": 0,
          "minimum": 0
        },
        "description": "Page number (0-indexed). Both `page` and `page_num` are accepted. Use `pagination.next` from the response to get the next page."
      },
      "pageSize": {
        "name": "page_size",
        "in": "query",
        "schema": {
          "type": "integer",
          "default": 50,
          "minimum": 1,
          "maximum": 200
        },
        "description": "Results per page (max 200)"
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Authentication failed \u00e2\u20ac\u201d invalid or missing api-key/secret headers",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "detail": "Invalid API key or secret"
            }
          }
        }
      },
      "PlanGated": {
        "description": "Your plan does not include this feature. Upgrade at https://synorb.com/pricing",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "detail": "This feature requires a plan upgrade"
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "detail": "Stream 12345 not found"
            }
          }
        }
      },
      "RateLimited": {
        "description": "Too many requests \u00e2\u20ac\u201d slow down",
        "headers": {
          "Retry-After": {
            "schema": {
              "type": "integer"
            },
            "description": "Seconds to wait before retrying"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "detail": "Rate limit exceeded. Try again in 60 seconds."
            }
          }
        }
      }
    },
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "api-key",
        "description": "Your Synorb API key. Get free credentials at https://synorb.com/connect"
      },
      "apiSecret": {
        "type": "apiKey",
        "in": "header",
        "name": "secret",
        "description": "Your Synorb API secret. Get free credentials at https://synorb.com/connect"
      },
      "accessToken": {
        "type": "apiKey",
        "in": "header",
        "name": "access_token",
        "description": "MCP-only token. NOT accepted on the REST API \u00e2\u20ac\u201d use only with MCP server (mcp.synorb.com) or WebSocket firehose (ws.synorb.com). Get from https://synorb.com/connect"
      }
    }
  },
  "security": [
    {
      "apiKey": [],
      "apiSecret": []
    }
  ],
  "tags": [
    {
      "name": "Account",
      "description": "Organization profile and quota"
    },
    {
      "name": "Streams",
      "description": "Browse streams and fetch manifests (signal + brief + record triplets)"
    },
    {
      "name": "Platform",
      "description": "Granular access by manifest ID. Platform/Firehose plans only"
    },
    {
      "name": "Digest Builder",
      "description": "Custom groupings of manifests. Pro Developer | Startup | Enterprise"
    },
    {
      "name": "Synorb Digests",
      "description": "Pre-curated intelligence bundles. Free on Startup/Enterprise"
    },
    {
      "name": "Ontology Sync",
      "description": "Map Synorb tags and topics to your internal identifiers. Enterprise"
    },
    {
      "name": "Webhooks",
      "description": "Push notifications when events happen in your streams. Startup | Enterprise"
    },
    {
      "name": "S3 Export",
      "description": "Bulk export via presigned S3 URLs. Startup | Enterprise"
    }
  ]
}