components:
  schemas:
    AddFeedRequest:
      description: Request model for adding a feed.
      properties:
        active:
          default: true
          title: Active
          type: boolean
        domain_discovery_settings:
          anyOf:
          - $ref: '#/components/schemas/DomainDiscoverySettings'
          - type: 'null'
        url:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      required:
      - url
      title: AddFeedRequest
      type: object
    AddFeedResponse:
      description: Response model for adding a feed.
      properties:
        active:
          title: Active
          type: boolean
        domain_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain Id
        is_valid:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Valid
        message:
          title: Message
          type: string
        source_id:
          title: Source Id
          type: string
        url:
          title: Url
          type: string
      required:
      - source_id
      - url
      - domain_id
      - active
      - is_valid
      - message
      title: AddFeedResponse
      type: object
    AddHtmlRequest:
      description: Request model for adding an HTML page source.
      properties:
        active:
          default: true
          title: Active
          type: boolean
        domain_discovery_settings:
          anyOf:
          - $ref: '#/components/schemas/DomainDiscoverySettings'
          - type: 'null'
        url:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      required:
      - url
      title: AddHtmlRequest
      type: object
    AddHtmlResponse:
      description: Response model for adding an HTML page source.
      properties:
        active:
          title: Active
          type: boolean
        domain_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain Id
        is_valid:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Valid
        message:
          title: Message
          type: string
        source_id:
          title: Source Id
          type: string
        url:
          title: Url
          type: string
      required:
      - source_id
      - url
      - domain_id
      - active
      - is_valid
      - message
      title: AddHtmlResponse
      type: object
    AddSitemapRequest:
      description: Request model for adding a sitemap.
      properties:
        active:
          default: true
          title: Active
          type: boolean
        domain_discovery_settings:
          anyOf:
          - $ref: '#/components/schemas/DomainDiscoverySettings'
          - type: 'null'
        url:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      required:
      - url
      title: AddSitemapRequest
      type: object
    AddSitemapResponse:
      description: Response model for adding a sitemap.
      properties:
        active:
          title: Active
          type: boolean
        domain_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain Id
        is_valid:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Valid
        message:
          title: Message
          type: string
        source_id:
          title: Source Id
          type: string
        url:
          title: Url
          type: string
      required:
      - source_id
      - url
      - domain_id
      - active
      - is_valid
      - message
      title: AddSitemapResponse
      type: object
    AllowFilters:
      description: Filters for content that is allowed.
      properties:
        adult:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Adult
        premium:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Premium
      title: AllowFilters
      type: object
    AwsSnsTarget:
      properties:
        arn:
          title: Arn
          type: string
      required:
      - arn
      title: AwsSnsTarget
      type: object
    Body_domain_bulk_import_v1_domains_bulk_import_post:
      properties:
        file:
          format: binary
          title: File
          type: string
      required:
      - file
      title: Body_domain_bulk_import_v1_domains_bulk_import_post
      type: object
    Body_feed_bulk_import_v1_sources_feeds_bulk_import_post:
      properties:
        file:
          format: binary
          title: File
          type: string
      required:
      - file
      title: Body_feed_bulk_import_v1_sources_feeds_bulk_import_post
      type: object
    Body_html_source_bulk_import_v1_sources_html_bulk_import_post:
      properties:
        file:
          format: binary
          title: File
          type: string
      required:
      - file
      title: Body_html_source_bulk_import_v1_sources_html_bulk_import_post
      type: object
    Body_integrations_bulk_import_v1_domains__domain__integrations_bulk_import_post:
      properties:
        file:
          format: binary
          title: File
          type: string
      required:
      - file
      title: Body_integrations_bulk_import_v1_domains__domain__integrations_bulk_import_post
      type: object
    Body_json_api_bulk_import_v1_sources_apis_json_bulk_import_post:
      properties:
        file:
          format: binary
          title: File
          type: string
      required:
      - file
      title: Body_json_api_bulk_import_v1_sources_apis_json_bulk_import_post
      type: object
    Body_page_bulk_import_v1_pages_bulk_import_post:
      properties:
        file:
          format: binary
          title: File
          type: string
      required:
      - file
      title: Body_page_bulk_import_v1_pages_bulk_import_post
      type: object
    Body_sitemap_bulk_import_v1_sources_sitemaps_bulk_import_post:
      properties:
        file:
          format: binary
          title: File
          type: string
      required:
      - file
      title: Body_sitemap_bulk_import_v1_sources_sitemaps_bulk_import_post
      type: object
    BooleanSearchRequest:
      description: Request model for boolean (Lucene syntax) search endpoint.
      properties:
        content_type:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
          - type: 'null'
          description: Filter by content type(s), e.g., 'article' or ['article', 'tutorial']
          title: Content Type
        culture:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
          - type: 'null'
          description: Filter by culture code(s), e.g., 'en-US' or ['en-US', 'en-GB']
          title: Culture
        domain:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
          - type: 'null'
          description: Filter by domain(s), e.g., 'example.com' or ['example.com',
            'test.com']
          title: Domain
        include_adult:
          default: false
          description: 'Whether to include adult content (default: false, filters
            out adult content)'
          title: Include Adult
          type: boolean
        language:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
          - type: 'null'
          description: Filter by language code(s), e.g., 'en' or ['en', 'es']
          title: Language
        published_after:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: Only return content published after this date (ISO 8601 format)
          title: Published After
        publisher:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
          - type: 'null'
          description: Filter by publisher name(s)
          title: Publisher
        query:
          description: Lucene query string (supports AND, OR, NOT, field:value, etc.)
          minLength: 1
          title: Query
          type: string
        size:
          default: 50
          description: Number of results to return (1-100)
          maximum: 100.0
          minimum: 1.0
          title: Size
          type: integer
      required:
      - query
      title: BooleanSearchRequest
      type: object
    BooleanSearchResponse:
      description: Response model for boolean search endpoint.
      properties:
        count:
          description: Number of results returned
          title: Count
          type: integer
        filters_applied:
          additionalProperties: true
          description: Summary of filters that were applied to the search
          title: Filters Applied
          type: object
        query:
          description: The original query string
          title: Query
          type: string
        results:
          description: List of matching pages
          items:
            $ref: '#/components/schemas/content__api__v1__models__indexes__SearchResult__1'
          title: Results
          type: array
        total_hits:
          description: Total number of matching documents
          title: Total Hits
          type: integer
      required:
      - query
      - count
      - total_hits
      title: BooleanSearchResponse
      type: object
    DeactivateSourcesResponse:
      description: Response model for PUT /v1/domains/{domain}/sources/deactivate-all
      properties:
        deactivated_count:
          title: Deactivated Count
          type: integer
        domain:
          title: Domain
          type: string
        message:
          title: Message
          type: string
        skipped_count:
          title: Skipped Count
          type: integer
      required:
      - domain
      - deactivated_count
      - skipped_count
      - message
      title: DeactivateSourcesResponse
      type: object
    DiscoverySettingsPutRequest:
      additionalProperties: false
      description: 'Request model for PUT /v1/domains/{domain}/discovery-settings.


        Same shape as DomainDiscoverySettings (flat fields); omitted fields are

        left unchanged, explicit null clears the override.'
      properties:
        discover_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Pages
        discover_sources:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Sources
        index_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Index Pages
      title: DiscoverySettingsPutRequest
      type: object
    DiscoverySettingsResponse:
      description: Response model for discovery-settings endpoints.
      properties:
        discover_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Pages
        discover_sources:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Sources
        domain:
          title: Domain
          type: string
        index_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Index Pages
        last_updated:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Updated
      required:
      - domain
      title: DiscoverySettingsResponse
      type: object
    DomainConfigResponse:
      description: Response model for GET /v1/domains/{domain}/config
      properties:
        config:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Config
        domain:
          title: Domain
          type: string
        last_updated:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Updated
      required:
      - domain
      title: DomainConfigResponse
      type: object
    DomainDiscoverySettings:
      additionalProperties: false
      description: 'Per-domain discovery/indexing toggles.


        Shared model used wherever a request can optionally set discovery settings

        for a domain (POST /v1/domains/{domain}, POST /v1/sources/*, POST /v1/pages).

        All fields optional: omitted fields are not modified; null explicitly clears

        an override.'
      properties:
        discover_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Pages
        discover_sources:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Sources
        index_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Index Pages
      title: DomainDiscoverySettings
      type: object
    DomainGet:
      properties:
        culture:
          anyOf:
          - type: string
          - type: 'null'
          title: Culture
        discover_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Pages
        discover_sources:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Discover Sources
        domain:
          title: Domain
          type: string
        id:
          format: uuid
          title: Id
          type: string
        index_pages:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Index Pages
        influence:
          anyOf:
          - type: number
          - type: 'null'
          title: Influence
        is_adult:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Adult
        is_snippable:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Snippable
        is_snippable_with_proxy:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Snippable With Proxy
        language:
          anyOf:
          - type: string
          - type: 'null'
          title: Language
        popularity:
          anyOf:
          - type: number
          - type: 'null'
          title: Popularity
        title:
          anyOf:
          - type: string
          - type: 'null'
          title: Title
      required:
      - id
      - domain
      title: DomainGet
      type: object
    DomainIntegrationsGetItem:
      properties:
        active:
          default: true
          title: Active
          type: boolean
        allow_user_edit_deactivates_sources:
          default: true
          title: Allow User Edit Deactivates Sources
          type: boolean
        deactivates_other:
          default: true
          title: Deactivates Other
          type: boolean
        deactivates_sources:
          default: true
          title: Deactivates Sources
          type: boolean
        integration_name:
          title: Integration Name
          type: string
        is_default:
          default: false
          title: Is Default
          type: boolean
        last_complete:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Complete
        last_scheduled:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Scheduled
        last_started:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Started
      required:
      - integration_name
      title: DomainIntegrationsGetItem
      type: object
    DomainIntegrationsPutItem:
      properties:
        active:
          default: true
          title: Active
          type: boolean
        deactivates_sources:
          default: true
          title: Deactivates Sources
          type: boolean
        integration_name:
          title: Integration Name
          type: string
        is_default:
          default: false
          title: Is Default
          type: boolean
      required:
      - integration_name
      title: DomainIntegrationsPutItem
      type: object
    DomainPost:
      properties:
        domain:
          title: Domain
          type: string
        id:
          format: uuid
          title: Id
          type: string
      required:
      - id
      - domain
      title: DomainPost
      type: object
    DomainPostRequestBody:
      description: Optional body for POST /v1/domains/{domain}. Fully optional.
      properties:
        domain_discovery_settings:
          anyOf:
          - $ref: '#/components/schemas/DomainDiscoverySettings'
          - type: 'null'
      title: DomainPostRequestBody
      type: object
    DomainRobotsResponse:
      description: Response model for GET /v1/domains/{domain}/robots
      properties:
        domain:
          title: Domain
          type: string
        exists:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Exists
        last_checked:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Checked
        permissions:
          default: []
          items:
            $ref: '#/components/schemas/RobotAgentPermission'
          title: Permissions
          type: array
        robots_txt_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Robots Txt Url
        sitemaps:
          default: []
          items:
            type: string
          title: Sitemaps
          type: array
      required:
      - domain
      title: DomainRobotsResponse
      type: object
    DomainSourceGet:
      description: Response model for a single source associated with a domain
      properties:
        active:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Active
        failure_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Failure Count
        failure_status_code:
          anyOf:
          - type: string
          - type: 'null'
          title: Failure Status Code
        id:
          format: uuid
          title: Id
          type: string
        is_valid:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Valid
        last_processed:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Processed
        last_scheduled:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Scheduled
        type:
          title: Type
          type: string
        url:
          title: Url
          type: string
      required:
      - id
      - type
      - url
      title: DomainSourceGet
      type: object
    DomainSourcesResponse:
      description: Response model for GET /v1/domains/{domain}/sources
      properties:
        domain:
          title: Domain
          type: string
        sources:
          items:
            $ref: '#/components/schemas/DomainSourceGet'
          title: Sources
          type: array
      required:
      - domain
      - sources
      title: DomainSourcesResponse
      type: object
    DomainSubdomainsResponse:
      description: Response model for GET /v1/domains/{domain}/subdomains
      properties:
        domain:
          title: Domain
          type: string
        subdomains:
          items:
            $ref: '#/components/schemas/DomainGet'
          title: Subdomains
          type: array
      required:
      - domain
      - subdomains
      title: DomainSubdomainsResponse
      type: object
    ErrorResponseBody:
      properties:
        error:
          title: Error
          type: string
      required:
      - error
      title: ErrorResponseBody
      type: object
    FeedResult:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        last_fetch_status_code:
          anyOf:
          - type: integer
          - type: 'null'
          title: Last Fetch Status Code
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
        url:
          title: Url
          type: string
      required:
      - id
      - url
      - name
      title: FeedResult
      type: object
    Filters:
      description: Comprehensive filter configuration.
      properties:
        allow:
          anyOf:
          - $ref: '#/components/schemas/AllowFilters'
          - type: 'null'
        exclude:
          anyOf:
          - $ref: '#/components/schemas/ModedFilters'
          - type: 'null'
        only:
          anyOf:
          - $ref: '#/components/schemas/ModedFilters'
          - type: 'null'
        require:
          anyOf:
          - $ref: '#/components/schemas/RequireFilters'
          - type: 'null'
      title: Filters
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    HtmlSourceResult:
      description: Response model for retrieving an HTML page source.
      properties:
        active:
          title: Active
          type: boolean
        desired_next_poll:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Desired Next Poll
        domain_id:
          anyOf:
          - format: uuid
            type: string
          - type: 'null'
          title: Domain Id
        failure_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Failure Count
        failure_status_code:
          anyOf:
          - type: string
          - type: 'null'
          title: Failure Status Code
        id:
          format: uuid
          title: Id
          type: string
        is_valid:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Valid
        last_processed:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Processed
        url:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      required:
      - id
      - url
      - domain_id
      - active
      - is_valid
      - last_processed
      - desired_next_poll
      - failure_count
      - failure_status_code
      title: HtmlSourceResult
      type: object
    JqMonitor:
      properties:
        array_prop:
          title: Array Prop
          type: string
        target:
          $ref: '#/components/schemas/SourceMonitorTarget'
        url_prop:
          title: Url Prop
          type: string
      required:
      - target
      - array_prop
      - url_prop
      title: JqMonitor
      type: object
    LiveFeedItem:
      description: A single item in the livefeed.
      properties:
        canonical_url:
          anyOf:
          - type: string
          - type: 'null'
          description: Canonical URL of the page
          title: Canonical Url
        created_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the article was indexed (UTC)
          title: Created At
        date_published:
          anyOf:
          - format: date
            type: string
          - type: 'null'
          description: Publication date
          title: Date Published
        domain:
          anyOf:
          - type: string
          - type: 'null'
          description: Domain name
          title: Domain
        id:
          description: Page ID
          title: Id
          type: string
        publisher:
          anyOf:
          - type: string
          - type: 'null'
          description: Publisher name
          title: Publisher
        summary:
          anyOf:
          - type: string
          - type: 'null'
          description: Page summary/excerpt
          title: Summary
        title:
          default: ''
          description: Page title
          title: Title
          type: string
        type:
          default: Unknown
          description: Content type
          title: Type
          type: string
      required:
      - id
      title: LiveFeedItem
      type: object
    LiveFeedResponse:
      description: Response model for the livefeed endpoint.
      properties:
        count:
          description: Number of results returned
          title: Count
          type: integer
        results:
          description: List of recently indexed articles
          items:
            $ref: '#/components/schemas/LiveFeedItem'
          title: Results
          type: array
        since:
          description: The since cutoff used for this query (UTC)
          format: date-time
          title: Since
          type: string
      required:
      - count
      - since
      title: LiveFeedResponse
      type: object
    ModedFilters:
      description: Filters that can be applied in 'only' or 'exclude' mode.
      properties:
        domains:
          anyOf:
          - items:
              examples:
              - example.com
              maxLength: 253
              type: string
            type: array
          - type: 'null'
          title: Domains
        libraries:
          anyOf:
          - items:
              examples:
              - dow-jones
              maxLength: 50
              type: string
            type: array
          - type: 'null'
          title: Libraries
        phrases:
          anyOf:
          - items:
              examples:
              - 401k
              type: string
            type: array
          - type: 'null'
          title: Phrases
      title: ModedFilters
      type: object
    MustMatchExact:
      description: "Enum controlling how strictly search results must match the query.\n\
        \n- AUTO: Smart behavior based on word count:\n    * 2 words: treat as exact\
        \ phrase\n    * 3-5 words: all words must be present\n    * >5 words: no strict\
        \ matching requirement\n- WORDS: ALL words from the query must be present\
        \ in results\n- PHRASE: Results must contain the exact phrase\n- NO: No strict\
        \ matching requirement (standard search behavior)"
      enum:
      - auto
      - words
      - phrase
      - 'no'
      title: MustMatchExact
      type: string
    PageGet:
      properties:
        canonical_url:
          title: Canonical Url
          type: string
        culture:
          anyOf:
          - type: string
          - type: 'null'
          title: Culture
        date:
          anyOf:
          - format: date
            type: string
          - type: 'null'
          title: Date
        domain:
          $ref: '#/components/schemas/DomainGet'
        excerpt:
          anyOf:
          - type: string
          - type: 'null'
          title: Excerpt
        id:
          format: uuid
          title: Id
          type: string
        image:
          anyOf:
          - format: uri
            maxLength: 2083
            minLength: 1
            type: string
          - type: 'null'
          title: Image
        image_valid:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Image Valid
        is_adult:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Adult
        is_snippable_with_proxy:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Snippable With Proxy
        is_snippable_without_proxy:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Snippable Without Proxy
        language:
          anyOf:
          - type: string
          - type: 'null'
          title: Language
        shareability:
          anyOf:
          - type: number
          - type: 'null'
          title: Shareability
        title:
          title: Title
          type: string
        ttl:
          default: 720
          title: Ttl
          type: integer
      required:
      - id
      - canonical_url
      - title
      - excerpt
      - image
      - date
      - domain
      - language
      - culture
      - shareability
      - is_adult
      - is_snippable_without_proxy
      - is_snippable_with_proxy
      - image_valid
      title: PageGet
      type: object
    PagePost:
      properties:
        domain_discovery_settings:
          anyOf:
          - $ref: '#/components/schemas/DomainDiscoverySettings'
          - type: 'null'
        ttl:
          default: 720
          title: Ttl
          type: integer
        url:
          title: Url
          type: string
      required:
      - url
      title: PagePost
      type: object
    PagePostResponse:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        ttl:
          default: 720
          title: Ttl
          type: integer
        url:
          title: Url
          type: string
      required:
      - id
      - url
      title: PagePostResponse
      type: object
    ParsedSourcePageResult:
      description: Response model for a discovered page from a parsed source.
      properties:
        created:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the page was discovered
          title: Created
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: Page metadata
          title: Metadata
        publisher:
          anyOf:
          - type: string
          - type: 'null'
          description: Publisher name if available
          title: Publisher
        updated:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the page was last updated
          title: Updated
        url:
          description: The page URL
          title: Url
          type: string
      required:
      - url
      title: ParsedSourcePageResult
      type: object
    ParsedSourceSourceResult:
      description: Response model for a discovered source from a parsed source.
      properties:
        created:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the source was discovered
          title: Created
        source_type:
          description: Type of source (feed, sitemap, html, etc.)
          title: Source Type
          type: string
        updated:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: When the source was last updated
          title: Updated
        url:
          description: The source URL
          title: Url
          type: string
      required:
      - url
      - source_type
      title: ParsedSourceSourceResult
      type: object
    ParsingConfigGetResponse:
      description: Response model for GET /v1/domains/{domain}/parsing-config
      properties:
        config:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Config
        domain:
          title: Domain
          type: string
        last_updated:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Updated
      required:
      - domain
      title: ParsingConfigGetResponse
      type: object
    ParsingConfigPutRequest:
      description: Request model for PUT /v1/domains/{domain}/parsing-config
      properties:
        config:
          additionalProperties: true
          title: Config
          type: object
      required:
      - config
      title: ParsingConfigPutRequest
      type: object
    ParsingConfigPutResponse:
      description: Response model for PUT /v1/domains/{domain}/parsing-config
      properties:
        config:
          additionalProperties: true
          title: Config
          type: object
        domain:
          title: Domain
          type: string
        last_updated:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Updated
        message:
          title: Message
          type: string
      required:
      - domain
      - config
      - message
      title: ParsingConfigPutResponse
      type: object
    PathMonitor:
      properties:
        path:
          title: Path
          type: string
        target:
          $ref: '#/components/schemas/SourceMonitorTarget'
      required:
      - target
      - path
      title: PathMonitor
      type: object
    RefreshSourceResponse:
      description: Response model for source refresh requests.
      properties:
        last_processed:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Processed
        last_scheduled:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Scheduled
        message:
          title: Message
          type: string
        source_id:
          title: Source Id
          type: string
      required:
      - source_id
      - message
      - last_processed
      - last_scheduled
      title: RefreshSourceResponse
      type: object
    RequireFilters:
      description: Filters for required content attributes.
      properties:
        fields:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: []
          title: Fields
        iframeable:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Iframeable
        image_valid:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Image Valid
        premium:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Premium
        text_length:
          anyOf:
          - type: integer
          - type: 'null'
          title: Text Length
        unpaywalled:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Unpaywalled
        viewable_with_premium:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Viewable With Premium
      title: RequireFilters
      type: object
    RobotAgentPermission:
      description: Permissions for a specific user agent
      properties:
        agent:
          title: Agent
          type: string
        allowed:
          default: []
          items:
            type: string
          title: Allowed
          type: array
        disallowed:
          default: []
          items:
            type: string
          title: Disallowed
          type: array
      required:
      - agent
      title: RobotAgentPermission
      type: object
    SearchQuery:
      description: Comprehensive search query model supporting multiple query types
        and filters.
      properties:
        after:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: After
        culture:
          anyOf:
          - examples:
            - en-US
            - en
            - fr
            - fr-ca
            type: string
          - type: 'null'
          title: Culture
        filters:
          anyOf:
          - $ref: '#/components/schemas/Filters'
          - type: 'null'
        limit:
          anyOf:
          - maximum: 200.0
            minimum: 1.0
            type: integer
          - type: 'null'
          default: 50
          description: Maximum number of results to return (1-200)
          title: Limit
        lucene:
          anyOf:
          - examples:
            - 401k and (finance or investments or "retirement plan")
            maxLength: 256
            type: string
          - type: 'null'
          title: Lucene
        max_distance:
          anyOf:
          - exclusiveMinimum: 0.0
            type: number
          - type: 'null'
          description: Maximum cosine distance for kNN results (0 to 1, where 0 =
            identical). Applies to natural/simple searches with kNN.
          title: Max Distance
        must_match_exact:
          anyOf:
          - $ref: '#/components/schemas/MustMatchExact'
          - type: 'null'
          default: auto
          description: Controls how strictly results must match the query terms
        natural:
          anyOf:
          - examples:
            - investing in 401k for retirement
            maxLength: 256
            type: string
          - type: 'null'
          title: Natural
        similarity:
          anyOf:
          - $ref: '#/components/schemas/SimilarityQuery'
          - type: 'null'
        simple:
          anyOf:
          - examples:
            - 401k
            type: string
          - type: 'null'
          title: Simple
        strict_culture:
          anyOf:
          - type: boolean
          - type: 'null'
          default: false
          title: Strict Culture
      title: SearchQuery
      type: object
    SearchResponse:
      description: Response model for search endpoint.
      properties:
        count:
          description: Number of results returned
          title: Count
          type: integer
        results:
          description: List of matching pages
          items:
            $ref: '#/components/schemas/content__api__v1__models__indexes__SearchResult__2'
          title: Results
          type: array
      required:
      - count
      title: SearchResponse
      type: object
    SelectorMonitor:
      properties:
        path:
          title: Path
          type: string
        target:
          $ref: '#/components/schemas/SourceMonitorTarget'
      required:
      - target
      - path
      title: SelectorMonitor
      type: object
    SimilarPageResult:
      description: Model for a single similar page result.
      properties:
        date_published:
          anyOf:
          - format: date
            type: string
          - type: 'null'
          description: Publication date
          title: Date Published
        domain:
          anyOf:
          - type: string
          - type: 'null'
          description: Domain name
          title: Domain
        fulltext:
          anyOf:
          - type: string
          - type: 'null'
          description: Full text content
          title: Fulltext
        id:
          description: Page ID
          title: Id
          type: string
        image_url:
          anyOf:
          - type: string
          - type: 'null'
          description: URL of the page's primary image
          title: Image Url
        publisher:
          anyOf:
          - type: string
          - type: 'null'
          description: Publisher name
          title: Publisher
        relevance_score:
          description: Similarity score
          title: Relevance Score
          type: number
        summary:
          anyOf:
          - type: string
          - type: 'null'
          description: Page summary/excerpt
          title: Summary
        title:
          description: Page title
          title: Title
          type: string
        type:
          default: Unknown
          description: Content type
          title: Type
          type: string
      required:
      - id
      - title
      - relevance_score
      title: SimilarPageResult
      type: object
    SimilarityQuery:
      description: Similarity query configuration.
      properties:
        max_distance:
          anyOf:
          - exclusiveMinimum: 0.0
            type: number
          - type: 'null'
          title: Max Distance
        points:
          items:
            $ref: '#/components/schemas/SimilarityQueryPoint'
          title: Points
          type: array
      required:
      - points
      title: SimilarityQuery
      type: object
    SimilarityQueryPoint:
      description: A single point in a similarity query.
      properties:
        text:
          anyOf:
          - examples:
            - investing in 401k for retirement
            maxLength: 256
            type: string
          - type: 'null'
          title: Text
        url:
          anyOf:
          - format: uri
            maxLength: 2083
            minLength: 1
            type: string
          - type: 'null'
          title: Url
        weight:
          default: 1.0
          exclusiveMinimum: 0.0
          title: Weight
          type: number
      title: SimilarityQueryPoint
      type: object
    SimilaritySearchRequest:
      description: Request model for similarity search endpoint (legacy).
      properties:
        canonical_url:
          anyOf:
          - type: string
          - type: 'null'
          description: Canonical URL of the article to find similar content for
          title: Canonical Url
        k:
          default: 5
          description: Number of similar articles to return (1-50)
          maximum: 50.0
          minimum: 1.0
          title: K
          type: integer
        page_id:
          anyOf:
          - format: uuid4
            type: string
          - type: 'null'
          description: PageID (UUID4) of the article to find similar content for
          title: Page Id
      title: SimilaritySearchRequest
      type: object
    SimilaritySearchResponse:
      description: Response model for similarity search endpoint.
      properties:
        count:
          description: Number of results returned
          title: Count
          type: integer
        results:
          description: List of similar pages
          items:
            $ref: '#/components/schemas/SimilarPageResult'
          title: Results
          type: array
        source_page_id:
          description: ID of the source page used for similarity search
          title: Source Page Id
          type: string
      required:
      - source_page_id
      - count
      title: SimilaritySearchResponse
      type: object
    SitemapResult:
      properties:
        has_news:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Has News
        id:
          format: uuid
          title: Id
          type: string
        last_checked:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Checked
        last_fetch_status_code:
          anyOf:
          - type: integer
          - type: 'null'
          title: Last Fetch Status Code
        last_publish_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Publish Date
        url:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      required:
      - id
      - url
      - has_news
      - last_checked
      - last_publish_date
      title: SitemapResult
      type: object
    SourceMonitorTarget:
      properties:
        sns:
          anyOf:
          - $ref: '#/components/schemas/AwsSnsTarget'
          - type: 'null'
        webhook:
          anyOf:
          - $ref: '#/components/schemas/WebhookTarget'
          - type: 'null'
      required:
      - webhook
      - sns
      title: SourceMonitorTarget
      type: object
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
      - loc
      - msg
      - type
      title: ValidationError
      type: object
    WebhookTarget:
      properties:
        url:
          title: Url
          type: string
      required:
      - url
      title: WebhookTarget
      type: object
    content__api__v1__models__indexes__SearchResult__1:
      description: Model for a single search result.
      properties:
        canonical_url:
          anyOf:
          - type: string
          - type: 'null'
          description: Canonical URL of the page
          title: Canonical Url
        date_published:
          anyOf:
          - format: date
            type: string
          - type: 'null'
          description: Publication date
          title: Date Published
        domain:
          anyOf:
          - type: string
          - type: 'null'
          description: Domain name
          title: Domain
        fulltext:
          anyOf:
          - type: string
          - type: 'null'
          description: Full text content
          title: Fulltext
        id:
          description: Page ID
          title: Id
          type: string
        publisher:
          anyOf:
          - type: string
          - type: 'null'
          description: Publisher name
          title: Publisher
        relevance_score:
          description: Search relevance score
          title: Relevance Score
          type: number
        summary:
          anyOf:
          - type: string
          - type: 'null'
          description: Page summary/excerpt
          title: Summary
        title:
          description: Page title
          title: Title
          type: string
        type:
          default: Unknown
          description: Content type
          title: Type
          type: string
      required:
      - id
      - title
      - relevance_score
      title: SearchResult
      type: object
    content__api__v1__models__indexes__SearchResult__2:
      description: Model for a single search result.
      properties:
        canonical_url:
          description: Canonical URL of the page
          format: uri
          maxLength: 2083
          minLength: 1
          title: Canonical Url
          type: string
        date_published:
          anyOf:
          - format: date
            type: string
          - type: 'null'
          description: Publication date
          title: Date Published
        domain:
          anyOf:
          - type: string
          - type: 'null'
          description: Domain name
          title: Domain
        id:
          description: Page ID
          title: Id
          type: string
        publisher:
          anyOf:
          - type: string
          - type: 'null'
          description: Publisher name
          title: Publisher
        summary:
          anyOf:
          - type: string
          - type: 'null'
          description: Page summary/excerpt
          title: Summary
        title:
          default: ''
          description: Page title
          title: Title
          type: string
      required:
      - id
      title: SearchResult
      type: object
info:
  description: 'The API Consists of 5 main areas: pages, domains, sources, indexes,
    and monitors. Each one is detailed below.


    ### Pages

    A page is any web page, a page has one canonical url but may have many urls that
    point at it. You can add a page by url and we''ll automatically handle finding
    the canonical. We currently understand HTML web pages but if we support formats
    like PDF in the future it will likely still be a page.


    We track a wide variety of metadata, scores, and other facts about every page.


    ### Domains

    A domain is any domain whether a top-level domain or subdomain. Each domain will
    have different crawling rules and permissions and a collection of sources associated
    with it. When a new domain is added we automatically find new sources for that
    domain. When a page is added we also add the relevant domain.


    ### Sources

    A source is a specific url and any other accompanying data that we can crawl to
    find new pages, domains, or sources. We automatically crawl these on a frequency
    that factors in update frequency, monitors, popularity, and minimum standards
    of service.


    The plan is to support:

    - Feeds (RSS or Atom)

    - Sitemaps (Either regular or index, by default just indexes news but if you monitor
    will add what you monitor as well)

    - JSON APIs (eventually also XML)

    - Pages (by default just finds Feeds but with a monitor added it can also find
    other pages)


    ### Monitors

    Monitors allow you to monitor a source or domain and receive updates when we find
    new content. Usually there will be some sort of filter criteria such as a only
    news, only certain path patterns, or only a certain selector. The second part
    of a monitor is how to alert you with the current options being webhook or SNS.
    Monitors also allow you to ensure that pages we otherwise might not be sure enough
    of to index get indexed.


    ### Indexes

    Indexes allow you to query our records of the internet in a variety of ways. The
    two currently (planned) indexes are text and similarity. Indexes may support one
    or multiple methods of querying. Text supports text queries whether simple keyword
    or Lucene style boolean queries. Similarity takes a url and gives you similar
    articles'
  title: UpContent Content API
  version: 0.0.1
openapi: 3.1.0
paths:
  /health:
    get:
      description: 'Health check endpoint.


        Returns a simple status indicating the service is running.'
      operationId: health_health_get
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
      summary: Health
      tags:
      - Observability
  /v1/domains/bulk/import:
    post:
      description: "Import domains in bulk from a CSV or plain text file.\n\nAccepted\
        \ formats:\n- CSV: `domain` column (required) plus optional boolean columns\n\
        \  `discover_sources`, `discover_pages`, `index_pages`\n  (accepts true/false,\
        \ 1/0, yes/no; blank leaves the default). Discovery\n  columns apply ONLY\
        \ to rows that result in a new domain being created;\n  rows for pre-existing\
        \ domains silently ignore them. Use\n  `PUT /v1/domains/{domain}/discovery-settings`\
        \ to mutate after create.\n- Plain text: One domain per line (no discovery\
        \ columns supported).\n\nMaximum 100 domains per import to prevent timeouts.\n\
        \nReturns:\n    Summary of import results including successful and failed\
        \ domains"
      operationId: domain_bulk_import_v1_domains_bulk_import_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_domain_bulk_import_v1_domains_bulk_import_post'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                additionalProperties: true
                title: Response Domain Bulk Import V1 Domains Bulk Import Post
                type: object
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Domain Bulk Import
      tags:
      - Domains
      - Import
  /v1/domains/{domain}:
    get:
      operationId: get_domain_v1_domains__domain__get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/DomainGet'
                - type: 'null'
                title: Response Get Domain V1 Domains  Domain  Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Domain
      tags:
      - Domains
    post:
      description: 'Create or look up a domain.


        If an optional `domain_discovery_settings` block is provided, those toggles

        are applied ONLY when this call creates a new domain. When the domain

        already exists, the settings block is silently ignored; use

        `PUT /v1/domains/{domain}/discovery-settings` to update discovery toggles

        on an existing domain.'
      operationId: add_domain_v1_domains__domain__post
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
              - $ref: '#/components/schemas/DomainPostRequestBody'
              - type: 'null'
              title: Body
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/DomainPost'
                - type: 'null'
                title: Response Add Domain V1 Domains  Domain  Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Add Domain
      tags:
      - Domains
  /v1/domains/{domain}/config:
    get:
      description: 'Get parsing configuration for a domain.


        Returns the domain''s custom parsing configuration including field selectors,

        scraper settings, and other parsing rules.'
      operationId: get_domain_config_v1_domains__domain__config_get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainConfigResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Domain Config
      tags:
      - Domains
  /v1/domains/{domain}/discovery-settings:
    put:
      description: 'Update per-domain discovery/indexing toggles.


        Only fields included in the request body are changed. Fields omitted are

        left unchanged. A field set to null clears the override (default enabled).

        Requires internal.config_write scope.'
      operationId: put_domain_discovery_settings_v1_domains__domain__discovery_settings_put
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiscoverySettingsPutRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoverySettingsResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Put Domain Discovery Settings
      tags:
      - Domains
  /v1/domains/{domain}/integrations:
    get:
      operationId: read_domain_integrations_v1_domains__domain__integrations_get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DomainIntegrationsGetItem'
                title: Response Read Domain Integrations V1 Domains  Domain  Integrations
                  Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Read Domain Integrations
      tags:
      - Domains
    put:
      operationId: write_domain_integrations_v1_domains__domain__integrations_put
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: '#/components/schemas/DomainIntegrationsPutItem'
              title: Data
              type: array
        required: true
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Write Domain Integrations
      tags:
      - Domains
  /v1/domains/{domain}/integrations/bulk/import:
    post:
      description: "Import domain integrations in bulk from a CSV file.\n\nCSV Columns:\
        \ integration_name (required), active (optional), is_default (optional), deactivates_sources\
        \ (optional)\n\nMaximum 100 rows per import.\n\nReturns:\n    Summary of import\
        \ results including successful and failed rows"
      operationId: integrations_bulk_import_v1_domains__domain__integrations_bulk_import_post
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_integrations_bulk_import_v1_domains__domain__integrations_bulk_import_post'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                additionalProperties: true
                title: Response Integrations Bulk Import V1 Domains  Domain  Integrations
                  Bulk Import Post
                type: object
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Integrations Bulk Import
      tags:
      - Domains
      - Import
  /v1/domains/{domain}/monitor/feeds:
    post:
      operationId: monitor_domain_feeds_v1_domains__domain__monitor_feeds_post
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Domain Feeds
      tags:
      - Domains
      - Monitors
  /v1/domains/{domain}/monitor/news:
    post:
      operationId: monitor_domain_news_v1_domains__domain__monitor_news_post
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Domain News
      tags:
      - Domains
      - Monitors
  /v1/domains/{domain}/monitor/paths:
    post:
      operationId: monitor_domain_path_v1_domains__domain__monitor_paths_post
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Domain Path
      tags:
      - Domains
      - Monitors
  /v1/domains/{domain}/news:
    get:
      operationId: get_domain_news_v1_domains__domain__news_get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PageGet'
                title: Response Get Domain News V1 Domains  Domain  News Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Domain News
      tags:
      - Domains
  /v1/domains/{domain}/parsing-config:
    get:
      description: "Get the parsing configuration for a domain.\n\nRequires internal.config_read\
        \ scope.\n\nArgs:\n    domain: The domain name\n    request: FastAPI request\
        \ object\n\nReturns:\n    ParsingConfigGetResponse with config data"
      operationId: get_parsing_config_v1_domains__domain__parsing_config_get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParsingConfigGetResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Parsing Config
      tags:
      - Admin
      - Domains
    put:
      description: "Update the parsing configuration for a domain.\n\nRequires internal.config_write\
        \ scope.\n\nArgs:\n    domain: The domain name\n    config_data: The new parsing\
        \ configuration\n    request: FastAPI request object\n\nReturns:\n    ParsingConfigPutResponse\
        \ with updated config"
      operationId: put_parsing_config_v1_domains__domain__parsing_config_put
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParsingConfigPutRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParsingConfigPutResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Put Parsing Config
      tags:
      - Admin
      - Domains
  /v1/domains/{domain}/refresh:
    post:
      description: "Refresh a domain's robots.txt by queueing it for fetching.\n\n\
        This endpoint queues the domain's robots.txt source for immediate refresh,\n\
        provided it hasn't been processed in the last 10 minutes.\n\nArgs:\n    domain:\
        \ The domain name (e.g., 'example.com')\n\nReturns:\n    Dict containing refresh\
        \ status and timing information\n\nRaises:\n    HTTPException: 404 if domain\
        \ or robots.txt not found\n    HTTPException: 429 if robots.txt was recently\
        \ processed\n    HTTPException: 500 for other errors"
      operationId: refresh_domain_v1_domains__domain__refresh_post
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: true
                title: Response Refresh Domain V1 Domains  Domain  Refresh Post
                type: object
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Refresh Domain
      tags:
      - Domains
  /v1/domains/{domain}/robots:
    get:
      description: 'Get robots.txt information for a domain.


        Returns robots.txt status, sitemap URLs, and crawl permissions by user agent.'
      operationId: get_domain_robots_v1_domains__domain__robots_get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainRobotsResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Domain Robots
      tags:
      - Domains
  /v1/domains/{domain}/sources:
    get:
      description: 'Get all sources associated with a domain.


        Returns feeds, sitemaps, HTML sources, and API sources for the specified domain.'
      operationId: get_domain_sources_v1_domains__domain__sources_get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainSourcesResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Domain Sources
      tags:
      - Domains
  /v1/domains/{domain}/sources/deactivate-all:
    put:
      description: "Deactivate all sources for a domain except robots.txt.\n\nRequires\
        \ internal.config_write scope.\n\nArgs:\n    domain: The domain name\n   \
        \ request: FastAPI request object\n\nReturns:\n    DeactivateSourcesResponse\
        \ with counts of deactivated and skipped sources"
      operationId: deactivate_all_sources_v1_domains__domain__sources_deactivate_all_put
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeactivateSourcesResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Deactivate All Sources
      tags:
      - Admin
      - Domains
  /v1/domains/{domain}/subdomains:
    get:
      description: 'Get all subdomains of a given domain.


        Returns all subdomains found in the database for the specified domain.

        For example, for ''example.com'', this returns ''blog.example.com'', ''api.example.com'',
        etc.'
      operationId: get_domain_subdomains_v1_domains__domain__subdomains_get
      parameters:
      - in: path
        name: domain
        required: true
        schema:
          title: Domain
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainSubdomainsResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Domain Subdomains
      tags:
      - Domains
  /v1/indexes/similarity/similar:
    get:
      operationId: similar_pages_v1_indexes_similarity_similar_get
      parameters:
      - in: query
        name: url
        required: true
        schema:
          title: Url
          type: string
      - in: query
        name: limit
        required: false
        schema:
          default: 100
          title: Limit
          type: integer
      - in: query
        name: offset
        required: false
        schema:
          default: 0
          title: Offset
          type: integer
      - in: query
        name: culture
        required: false
        schema:
          default: en-US
          title: Culture
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PageGet'
                title: Response Similar Pages V1 Indexes Similarity Similar Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Similar Pages
      tags:
      - Indexes
  /v1/indexes/text/search:
    get:
      operationId: text_search_v1_indexes_text_search_get
      parameters:
      - in: query
        name: q
        required: true
        schema:
          title: Q
          type: string
      - in: query
        name: limit
        required: false
        schema:
          default: 100
          title: Limit
          type: integer
      - in: query
        name: offset
        required: false
        schema:
          default: 0
          title: Offset
          type: integer
      - in: query
        name: culture
        required: false
        schema:
          default: en-US
          title: Culture
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PageGet'
                title: Response Text Search V1 Indexes Text Search Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Text Search
      tags:
      - Indexes
  /v1/livefeed:
    get:
      description: Return the most recently indexed articles from OpenSearch.
      operationId: get_livefeed_v1_livefeed_get
      parameters:
      - description: Maximum number of results
        in: query
        name: limit
        required: false
        schema:
          default: 50
          description: Maximum number of results
          maximum: 200
          minimum: 1
          title: Limit
          type: integer
      - description: 'Return articles indexed after this UTC datetime (default: past
          hour)'
        in: query
        name: since
        required: false
        schema:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: 'Return articles indexed after this UTC datetime (default:
            past hour)'
          title: Since
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LiveFeedResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Livefeed
      tags:
      - Livefeed
  /v1/pages:
    get:
      description: Get page by its URL
      operationId: get_page_by_url_v1_pages_get
      parameters:
      - in: query
        name: url
        required: true
        schema:
          title: Url
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageGet'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Page By Url
      tags:
      - Pages
    post:
      description: 'Add or look up a page.


        An optional `domain_discovery_settings` block is honored ONLY when this

        call results in the underlying domain being created for the first time.

        If the domain already exists, the settings block is silently ignored;

        use `PUT /v1/domains/{domain}/discovery-settings` instead.'
      operationId: add_page_v1_pages_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PagePost'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/PagePostResponse'
                - type: 'null'
                title: Response Add Page V1 Pages Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Add Page
      tags:
      - Pages
  /v1/pages/bulk/import:
    post:
      operationId: page_bulk_import_v1_pages_bulk_import_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_page_bulk_import_v1_pages_bulk_import_post'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                title: Response Page Bulk Import V1 Pages Bulk Import Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Page Bulk Import
      tags:
      - Pages
      - Import
  /v1/pages/similar:
    post:
      description: 'Find pages similar to a given page using kNN vector similarity
        search.


        Accepts either a PageID (UUID) or a canonical URL as input. If a URL is provided,

        it will be converted to a PageID using UUID5 hashing.


        Returns a list of similar pages ranked by relevance score, including metadata

        such as title, summary, publisher, and publication date.'
      operationId: find_similar_pages_v1_pages_similar_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimilaritySearchRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimilaritySearchResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Find Similar Pages
      tags:
      - Pages
      - Search
  /v1/pages/{hash}/fulltext:
    get:
      description: Get page fulltext content by hash/ID
      operationId: get_page_fulltext_v1_pages__hash__fulltext_get
      parameters:
      - in: path
        name: hash
        required: true
        schema:
          title: Hash
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Get Page Fulltext V1 Pages  Hash  Fulltext Get
                type: string
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Page Fulltext
      tags:
      - Pages
  /v1/pages/{hash}/vector/fulltext:
    get:
      operationId: get_page_vector_fulltext_v1_pages__hash__vector_fulltext_get
      parameters:
      - in: path
        name: hash
        required: true
        schema:
          title: Hash
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  type: number
                title: Response Get Page Vector Fulltext V1 Pages  Hash  Vector Fulltext
                  Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Page Vector Fulltext
      tags:
      - Pages
  /v1/pages/{page_id}:
    get:
      description: Get page by its hash/ID
      operationId: get_page_v1_pages__page_id__get
      parameters:
      - in: path
        name: page_id
        required: true
        schema:
          title: Page Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageGet'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Page
      tags:
      - Pages
  /v1/search:
    post:
      description: 'Advanced search endpoint supporting multiple query types and comprehensive
        filters.


        Supports:

        - Lucene query syntax (uses OpenSearch query_string)

        - Natural language queries (uses hybrid BM25 + kNN)

        - Simple keyword searches (uses hybrid BM25 + kNN)

        - Similarity search (uses hybrid BM25 + kNN)'
      operationId: advanced_search_v1_search_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchQuery'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Advanced Search
      tags:
      - Search
  /v1/search/boolean:
    post:
      description: "Execute a boolean text search query using Lucene syntax.\n\nSupports\
        \ Lucene query syntax including:\n- Boolean operators: AND, OR, NOT\n- Field-specific\
        \ searches: title:\"machine learning\"\n- Wildcards: machin* or m?chine\n\
        - Phrase searches: \"exact phrase\"\n- Grouping: (term1 OR term2) AND term3\n\
        \nProvides flexible filtering options for date, language, culture, content\
        \ type,\nand adult content. By default, adult content is excluded.\n\nExamples:\n\
        \    - Simple: \"machine learning\"\n    - Boolean: \"python AND (machine\
        \ learning OR data science)\"\n    - Field-specific: title:\"AI\" AND type:article\n\
        \    - Phrase: \"natural language processing\""
      operationId: boolean_search_v1_search_boolean_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BooleanSearchRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BooleanSearchResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Boolean Search
      tags:
      - Indexes
      - Search
  /v1/session-info:
    get:
      description: 'Get information about the current JWT session.


        Returns the decoded JWT payload if authenticated, or an error if not.

        This endpoint is useful for testing JWT authentication and scopes.'
      operationId: session_info_v1_session_info_get
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
      summary: Session Info
      tags:
      - Authentication
  /v1/sources/apis/json:
    get:
      operationId: get_json_api_by_id_v1_sources_apis_json_get
      parameters:
      - in: query
        name: url
        required: true
        schema:
          title: Url
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Get Json Api By Id V1 Sources Apis Json Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Json Api By Id
      tags:
      - Sources
      - API Sources
    post:
      operationId: add_api_v1_sources_apis_json_post
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Add Api V1 Sources Apis Json Post
                type: string
          description: Successful Response
      summary: Add Api
      tags:
      - Sources
      - API Sources
  /v1/sources/apis/json/bulk/import:
    post:
      operationId: json_api_bulk_import_v1_sources_apis_json_bulk_import_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_json_api_bulk_import_v1_sources_apis_json_bulk_import_post'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Json Api Bulk Import
      tags:
      - Sources
      - API Sources
      - Import
  /v1/sources/apis/json/{id}:
    get:
      operationId: get_json_api_v1_sources_apis_json__id__get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Get Json Api V1 Sources Apis Json  Id  Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Json Api
      tags:
      - Sources
      - API Sources
  /v1/sources/apis/json/{id}/items:
    get:
      operationId: get_json_api_content_v1_sources_apis_json__id__items_get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items: {}
                title: Response Get Json Api Content V1 Sources Apis Json  Id  Items
                  Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Json Api Content
      tags:
      - Sources
      - API Sources
  /v1/sources/apis/json/{id}/monitor/selector:
    post:
      operationId: monitor_json_api_selector_v1_sources_apis_json__id__monitor_selector_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JqMonitor'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Monitor Json Api Selector V1 Sources Apis Json  Id  Monitor
                  Selector Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Json Api Selector
      tags:
      - Sources
      - API Sources
      - Monitors
  /v1/sources/apis/json/{id}/refresh:
    post:
      operationId: get_json_api_content_v1_sources_apis_json__id__refresh_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Json Api Content
      tags:
      - Sources
      - API Sources
  /v1/sources/feeds:
    get:
      description: Get a feed by URL.
      operationId: get_feed_by_url_v1_sources_feeds_get
      parameters:
      - in: query
        name: url
        required: true
        schema:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeedResult'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Feed By Url
      tags:
      - Sources
      - Feeds
    post:
      description: "Add a new RSS/Atom feed source to the system.\n\nThis endpoint\
        \ validates the feed URL, determines the associated domain,\nand creates the\
        \ appropriate database record. The feed gets added with\nis_valid=None so\
        \ the scheduler will pick it up for processing.\n\nAn optional `domain_discovery_settings`\
        \ block is honored ONLY when this\ncall results in the domain being created\
        \ for the first time. If the\ndomain already exists, the settings block is\
        \ silently ignored; use\n`PUT /v1/domains/{domain}/discovery-settings` instead.\n\
        \nArgs:\n    body: The feed addition request\n\nReturns:\n    AddFeedResponse:\
        \ Details of the created feed\n\nRaises:\n    HTTPException: 400 for invalid\
        \ URLs, 409 for duplicates, 500 for errors"
      operationId: add_feed_v1_sources_feeds_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddFeedRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddFeedResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Add Feed
      tags:
      - Sources
      - Feeds
  /v1/sources/feeds/bulk/import:
    post:
      description: "Import feeds in bulk from a CSV or plain text file.\n\nAccepted\
        \ formats:\n- CSV: url (required), continue_running (optional), min_frequency\
        \ (optional),\n  discover_sources (optional), discover_pages (optional), index_pages\
        \ (optional).\n  The three discovery columns (boolean: true/false/1/0/yes/no;\
        \ blank = default)\n  apply to the feed's domain ONLY when this row causes\
        \ the domain to be\n  created for the first time. For pre-existing domains\
        \ they are silently\n  ignored; use `PUT /v1/domains/{domain}/discovery-settings`\
        \ instead.\n- Plain text: One feed URL per line (no discovery columns supported).\n\
        \nMaximum 100 feeds per import to prevent timeouts.\n\nReturns:\n    Summary\
        \ of import results including successful and failed feeds"
      operationId: feed_bulk_import_v1_sources_feeds_bulk_import_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_feed_bulk_import_v1_sources_feeds_bulk_import_post'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                additionalProperties: true
                title: Response Feed Bulk Import V1 Sources Feeds Bulk Import Post
                type: object
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Feed Bulk Import
      tags:
      - Sources
      - Feeds
      - Import
  /v1/sources/feeds/{id}:
    get:
      description: Get a feed by ID.
      operationId: get_feed_by_id_v1_sources_feeds__id__get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeedResult'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Feed By Id
      tags:
      - Sources
      - Feeds
  /v1/sources/feeds/{id}/items:
    get:
      operationId: get_feed_content_v1_sources_feeds__id__items_get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items: {}
                title: Response Get Feed Content V1 Sources Feeds  Id  Items Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Feed Content
      tags:
      - Sources
      - Feeds
  /v1/sources/feeds/{id}/monitor:
    post:
      operationId: monitor_feed_v1_sources_feeds__id__monitor_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SelectorMonitor'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                title: Response Monitor Feed V1 Sources Feeds  Id  Monitor Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Feed
      tags:
      - Sources
      - Feeds
      - Monitors
  /v1/sources/feeds/{id}/refresh:
    post:
      operationId: refresh_feed_content_v1_sources_feeds__id__refresh_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Refresh Feed Content
      tags:
      - Sources
      - Feeds
  /v1/sources/html:
    get:
      description: "Retrieve an HTML page source by its URL.\n\nArgs:\n    url (HttpUrl):\
        \ The URL of the HTML source to retrieve\n    response (Response): FastAPI\
        \ response object to set status codes\n\nReturns:\n    Union[ErrorResponseBody,\
        \ HtmlSourceResult]:\n        - HtmlSourceResult: Contains HTML source details\
        \ if found\n        - ErrorResponseBody: Contains error message if source\
        \ is not found or invalid\n\nRaises:\n    HTTPException: 400 for invalid URL,\
        \ 500 for server errors"
      operationId: get_html_source_by_url_v1_sources_html_get
      parameters:
      - in: query
        name: url
        required: true
        schema:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/ErrorResponseBody'
                - $ref: '#/components/schemas/HtmlSourceResult'
                title: Response Get Html Source By Url V1 Sources Html Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Html Source By Url
      tags:
      - Sources
      - HTML
    post:
      description: "Add a new HTML page source to the system.\n\nThis endpoint validates\
        \ the HTML page URL, determines the associated domain,\nand creates the appropriate\
        \ database record. The HTML source gets added with\nis_valid=None and desired_next_poll=None\
        \ so the scheduler will pick it up for processing.\n\nAn optional `domain_discovery_settings`\
        \ block is honored ONLY when this\ncall results in the domain being created\
        \ for the first time. If the\ndomain already exists, the settings block is\
        \ silently ignored; use\n`PUT /v1/domains/{domain}/discovery-settings` instead.\n\
        \nArgs:\n    body: The HTML page addition request\n\nReturns:\n    AddHtmlResponse:\
        \ Details of the created HTML source\n\nRaises:\n    HTTPException: 400 for\
        \ invalid URLs, 409 for duplicates, 500 for errors"
      operationId: add_html_source_v1_sources_html_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddHtmlRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddHtmlResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Add Html Source
      tags:
      - Sources
      - HTML
  /v1/sources/html/bulk/import:
    post:
      operationId: html_source_bulk_import_v1_sources_html_bulk_import_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_html_source_bulk_import_v1_sources_html_bulk_import_post'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Html Source Bulk Import
      tags:
      - Sources
      - HTML
      - Import
  /v1/sources/html/{id}:
    get:
      description: "Retrieve an HTML page source by its unique identifier.\n\nArgs:\n\
        \    id (UUID): The unique identifier of the HTML source to retrieve\n   \
        \ response (Response): FastAPI response object to set status codes\n\nReturns:\n\
        \    Union[ErrorResponseBody, HtmlSourceResult]:\n        - HtmlSourceResult:\
        \ Contains HTML source details if found\n        - ErrorResponseBody: Contains\
        \ error message if source is not found or invalid\n\nRaises:\n    HTTPException:\
        \ 400 for invalid UUID, 500 for server errors"
      operationId: get_html_source_by_id_v1_sources_html__id__get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          format: uuid
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/ErrorResponseBody'
                - $ref: '#/components/schemas/HtmlSourceResult'
                title: Response Get Html Source By Id V1 Sources Html  Id  Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Html Source By Id
      tags:
      - Sources
      - HTML
  /v1/sources/html/{id}/items:
    get:
      operationId: get_html_source_content_v1_sources_html__id__items_get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items: {}
                title: Response Get Html Source Content V1 Sources Html  Id  Items
                  Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Html Source Content
      tags:
      - Sources
      - HTML
  /v1/sources/html/{id}/monitor/paths:
    post:
      operationId: monitor_html_source_paths_v1_sources_html__id__monitor_paths_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PathMonitor'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Monitor Html Source Paths V1 Sources Html  Id  Monitor
                  Paths Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Html Source Paths
      tags:
      - Sources
      - HTML
      - Monitors
  /v1/sources/html/{id}/monitor/selector:
    post:
      operationId: monitor_html_source_selector_v1_sources_html__id__monitor_selector_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SelectorMonitor'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Monitor Html Source Selector V1 Sources Html  Id  Monitor
                  Selector Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Html Source Selector
      tags:
      - Sources
      - HTML
      - Monitors
  /v1/sources/html/{id}/refresh:
    post:
      operationId: refresh_html_source_v1_sources_html__id__refresh_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Refresh Html Source
      tags:
      - Sources
      - HTML
  /v1/sources/sitemaps:
    get:
      description: "Retrieve a sitemap source by its URL.\n\nArgs:\n    url (HttpUrl):\
        \ The URL of the sitemap to retrieve\n    response (Response): FastAPI response\
        \ object to set status codes\n\nReturns:\n    Union[ErrorResponseBody, SitemapResult]:\n\
        \        - SitemapResult: Contains sitemap details if found\n        - ErrorResponseBody:\
        \ Contains error message if sitemap is not found or invalid\n\nRaises:\n \
        \   Exception: If an error occurs during the database operation\n\nExample:\n\
        \    GET /v1/sources/sitemaps?url=https://example.com/sitemap.xml\n\nNotes:\n\
        \    The URL is converted to a source ID internally using the business ID\
        \ context.\n    The URL must be properly URL-encoded in the query parameter."
      operationId: get_sitemap_by_url_v1_sources_sitemaps_get
      parameters:
      - in: query
        name: url
        required: true
        schema:
          format: uri
          maxLength: 2083
          minLength: 1
          title: Url
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/ErrorResponseBody'
                - $ref: '#/components/schemas/SitemapResult'
                title: Response Get Sitemap By Url V1 Sources Sitemaps Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Sitemap By Url
      tags:
      - Sources
      - Sitemaps
    post:
      description: "Add a new sitemap source to the system.\n\nThis endpoint validates\
        \ the sitemap URL, determines the associated domain,\nand creates the appropriate\
        \ database record. The sitemap gets added with\nis_valid=None so the scheduler\
        \ will pick it up for processing.\n\nAn optional `domain_discovery_settings`\
        \ block is honored ONLY when this\ncall results in the domain being created\
        \ for the first time. If the\ndomain already exists, the settings block is\
        \ silently ignored; use\n`PUT /v1/domains/{domain}/discovery-settings` instead.\n\
        \nArgs:\n    body: The sitemap addition request\n\nReturns:\n    AddSitemapResponse:\
        \ Details of the created sitemap\n\nRaises:\n    HTTPException: 400 for invalid\
        \ URLs, 409 for duplicates, 500 for errors"
      operationId: add_sitemap_v1_sources_sitemaps_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddSitemapRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddSitemapResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Add Sitemap
      tags:
      - Sources
      - Sitemaps
  /v1/sources/sitemaps/bulk/import:
    post:
      operationId: sitemap_bulk_import_v1_sources_sitemaps_bulk_import_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_sitemap_bulk_import_v1_sources_sitemaps_bulk_import_post'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                title: Response Sitemap Bulk Import V1 Sources Sitemaps Bulk Import
                  Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Sitemap Bulk Import
      tags:
      - Sources
      - Sitemaps
      - Import
  /v1/sources/sitemaps/{id}:
    get:
      description: "Retrieve a sitemap source by its unique identifier.\n\nArgs:\n\
        \    id (UUID): The unique identifier of the sitemap to retrieve\n    response\
        \ (Response): FastAPI response object to set status codes\n\nReturns:\n  \
        \  Union[ErrorResponseBody, SitemapResult]:\n        - SitemapResult: Contains\
        \ sitemap details if found\n        - ErrorResponseBody: Contains error message\
        \ if sitemap is not found or invalid\n\nRaises:\n    Exception: If an error\
        \ occurs during the database operation\n\nExample:\n    GET /v1/sources/sitemaps/123e4567-e89b-12d3-a456-426614174000"
      operationId: get_sitemap_by_id_v1_sources_sitemaps__id__get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          format: uuid
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/ErrorResponseBody'
                - $ref: '#/components/schemas/SitemapResult'
                title: Response Get Sitemap By Id V1 Sources Sitemaps  Id  Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Sitemap By Id
      tags:
      - Sources
      - Sitemaps
  /v1/sources/sitemaps/{id}/items:
    get:
      operationId: get_sitemap_content_v1_sources_sitemaps__id__items_get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items: {}
                title: Response Get Sitemap Content V1 Sources Sitemaps  Id  Items
                  Get
                type: array
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Sitemap Content
      tags:
      - Sources
      - Sitemaps
  /v1/sources/sitemaps/{id}/monitor:
    post:
      operationId: monitor_sitemap_v1_sources_sitemaps__id__monitor_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SelectorMonitor'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                title: Response Monitor Sitemap V1 Sources Sitemaps  Id  Monitor Post
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Sitemap
      tags:
      - Sources
      - Sitemaps
      - Monitors
  /v1/sources/sitemaps/{id}/monitor/news:
    post:
      operationId: monitor_sitemap_news_v1_sources_sitemaps__id__monitor_news_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SelectorMonitor'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Sitemap News
      tags:
      - Sources
      - Sitemaps
      - Monitors
  /v1/sources/sitemaps/{id}/monitor/paths:
    post:
      operationId: monitor_sitemap_path_v1_sources_sitemaps__id__monitor_paths_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PathMonitor'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Monitor Sitemap Path
      tags:
      - Sources
      - Sitemaps
      - Monitors
  /v1/sources/sitemaps/{id}/refresh:
    post:
      operationId: refresh_sitemap_v1_sources_sitemaps__id__refresh_post
      parameters:
      - in: path
        name: id
        required: true
        schema:
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema: {}
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Refresh Sitemap
      tags:
      - Sources
      - Sitemaps
  /v1/sources/{id}/pages:
    get:
      description: "Get pages discovered from a parsed source.\n\nThis endpoint retrieves\
        \ the list of pages that were discovered when\nthis source was last parsed.\
        \ The data comes from the parsed_sources\nMongoDB collection.\n\nArgs:\n \
        \   id: The source ID (UUID)\n    response: FastAPI response object\n\nReturns:\n\
        \    list[dict]: List of discovered pages with their metadata\n    ErrorResponseBody:\
        \ Error details if source not found or error occurs\n\nExample:\n    GET /v1/sources/123e4567-e89b-12d3-a456-426614174000/pages"
      operationId: get_source_pages_v1_sources__id__pages_get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          format: uuid
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - items:
                    $ref: '#/components/schemas/ParsedSourcePageResult'
                  type: array
                - $ref: '#/components/schemas/ErrorResponseBody'
                title: Response Get Source Pages V1 Sources  Id  Pages Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Source Pages
      tags:
      - Sources
      - Parsed Data
  /v1/sources/{id}/sources:
    get:
      description: "Get sources discovered from a parsed source.\n\nThis endpoint\
        \ retrieves the list of child sources that were discovered when\nthis source\
        \ was last parsed. For example, a sitemap index might discover\nmultiple child\
        \ sitemaps, or a sitemap might discover RSS feeds.\nThe data comes from the\
        \ parsed_sources MongoDB collection.\n\nArgs:\n    id: The source ID (UUID)\n\
        \    response: FastAPI response object\n\nReturns:\n    list[dict]: List of\
        \ discovered sources with their metadata\n    ErrorResponseBody: Error details\
        \ if source not found or error occurs\n\nExample:\n    GET /v1/sources/123e4567-e89b-12d3-a456-426614174000/sources"
      operationId: get_source_sources_v1_sources__id__sources_get
      parameters:
      - in: path
        name: id
        required: true
        schema:
          format: uuid
          title: Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                - items:
                    $ref: '#/components/schemas/ParsedSourceSourceResult'
                  type: array
                - $ref: '#/components/schemas/ErrorResponseBody'
                title: Response Get Source Sources V1 Sources  Id  Sources Get
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Get Source Sources
      tags:
      - Sources
      - Parsed Data
  /v1/sources/{source_id}/refresh:
    post:
      description: "Refresh a source by queueing it for immediate fetching.\n\nThis\
        \ endpoint allows API clients to manually trigger a refresh of a source,\n\
        provided it hasn't been processed in the last 10 minutes. This prevents\n\
        excessive load on target servers and our processing infrastructure.\n\nArgs:\n\
        \    source_id: UUID of the source to refresh\n\nReturns:\n    RefreshSourceResponse:\
        \ Details of the refresh request\n\nRaises:\n    HTTPException: 404 if source\
        \ not found\n    HTTPException: 429 if source was recently processed (< 10\
        \ minutes ago)\n    HTTPException: 500 for other errors"
      operationId: refresh_source_v1_sources__source_id__refresh_post
      parameters:
      - in: path
        name: source_id
        required: true
        schema:
          format: uuid
          title: Source Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RefreshSourceResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: Refresh Source
      tags:
      - Sources
