{"openapi":"3.1.0","info":{"title":"UpContent Content API","description":"The API Consists of 5 main areas: pages, domains, sources, indexes, and monitors. Each one is detailed below.\n\n### Pages\nA 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.\n\nWe track a wide variety of metadata, scores, and other facts about every page.\n\n### Domains\nA 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.\n\n### Sources\nA 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.\n\nThe plan is to support:\n- Feeds (RSS or Atom)\n- Sitemaps (Either regular or index, by default just indexes news but if you monitor will add what you monitor as well)\n- JSON APIs (eventually also XML)\n- Pages (by default just finds Feeds but with a monitor added it can also find other pages)\n\n### Monitors\nMonitors 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.\n\n### Indexes\nIndexes 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","version":"0.0.1"},"paths":{"/v1/session-info":{"get":{"tags":["Authentication"],"summary":"Session Info","description":"Get information about the current JWT session.\n\nReturns the decoded JWT payload if authenticated, or an error if not.\nThis endpoint is useful for testing JWT authentication and scopes.","operationId":"session_info_v1_session_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/domains/{domain}":{"post":{"tags":["Domains"],"summary":"Add Domain","description":"Create or look up a domain.\n\nIf an optional `domain_discovery_settings` block is provided, those toggles\nare applied ONLY when this call creates a new domain. When the domain\nalready exists, the settings block is silently ignored; use\n`PUT /v1/domains/{domain}/discovery-settings` to update discovery toggles\non an existing domain.","operationId":"add_domain_v1_domains__domain__post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DomainPostRequestBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DomainPost"},{"type":"null"}],"title":"Response Add Domain V1 Domains  Domain  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Domains"],"summary":"Get Domain","operationId":"get_domain_v1_domains__domain__get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DomainGet"},{"type":"null"}],"title":"Response Get Domain V1 Domains  Domain  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/sources":{"get":{"tags":["Domains"],"summary":"Get Domain Sources","description":"Get all sources associated with a domain.\n\nReturns feeds, sitemaps, HTML sources, and API sources for the specified domain.","operationId":"get_domain_sources_v1_domains__domain__sources_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSourcesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/robots":{"get":{"tags":["Domains"],"summary":"Get Domain Robots","description":"Get robots.txt information for a domain.\n\nReturns robots.txt status, sitemap URLs, and crawl permissions by user agent.","operationId":"get_domain_robots_v1_domains__domain__robots_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRobotsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/config":{"get":{"tags":["Domains"],"summary":"Get Domain Config","description":"Get parsing configuration for a domain.\n\nReturns the domain's custom parsing configuration including field selectors,\nscraper settings, and other parsing rules.","operationId":"get_domain_config_v1_domains__domain__config_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/subdomains":{"get":{"tags":["Domains"],"summary":"Get Domain Subdomains","description":"Get all subdomains of a given domain.\n\nReturns all subdomains found in the database for the specified domain.\nFor example, for 'example.com', this returns 'blog.example.com', 'api.example.com', etc.","operationId":"get_domain_subdomains_v1_domains__domain__subdomains_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSubdomainsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/news":{"get":{"tags":["Domains"],"summary":"Get Domain News","operationId":"get_domain_news_v1_domains__domain__news_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PageGet"},"title":"Response Get Domain News V1 Domains  Domain  News Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/discovery-settings":{"put":{"tags":["Domains"],"summary":"Put Domain Discovery Settings","description":"Update per-domain discovery/indexing toggles.\n\nOnly fields included in the request body are changed. Fields omitted are\nleft unchanged. A field set to null clears the override (default enabled).\nRequires internal.config_write scope.","operationId":"put_domain_discovery_settings_v1_domains__domain__discovery_settings_put","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverySettingsPutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverySettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/monitor/paths":{"post":{"tags":["Domains","Monitors"],"summary":"Monitor Domain Path","operationId":"monitor_domain_path_v1_domains__domain__monitor_paths_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/monitor/news":{"post":{"tags":["Domains","Monitors"],"summary":"Monitor Domain News","operationId":"monitor_domain_news_v1_domains__domain__monitor_news_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/monitor/feeds":{"post":{"tags":["Domains","Monitors"],"summary":"Monitor Domain Feeds","operationId":"monitor_domain_feeds_v1_domains__domain__monitor_feeds_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/bulk/import":{"post":{"tags":["Domains","Import"],"summary":"Domain Bulk Import","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":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Domain Bulk Import V1 Domains Bulk Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/refresh":{"post":{"tags":["Domains"],"summary":"Refresh Domain","description":"Refresh a domain's robots.txt by queueing it for fetching.\n\nThis endpoint queues the domain's robots.txt source for immediate refresh,\nprovided 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":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refresh Domain V1 Domains  Domain  Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/integrations":{"put":{"tags":["Domains"],"summary":"Write Domain Integrations","operationId":"write_domain_integrations_v1_domains__domain__integrations_put","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainIntegrationsPutItem"},"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Domains"],"summary":"Read Domain Integrations","operationId":"read_domain_integrations_v1_domains__domain__integrations_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainIntegrationsGetItem"},"title":"Response Read Domain Integrations V1 Domains  Domain  Integrations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/integrations/bulk/import":{"post":{"tags":["Domains","Import"],"summary":"Integrations Bulk Import","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":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_integrations_bulk_import_v1_domains__domain__integrations_bulk_import_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Integrations Bulk Import V1 Domains  Domain  Integrations Bulk Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/indexes/text/search":{"get":{"tags":["Indexes"],"summary":"Text Search","operationId":"text_search_v1_indexes_text_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"culture","in":"query","required":false,"schema":{"type":"string","default":"en-US","title":"Culture"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PageGet"},"title":"Response Text Search V1 Indexes Text Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/indexes/similarity/similar":{"get":{"tags":["Indexes"],"summary":"Similar Pages","operationId":"similar_pages_v1_indexes_similarity_similar_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"culture","in":"query","required":false,"schema":{"type":"string","default":"en-US","title":"Culture"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PageGet"},"title":"Response Similar Pages V1 Indexes Similarity Similar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search/boolean":{"post":{"tags":["Indexes","Search"],"summary":"Boolean Search","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":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BooleanSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/livefeed":{"get":{"tags":["Livefeed"],"summary":"Get Livefeed","description":"Return the most recently indexed articles from OpenSearch.","operationId":"get_livefeed_v1_livefeed_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum number of results","default":50,"title":"Limit"},"description":"Maximum number of results"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Return articles indexed after this UTC datetime (default: past hour)","title":"Since"},"description":"Return articles indexed after this UTC datetime (default: past hour)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["Observability"],"summary":"Health","description":"Health check endpoint.\n\nReturns a simple status indicating the service is running.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/pages":{"post":{"tags":["Pages"],"summary":"Add Page","description":"Add or look up a page.\n\nAn optional `domain_discovery_settings` block is honored ONLY when this\ncall results in the underlying domain being created for the first time.\nIf the domain already exists, the settings block is silently ignored;\nuse `PUT /v1/domains/{domain}/discovery-settings` instead.","operationId":"add_page_v1_pages_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagePost"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PagePostResponse"},{"type":"null"}],"title":"Response Add Page V1 Pages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Pages"],"summary":"Get Page By Url","description":"Get page by its URL","operationId":"get_page_by_url_v1_pages_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageGet"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pages/{page_id}":{"get":{"tags":["Pages"],"summary":"Get Page","description":"Get page by its hash/ID","operationId":"get_page_v1_pages__page_id__get","parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageGet"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pages/{hash}/fulltext":{"get":{"tags":["Pages"],"summary":"Get Page Fulltext","description":"Get page fulltext content by hash/ID","operationId":"get_page_fulltext_v1_pages__hash__fulltext_get","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string","title":"Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Get Page Fulltext V1 Pages  Hash  Fulltext Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pages/{hash}/vector/fulltext":{"get":{"tags":["Pages"],"summary":"Get Page Vector Fulltext","operationId":"get_page_vector_fulltext_v1_pages__hash__vector_fulltext_get","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string","title":"Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"number"},"title":"Response Get Page Vector Fulltext V1 Pages  Hash  Vector Fulltext Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search":{"post":{"tags":["Search"],"summary":"Advanced Search","description":"Advanced search endpoint supporting multiple query types and comprehensive filters.\n\nSupports:\n- Lucene query syntax (uses OpenSearch query_string)\n- Natural language queries (uses hybrid BM25 + kNN)\n- Simple keyword searches (uses hybrid BM25 + kNN)\n- 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":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pages/similar":{"post":{"tags":["Pages","Search"],"summary":"Find Similar Pages","description":"Find pages similar to a given page using kNN vector similarity search.\n\nAccepts either a PageID (UUID) or a canonical URL as input. If a URL is provided,\nit will be converted to a PageID using UUID5 hashing.\n\nReturns a list of similar pages ranked by relevance score, including metadata\nsuch 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":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilaritySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pages/bulk/import":{"post":{"tags":["Pages","Import"],"summary":"Page Bulk Import","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":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Page Bulk Import V1 Pages Bulk Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/feeds":{"post":{"tags":["Sources","Feeds"],"summary":"Add Feed","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":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddFeedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Sources","Feeds"],"summary":"Get Feed By Url","description":"Get a feed by URL.","operationId":"get_feed_by_url_v1_sources_feeds_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","minLength":1,"maxLength":2083,"title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/feeds/{id}":{"get":{"tags":["Sources","Feeds"],"summary":"Get Feed By Id","description":"Get a feed by ID.","operationId":"get_feed_by_id_v1_sources_feeds__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/feeds/{id}/items":{"get":{"tags":["Sources","Feeds"],"summary":"Get Feed Content","operationId":"get_feed_content_v1_sources_feeds__id__items_get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Get Feed Content V1 Sources Feeds  Id  Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/feeds/{id}/refresh":{"post":{"tags":["Sources","Feeds"],"summary":"Refresh Feed Content","operationId":"refresh_feed_content_v1_sources_feeds__id__refresh_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/feeds/{id}/monitor":{"post":{"tags":["Sources","Feeds","Monitors"],"summary":"Monitor Feed","operationId":"monitor_feed_v1_sources_feeds__id__monitor_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectorMonitor"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Monitor Feed V1 Sources Feeds  Id  Monitor Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/feeds/bulk/import":{"post":{"tags":["Sources","Feeds","Import"],"summary":"Feed Bulk Import","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":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Feed Bulk Import V1 Sources Feeds Bulk Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/html":{"post":{"tags":["Sources","HTML"],"summary":"Add Html Source","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":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddHtmlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddHtmlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Sources","HTML"],"summary":"Get Html Source By Url","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":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","minLength":1,"maxLength":2083,"title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponseBody"},{"$ref":"#/components/schemas/HtmlSourceResult"}],"title":"Response Get Html Source By Url V1 Sources Html Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/html/{id}":{"get":{"tags":["Sources","HTML"],"summary":"Get Html Source By Id","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":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"Successful Response","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"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/html/{id}/items":{"get":{"tags":["Sources","HTML"],"summary":"Get Html Source Content","operationId":"get_html_source_content_v1_sources_html__id__items_get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Get Html Source Content V1 Sources Html  Id  Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/html/{id}/refresh":{"post":{"tags":["Sources","HTML"],"summary":"Refresh Html Source","operationId":"refresh_html_source_v1_sources_html__id__refresh_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/html/{id}/monitor/paths":{"post":{"tags":["Sources","HTML","Monitors"],"summary":"Monitor Html Source Paths","operationId":"monitor_html_source_paths_v1_sources_html__id__monitor_paths_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Monitor Html Source Paths V1 Sources Html  Id  Monitor Paths Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/html/{id}/monitor/selector":{"post":{"tags":["Sources","HTML","Monitors"],"summary":"Monitor Html Source Selector","operationId":"monitor_html_source_selector_v1_sources_html__id__monitor_selector_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectorMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Monitor Html Source Selector V1 Sources Html  Id  Monitor Selector Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/html/bulk/import":{"post":{"tags":["Sources","HTML","Import"],"summary":"Html Source Bulk Import","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":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/apis/json":{"post":{"tags":["Sources","API Sources"],"summary":"Add Api","operationId":"add_api_v1_sources_apis_json_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Add Api V1 Sources Apis Json Post"}}}}}},"get":{"tags":["Sources","API Sources"],"summary":"Get Json Api By Id","operationId":"get_json_api_by_id_v1_sources_apis_json_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Json Api By Id V1 Sources Apis Json Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/apis/json/{id}":{"get":{"tags":["Sources","API Sources"],"summary":"Get Json Api","operationId":"get_json_api_v1_sources_apis_json__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Json Api V1 Sources Apis Json  Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/apis/json/{id}/items":{"get":{"tags":["Sources","API Sources"],"summary":"Get Json Api Content","operationId":"get_json_api_content_v1_sources_apis_json__id__items_get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Get Json Api Content V1 Sources Apis Json  Id  Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/apis/json/{id}/refresh":{"post":{"tags":["Sources","API Sources"],"summary":"Get Json Api Content","operationId":"get_json_api_content_v1_sources_apis_json__id__refresh_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/apis/json/{id}/monitor/selector":{"post":{"tags":["Sources","API Sources","Monitors"],"summary":"Monitor Json Api Selector","operationId":"monitor_json_api_selector_v1_sources_apis_json__id__monitor_selector_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JqMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Monitor Json Api Selector V1 Sources Apis Json  Id  Monitor Selector Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/apis/json/bulk/import":{"post":{"tags":["Sources","API Sources","Import"],"summary":"Json Api Bulk Import","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":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/{id}/pages":{"get":{"tags":["Sources","Parsed Data"],"summary":"Get Source Pages","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":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/ParsedSourcePageResult"}},{"$ref":"#/components/schemas/ErrorResponseBody"}],"title":"Response Get Source Pages V1 Sources  Id  Pages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/{id}/sources":{"get":{"tags":["Sources","Parsed Data"],"summary":"Get Source Sources","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":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/ParsedSourceSourceResult"}},{"$ref":"#/components/schemas/ErrorResponseBody"}],"title":"Response Get Source Sources V1 Sources  Id  Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/{source_id}/refresh":{"post":{"tags":["Sources"],"summary":"Refresh Source","description":"Refresh a source by queueing it for immediate fetching.\n\nThis endpoint allows API clients to manually trigger a refresh of a source,\nprovided it hasn't been processed in the last 10 minutes. This prevents\nexcessive 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":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshSourceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps":{"post":{"tags":["Sources","Sitemaps"],"summary":"Add Sitemap","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":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddSitemapRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddSitemapResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Sources","Sitemaps"],"summary":"Get Sitemap By Url","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":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","minLength":1,"maxLength":2083,"title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponseBody"},{"$ref":"#/components/schemas/SitemapResult"}],"title":"Response Get Sitemap By Url V1 Sources Sitemaps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps/{id}":{"get":{"tags":["Sources","Sitemaps"],"summary":"Get Sitemap By Id","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":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponseBody"},{"$ref":"#/components/schemas/SitemapResult"}],"title":"Response Get Sitemap By Id V1 Sources Sitemaps  Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps/{id}/items":{"get":{"tags":["Sources","Sitemaps"],"summary":"Get Sitemap Content","operationId":"get_sitemap_content_v1_sources_sitemaps__id__items_get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Get Sitemap Content V1 Sources Sitemaps  Id  Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps/{id}/refresh":{"post":{"tags":["Sources","Sitemaps"],"summary":"Refresh Sitemap","operationId":"refresh_sitemap_v1_sources_sitemaps__id__refresh_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps/{id}/monitor":{"post":{"tags":["Sources","Sitemaps","Monitors"],"summary":"Monitor Sitemap","operationId":"monitor_sitemap_v1_sources_sitemaps__id__monitor_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectorMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Monitor Sitemap V1 Sources Sitemaps  Id  Monitor Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps/{id}/monitor/paths":{"post":{"tags":["Sources","Sitemaps","Monitors"],"summary":"Monitor Sitemap Path","operationId":"monitor_sitemap_path_v1_sources_sitemaps__id__monitor_paths_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps/{id}/monitor/news":{"post":{"tags":["Sources","Sitemaps","Monitors"],"summary":"Monitor Sitemap News","operationId":"monitor_sitemap_news_v1_sources_sitemaps__id__monitor_news_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectorMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/sitemaps/bulk/import":{"post":{"tags":["Sources","Sitemaps","Import"],"summary":"Sitemap Bulk Import","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":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Sitemap Bulk Import V1 Sources Sitemaps Bulk Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/parsing-config":{"get":{"tags":["Admin","Domains"],"summary":"Get Parsing Config","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":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParsingConfigGetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin","Domains"],"summary":"Put Parsing Config","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":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParsingConfigPutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParsingConfigPutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domain}/sources/deactivate-all":{"put":{"tags":["Admin","Domains"],"summary":"Deactivate All Sources","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":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeactivateSourcesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AddFeedRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"active":{"type":"boolean","title":"Active","default":true},"domain_discovery_settings":{"anyOf":[{"$ref":"#/components/schemas/DomainDiscoverySettings"},{"type":"null"}]}},"type":"object","required":["url"],"title":"AddFeedRequest","description":"Request model for adding a feed."},"AddFeedResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"url":{"type":"string","title":"Url"},"domain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Id"},"active":{"type":"boolean","title":"Active"},"is_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Valid"},"message":{"type":"string","title":"Message"}},"type":"object","required":["source_id","url","domain_id","active","is_valid","message"],"title":"AddFeedResponse","description":"Response model for adding a feed."},"AddHtmlRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"active":{"type":"boolean","title":"Active","default":true},"domain_discovery_settings":{"anyOf":[{"$ref":"#/components/schemas/DomainDiscoverySettings"},{"type":"null"}]}},"type":"object","required":["url"],"title":"AddHtmlRequest","description":"Request model for adding an HTML page source."},"AddHtmlResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"url":{"type":"string","title":"Url"},"domain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Id"},"active":{"type":"boolean","title":"Active"},"is_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Valid"},"message":{"type":"string","title":"Message"}},"type":"object","required":["source_id","url","domain_id","active","is_valid","message"],"title":"AddHtmlResponse","description":"Response model for adding an HTML page source."},"AddSitemapRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"active":{"type":"boolean","title":"Active","default":true},"domain_discovery_settings":{"anyOf":[{"$ref":"#/components/schemas/DomainDiscoverySettings"},{"type":"null"}]}},"type":"object","required":["url"],"title":"AddSitemapRequest","description":"Request model for adding a sitemap."},"AddSitemapResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"url":{"type":"string","title":"Url"},"domain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Id"},"active":{"type":"boolean","title":"Active"},"is_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Valid"},"message":{"type":"string","title":"Message"}},"type":"object","required":["source_id","url","domain_id","active","is_valid","message"],"title":"AddSitemapResponse","description":"Response model for adding a sitemap."},"AllowFilters":{"properties":{"adult":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Adult","default":false},"premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Premium","default":false}},"type":"object","title":"AllowFilters","description":"Filters for content that is allowed."},"AwsSnsTarget":{"properties":{"arn":{"type":"string","title":"Arn"}},"type":"object","required":["arn"],"title":"AwsSnsTarget"},"Body_domain_bulk_import_v1_domains_bulk_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_domain_bulk_import_v1_domains_bulk_import_post"},"Body_feed_bulk_import_v1_sources_feeds_bulk_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_feed_bulk_import_v1_sources_feeds_bulk_import_post"},"Body_html_source_bulk_import_v1_sources_html_bulk_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_html_source_bulk_import_v1_sources_html_bulk_import_post"},"Body_integrations_bulk_import_v1_domains__domain__integrations_bulk_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_integrations_bulk_import_v1_domains__domain__integrations_bulk_import_post"},"Body_json_api_bulk_import_v1_sources_apis_json_bulk_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_json_api_bulk_import_v1_sources_apis_json_bulk_import_post"},"Body_page_bulk_import_v1_pages_bulk_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_page_bulk_import_v1_pages_bulk_import_post"},"Body_sitemap_bulk_import_v1_sources_sitemaps_bulk_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_sitemap_bulk_import_v1_sources_sitemaps_bulk_import_post"},"BooleanSearchRequest":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"Lucene query string (supports AND, OR, NOT, field:value, etc.)"},"size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Size","description":"Number of results to return (1-100)","default":50},"published_after":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published After","description":"Only return content published after this date (ISO 8601 format)"},"language":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Language","description":"Filter by language code(s), e.g., 'en' or ['en', 'es']"},"culture":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Culture","description":"Filter by culture code(s), e.g., 'en-US' or ['en-US', 'en-GB']"},"include_adult":{"type":"boolean","title":"Include Adult","description":"Whether to include adult content (default: false, filters out adult content)","default":false},"content_type":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Content Type","description":"Filter by content type(s), e.g., 'article' or ['article', 'tutorial']"},"domain":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Domain","description":"Filter by domain(s), e.g., 'example.com' or ['example.com', 'test.com']"},"publisher":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Publisher","description":"Filter by publisher name(s)"}},"type":"object","required":["query"],"title":"BooleanSearchRequest","description":"Request model for boolean (Lucene syntax) search endpoint."},"BooleanSearchResponse":{"properties":{"query":{"type":"string","title":"Query","description":"The original query string"},"results":{"items":{"$ref":"#/components/schemas/content__api__v1__models__indexes__SearchResult__1"},"type":"array","title":"Results","description":"List of matching pages"},"count":{"type":"integer","title":"Count","description":"Number of results returned"},"total_hits":{"type":"integer","title":"Total Hits","description":"Total number of matching documents"},"filters_applied":{"additionalProperties":true,"type":"object","title":"Filters Applied","description":"Summary of filters that were applied to the search"}},"type":"object","required":["query","count","total_hits"],"title":"BooleanSearchResponse","description":"Response model for boolean search endpoint."},"DeactivateSourcesResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"deactivated_count":{"type":"integer","title":"Deactivated Count"},"skipped_count":{"type":"integer","title":"Skipped Count"},"message":{"type":"string","title":"Message"}},"type":"object","required":["domain","deactivated_count","skipped_count","message"],"title":"DeactivateSourcesResponse","description":"Response model for PUT /v1/domains/{domain}/sources/deactivate-all"},"DiscoverySettingsPutRequest":{"properties":{"discover_sources":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Sources"},"discover_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Pages"},"index_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Index Pages"}},"additionalProperties":false,"type":"object","title":"DiscoverySettingsPutRequest","description":"Request model for PUT /v1/domains/{domain}/discovery-settings.\n\nSame shape as DomainDiscoverySettings (flat fields); omitted fields are\nleft unchanged, explicit null clears the override."},"DiscoverySettingsResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"discover_sources":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Sources"},"discover_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Pages"},"index_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Index Pages"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated"}},"type":"object","required":["domain"],"title":"DiscoverySettingsResponse","description":"Response model for discovery-settings endpoints."},"DomainConfigResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated"}},"type":"object","required":["domain"],"title":"DomainConfigResponse","description":"Response model for GET /v1/domains/{domain}/config"},"DomainDiscoverySettings":{"properties":{"discover_sources":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Sources"},"discover_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Pages"},"index_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Index Pages"}},"additionalProperties":false,"type":"object","title":"DomainDiscoverySettings","description":"Per-domain discovery/indexing toggles.\n\nShared model used wherever a request can optionally set discovery settings\nfor a domain (POST /v1/domains/{domain}, POST /v1/sources/*, POST /v1/pages).\nAll fields optional: omitted fields are not modified; null explicitly clears\nan override."},"DomainGet":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"domain":{"type":"string","title":"Domain"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"influence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Influence"},"popularity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Popularity"},"is_adult":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Adult"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"culture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Culture"},"is_snippable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Snippable"},"is_snippable_with_proxy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Snippable With Proxy"},"discover_sources":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Sources"},"discover_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discover Pages"},"index_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Index Pages"}},"type":"object","required":["id","domain"],"title":"DomainGet"},"DomainIntegrationsGetItem":{"properties":{"integration_name":{"type":"string","title":"Integration Name"},"active":{"type":"boolean","title":"Active","default":true},"is_default":{"type":"boolean","title":"Is Default","default":false},"deactivates_sources":{"type":"boolean","title":"Deactivates Sources","default":true},"allow_user_edit_deactivates_sources":{"type":"boolean","title":"Allow User Edit Deactivates Sources","default":true},"deactivates_other":{"type":"boolean","title":"Deactivates Other","default":true},"last_scheduled":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scheduled"},"last_started":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Started"},"last_complete":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Complete"}},"type":"object","required":["integration_name"],"title":"DomainIntegrationsGetItem"},"DomainIntegrationsPutItem":{"properties":{"integration_name":{"type":"string","title":"Integration Name"},"active":{"type":"boolean","title":"Active","default":true},"is_default":{"type":"boolean","title":"Is Default","default":false},"deactivates_sources":{"type":"boolean","title":"Deactivates Sources","default":true}},"type":"object","required":["integration_name"],"title":"DomainIntegrationsPutItem"},"DomainPost":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"domain":{"type":"string","title":"Domain"}},"type":"object","required":["id","domain"],"title":"DomainPost"},"DomainPostRequestBody":{"properties":{"domain_discovery_settings":{"anyOf":[{"$ref":"#/components/schemas/DomainDiscoverySettings"},{"type":"null"}]}},"type":"object","title":"DomainPostRequestBody","description":"Optional body for POST /v1/domains/{domain}. Fully optional."},"DomainRobotsResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"robots_txt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Robots Txt Url"},"exists":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exists"},"last_checked":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked"},"sitemaps":{"items":{"type":"string"},"type":"array","title":"Sitemaps","default":[]},"permissions":{"items":{"$ref":"#/components/schemas/RobotAgentPermission"},"type":"array","title":"Permissions","default":[]}},"type":"object","required":["domain"],"title":"DomainRobotsResponse","description":"Response model for GET /v1/domains/{domain}/robots"},"DomainSourceGet":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"type":{"type":"string","title":"Type"},"url":{"type":"string","title":"Url"},"is_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Valid"},"last_processed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Processed"},"last_scheduled":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scheduled"},"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"}},"type":"object","required":["id","type","url"],"title":"DomainSourceGet","description":"Response model for a single source associated with a domain"},"DomainSourcesResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"sources":{"items":{"$ref":"#/components/schemas/DomainSourceGet"},"type":"array","title":"Sources"}},"type":"object","required":["domain","sources"],"title":"DomainSourcesResponse","description":"Response model for GET /v1/domains/{domain}/sources"},"DomainSubdomainsResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"subdomains":{"items":{"$ref":"#/components/schemas/DomainGet"},"type":"array","title":"Subdomains"}},"type":"object","required":["domain","subdomains"],"title":"DomainSubdomainsResponse","description":"Response model for GET /v1/domains/{domain}/subdomains"},"ErrorResponseBody":{"properties":{"error":{"type":"string","title":"Error"}},"type":"object","required":["error"],"title":"ErrorResponseBody"},"FeedResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"url":{"type":"string","title":"Url"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"last_fetch_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Fetch Status Code"}},"type":"object","required":["id","url","name"],"title":"FeedResult"},"Filters":{"properties":{"only":{"anyOf":[{"$ref":"#/components/schemas/ModedFilters"},{"type":"null"}]},"exclude":{"anyOf":[{"$ref":"#/components/schemas/ModedFilters"},{"type":"null"}]},"allow":{"anyOf":[{"$ref":"#/components/schemas/AllowFilters"},{"type":"null"}]},"require":{"anyOf":[{"$ref":"#/components/schemas/RequireFilters"},{"type":"null"}]}},"type":"object","title":"Filters","description":"Comprehensive filter configuration."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HtmlSourceResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"domain_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Domain Id"},"active":{"type":"boolean","title":"Active"},"is_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Valid"},"last_processed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Processed"},"desired_next_poll":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Desired Next Poll"},"failure_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Failure Count"},"failure_status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Status Code"}},"type":"object","required":["id","url","domain_id","active","is_valid","last_processed","desired_next_poll","failure_count","failure_status_code"],"title":"HtmlSourceResult","description":"Response model for retrieving an HTML page source."},"JqMonitor":{"properties":{"target":{"$ref":"#/components/schemas/SourceMonitorTarget"},"array_prop":{"type":"string","title":"Array Prop"},"url_prop":{"type":"string","title":"Url Prop"}},"type":"object","required":["target","array_prop","url_prop"],"title":"JqMonitor"},"LiveFeedItem":{"properties":{"id":{"type":"string","title":"Id","description":"Page ID"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url","description":"Canonical URL of the page"},"title":{"type":"string","title":"Title","description":"Page title","default":""},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Page summary/excerpt"},"date_published":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Published","description":"Publication date"},"publisher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher","description":"Publisher name"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain name"},"type":{"type":"string","title":"Type","description":"Content type","default":"Unknown"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When the article was indexed (UTC)"}},"type":"object","required":["id"],"title":"LiveFeedItem","description":"A single item in the livefeed."},"LiveFeedResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/LiveFeedItem"},"type":"array","title":"Results","description":"List of recently indexed articles"},"count":{"type":"integer","title":"Count","description":"Number of results returned"},"since":{"type":"string","format":"date-time","title":"Since","description":"The since cutoff used for this query (UTC)"}},"type":"object","required":["count","since"],"title":"LiveFeedResponse","description":"Response model for the livefeed endpoint."},"ModedFilters":{"properties":{"domains":{"anyOf":[{"items":{"type":"string","maxLength":253,"examples":["example.com"]},"type":"array"},{"type":"null"}],"title":"Domains"},"phrases":{"anyOf":[{"items":{"type":"string","examples":["401k"]},"type":"array"},{"type":"null"}],"title":"Phrases"},"libraries":{"anyOf":[{"items":{"type":"string","maxLength":50,"examples":["dow-jones"]},"type":"array"},{"type":"null"}],"title":"Libraries"}},"type":"object","title":"ModedFilters","description":"Filters that can be applied in 'only' or 'exclude' mode."},"MustMatchExact":{"type":"string","enum":["auto","words","phrase","no"],"title":"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)"},"PageGet":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"canonical_url":{"type":"string","title":"Canonical Url"},"title":{"type":"string","title":"Title"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excerpt"},"image":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Image"},"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"domain":{"$ref":"#/components/schemas/DomainGet"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"culture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Culture"},"shareability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shareability"},"is_adult":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Adult"},"is_snippable_without_proxy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Snippable Without Proxy"},"is_snippable_with_proxy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Snippable With Proxy"},"image_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Image Valid"},"ttl":{"type":"integer","title":"Ttl","default":720}},"type":"object","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"},"PagePost":{"properties":{"url":{"type":"string","title":"Url"},"ttl":{"type":"integer","title":"Ttl","default":720},"domain_discovery_settings":{"anyOf":[{"$ref":"#/components/schemas/DomainDiscoverySettings"},{"type":"null"}]}},"type":"object","required":["url"],"title":"PagePost"},"PagePostResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"url":{"type":"string","title":"Url"},"ttl":{"type":"integer","title":"Ttl","default":720}},"type":"object","required":["id","url"],"title":"PagePostResponse"},"ParsedSourcePageResult":{"properties":{"url":{"type":"string","title":"Url","description":"The page URL"},"created":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created","description":"When the page was discovered"},"updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated","description":"When the page was last updated"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Page metadata"},"publisher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher","description":"Publisher name if available"}},"type":"object","required":["url"],"title":"ParsedSourcePageResult","description":"Response model for a discovered page from a parsed source."},"ParsedSourceSourceResult":{"properties":{"url":{"type":"string","title":"Url","description":"The source URL"},"created":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created","description":"When the source was discovered"},"updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated","description":"When the source was last updated"},"source_type":{"type":"string","title":"Source Type","description":"Type of source (feed, sitemap, html, etc.)"}},"type":"object","required":["url","source_type"],"title":"ParsedSourceSourceResult","description":"Response model for a discovered source from a parsed source."},"ParsingConfigGetResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated"}},"type":"object","required":["domain"],"title":"ParsingConfigGetResponse","description":"Response model for GET /v1/domains/{domain}/parsing-config"},"ParsingConfigPutRequest":{"properties":{"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["config"],"title":"ParsingConfigPutRequest","description":"Request model for PUT /v1/domains/{domain}/parsing-config"},"ParsingConfigPutResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated"},"message":{"type":"string","title":"Message"}},"type":"object","required":["domain","config","message"],"title":"ParsingConfigPutResponse","description":"Response model for PUT /v1/domains/{domain}/parsing-config"},"PathMonitor":{"properties":{"target":{"$ref":"#/components/schemas/SourceMonitorTarget"},"path":{"type":"string","title":"Path"}},"type":"object","required":["target","path"],"title":"PathMonitor"},"RefreshSourceResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"message":{"type":"string","title":"Message"},"last_processed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Processed"},"last_scheduled":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scheduled"}},"type":"object","required":["source_id","message","last_processed","last_scheduled"],"title":"RefreshSourceResponse","description":"Response model for source refresh requests."},"RequireFilters":{"properties":{"iframeable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Iframeable","default":false},"image_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Image Valid","default":false},"text_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Text Length"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","default":[]},"unpaywalled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unpaywalled","default":false},"premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Premium","default":false},"viewable_with_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Viewable With Premium","default":false}},"type":"object","title":"RequireFilters","description":"Filters for required content attributes."},"RobotAgentPermission":{"properties":{"agent":{"type":"string","title":"Agent"},"allowed":{"items":{"type":"string"},"type":"array","title":"Allowed","default":[]},"disallowed":{"items":{"type":"string"},"type":"array","title":"Disallowed","default":[]}},"type":"object","required":["agent"],"title":"RobotAgentPermission","description":"Permissions for a specific user agent"},"SearchQuery":{"properties":{"similarity":{"anyOf":[{"$ref":"#/components/schemas/SimilarityQuery"},{"type":"null"}]},"lucene":{"anyOf":[{"type":"string","maxLength":256,"examples":["401k and (finance or investments or \"retirement plan\")"]},{"type":"null"}],"title":"Lucene"},"natural":{"anyOf":[{"type":"string","maxLength":256,"examples":["investing in 401k for retirement"]},{"type":"null"}],"title":"Natural"},"simple":{"anyOf":[{"type":"string","examples":["401k"]},{"type":"null"}],"title":"Simple"},"filters":{"anyOf":[{"$ref":"#/components/schemas/Filters"},{"type":"null"}]},"after":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"After"},"culture":{"anyOf":[{"type":"string","examples":["en-US","en","fr","fr-ca"]},{"type":"null"}],"title":"Culture"},"strict_culture":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strict Culture","default":false},"must_match_exact":{"anyOf":[{"$ref":"#/components/schemas/MustMatchExact"},{"type":"null"}],"description":"Controls how strictly results must match the query terms","default":"auto"},"max_distance":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Distance","description":"Maximum cosine distance for kNN results (0 to 1, where 0 = identical). Applies to natural/simple searches with kNN."},"limit":{"anyOf":[{"type":"integer","maximum":200.0,"minimum":1.0},{"type":"null"}],"title":"Limit","description":"Maximum number of results to return (1-200)","default":50}},"type":"object","title":"SearchQuery","description":"Comprehensive search query model supporting multiple query types and filters."},"SearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/content__api__v1__models__indexes__SearchResult__2"},"type":"array","title":"Results","description":"List of matching pages"},"count":{"type":"integer","title":"Count","description":"Number of results returned"}},"type":"object","required":["count"],"title":"SearchResponse","description":"Response model for search endpoint."},"SelectorMonitor":{"properties":{"target":{"$ref":"#/components/schemas/SourceMonitorTarget"},"path":{"type":"string","title":"Path"}},"type":"object","required":["target","path"],"title":"SelectorMonitor"},"SimilarPageResult":{"properties":{"id":{"type":"string","title":"Id","description":"Page ID"},"title":{"type":"string","title":"Title","description":"Page title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Page summary/excerpt"},"fulltext":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fulltext","description":"Full text content"},"date_published":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Published","description":"Publication date"},"publisher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher","description":"Publisher name"},"type":{"type":"string","title":"Type","description":"Content type","default":"Unknown"},"relevance_score":{"type":"number","title":"Relevance Score","description":"Similarity score"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url","description":"URL of the page's primary image"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain name"}},"type":"object","required":["id","title","relevance_score"],"title":"SimilarPageResult","description":"Model for a single similar page result."},"SimilarityQuery":{"properties":{"points":{"items":{"$ref":"#/components/schemas/SimilarityQueryPoint"},"type":"array","title":"Points"},"max_distance":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Distance"}},"type":"object","required":["points"],"title":"SimilarityQuery","description":"Similarity query configuration."},"SimilarityQueryPoint":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"text":{"anyOf":[{"type":"string","maxLength":256,"examples":["investing in 401k for retirement"]},{"type":"null"}],"title":"Text"},"weight":{"type":"number","exclusiveMinimum":0.0,"title":"Weight","default":1.0}},"type":"object","title":"SimilarityQueryPoint","description":"A single point in a similarity query."},"SimilaritySearchRequest":{"properties":{"page_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Page Id","description":"PageID (UUID4) of the article to find similar content for"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url","description":"Canonical URL of the article to find similar content for"},"k":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"K","description":"Number of similar articles to return (1-50)","default":5}},"type":"object","title":"SimilaritySearchRequest","description":"Request model for similarity search endpoint (legacy)."},"SimilaritySearchResponse":{"properties":{"source_page_id":{"type":"string","title":"Source Page Id","description":"ID of the source page used for similarity search"},"results":{"items":{"$ref":"#/components/schemas/SimilarPageResult"},"type":"array","title":"Results","description":"List of similar pages"},"count":{"type":"integer","title":"Count","description":"Number of results returned"}},"type":"object","required":["source_page_id","count"],"title":"SimilaritySearchResponse","description":"Response model for similarity search endpoint."},"SitemapResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"has_news":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has News"},"last_checked":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked"},"last_publish_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Publish Date"},"last_fetch_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Fetch Status Code"}},"type":"object","required":["id","url","has_news","last_checked","last_publish_date"],"title":"SitemapResult"},"SourceMonitorTarget":{"properties":{"webhook":{"anyOf":[{"$ref":"#/components/schemas/WebhookTarget"},{"type":"null"}]},"sns":{"anyOf":[{"$ref":"#/components/schemas/AwsSnsTarget"},{"type":"null"}]}},"type":"object","required":["webhook","sns"],"title":"SourceMonitorTarget"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookTarget":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"WebhookTarget"},"content__api__v1__models__indexes__SearchResult__1":{"properties":{"id":{"type":"string","title":"Id","description":"Page ID"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url","description":"Canonical URL of the page"},"title":{"type":"string","title":"Title","description":"Page title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Page summary/excerpt"},"fulltext":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fulltext","description":"Full text content"},"date_published":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Published","description":"Publication date"},"publisher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher","description":"Publisher name"},"type":{"type":"string","title":"Type","description":"Content type","default":"Unknown"},"relevance_score":{"type":"number","title":"Relevance Score","description":"Search relevance score"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain name"}},"type":"object","required":["id","title","relevance_score"],"title":"SearchResult","description":"Model for a single search result."},"content__api__v1__models__indexes__SearchResult__2":{"properties":{"id":{"type":"string","title":"Id","description":"Page ID"},"canonical_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Canonical Url","description":"Canonical URL of the page"},"title":{"type":"string","title":"Title","description":"Page title","default":""},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Page summary/excerpt"},"date_published":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Published","description":"Publication date"},"publisher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher","description":"Publisher name"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain name"}},"type":"object","required":["id"],"title":"SearchResult","description":"Model for a single search result."}}}}