{"openapi":"3.1.0","info":{"title":"FeedContext Public API","version":"0.3.0","description":"FeedContext api owns auth, public REST endpoints, OpenAPI, AUTH_DB, BIZ_DB, and RSS job handlers."},"servers":[{"url":"https://api.feedcontext.io","description":"Production"}],"tags":[{"name":"System","description":"Service health and API shell metadata."},{"name":"Subscriptions","description":"RSS/Atom Subscriptions owned by the authenticated user."},{"name":"Dashboard","description":"First-party dashboard profile endpoints."},{"name":"Items","description":"Feed Items visible through the authenticated user's active Subscriptions."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Skill Session token"}},"schemas":{},"parameters":{}},"paths":{"/health":{"get":{"tags":["System"],"summary":"Health check","responses":{"200":{"description":"The api Worker is healthy.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"service":{"type":"string","enum":["api"]}},"required":["ok","service"]}}}}}}},"/v1/status":{"get":{"tags":["System"],"summary":"API shell status","responses":{"200":{"description":"The dynamic api shell ownership map.","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string","enum":["api"]},"auth":{"type":"object","properties":{"owner":{"type":"string","enum":["api"]},"database":{"type":"string","enum":["AUTH_DB"]}},"required":["owner","database"]},"data":{"type":"object","properties":{"owner":{"type":"string","enum":["api"]},"database":{"type":"string","enum":["BIZ_DB"]}},"required":["owner","database"]},"jobs":{"type":"object","properties":{"rss":{"type":"string","enum":["SOURCE_SYNC_QUEUE"]}},"required":["rss"]}},"required":["service","auth","data","jobs"]}}}}}}},"/schemas":{"get":{"tags":["Schemas"],"summary":"List FeedContext artifact DSL schemas","responses":{"200":{"description":"Versioned artifact DSL schemas exposed by api.","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["content_dsl"]},"title":{"type":"string"},"url_path":{"type":"string"},"version":{"type":"string","enum":["1"]}},"required":["id","kind","title","url_path","version"]}}},"required":["schemas"]}}}}}}},"/schemas/{schema_path}":{"get":{"tags":["Schemas"],"summary":"Get a FeedContext artifact DSL JSON Schema","parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"schema_path","in":"path"}],"responses":{"200":{"description":"JSON Schema document.","content":{"application/schema+json":{"schema":{"type":"object","additionalProperties":{}}}}},"404":{"description":"Schema not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/auth/skill":{"get":{"tags":["Auth"],"summary":"Start FeedContext Skill OAuth login","parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"code_challenge","in":"query"},{"schema":{"type":"string","minLength":1},"required":true,"name":"state","in":"query"}],"responses":{"302":{"description":"Redirects to the api-owned OAuth authorization flow."}}}},"/v1/auth/skill/pair":{"post":{"tags":["Auth"],"summary":"Resolve a browser-to-skill pair code","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pair_code":{"type":"string","pattern":"^\\d{6}$"}},"required":["pair_code"]}}}},"responses":{"200":{"description":"OAuth code and state associated with the pair code.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","minLength":1},"state":{"type":"string","minLength":1}},"required":["code","state"]}}}},"404":{"description":"Pair code expired, already used, or not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/auth/skill/anonymous":{"post":{"tags":["Auth"],"summary":"Create an anonymous FeedContext Skill Session","responses":{"200":{"description":"Anonymous Skill Session bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string","minLength":1},"is_anonymous":{"type":"boolean","enum":[true]},"token_type":{"type":"string","enum":["Bearer"]}},"required":["access_token","is_anonymous","token_type"]}}}},"502":{"description":"Anonymous user creation failed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/auth/skill/status":{"get":{"tags":["Auth"],"summary":"Read the current FeedContext Skill Session state","responses":{"200":{"description":"Current Skill Session state.","content":{"application/json":{"schema":{"type":"object","properties":{"authenticated":{"type":"boolean","enum":[true]},"is_anonymous":{"type":"boolean"}},"required":["authenticated","is_anonymous"]}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/auth/skill/merge-anonymous":{"post":{"tags":["Auth"],"summary":"Merge an anonymous Skill Session into the current formal Skill Session","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"anonymous_access_token":{"type":"string","minLength":1}},"required":["anonymous_access_token"]}}}},"responses":{"200":{"description":"Anonymous Business Data merge result.","content":{"application/json":{"schema":{"type":"object","properties":{"artifacts_moved":{"type":"integer","minimum":0},"duplicate_subscriptions_retired":{"type":"integer","minimum":0},"merged":{"type":"boolean","enum":[true]},"profiles_merged":{"type":"integer","minimum":0},"subscriptions_moved":{"type":"integer","minimum":0},"subscriptions_reactivated":{"type":"integer","minimum":0},"user_feed_updates_moved":{"type":"integer","minimum":0}},"required":["artifacts_moved","duplicate_subscriptions_retired","merged","profiles_merged","subscriptions_moved","subscriptions_reactivated","user_feed_updates_moved"]}}}},"400":{"description":"The supplied session is not an anonymous Skill Session.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/me":{"get":{"tags":["Dashboard"],"summary":"Get Dashboard Profile","responses":{"200":{"description":"Minimal profile for first-party dashboard chrome.","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string"},"email":{"type":"string","format":"email"},"image":{"type":["string","null"]}},"required":["id","name","email","image"]}},"required":["user"]}}}},"401":{"description":"Dashboard sign-in required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/dashboard/summary":{"get":{"tags":["Dashboard"],"summary":"Get Dashboard Summary","security":[],"parameters":[{"schema":{"type":["integer","null"],"minimum":0},"required":false,"name":"today_start","in":"query"},{"schema":{"type":["integer","null"],"minimum":0},"required":false,"name":"today_end","in":"query"}],"responses":{"200":{"description":"First-party dashboard aggregate counts.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"active_subscriptions":{"type":"integer","minimum":0},"feed_items_today":{"type":"integer","minimum":0}},"required":["active_subscriptions","feed_items_today"]}},"required":["summary"]}}}},"401":{"description":"Dashboard sign-in required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/settings":{"get":{"tags":["Settings"],"summary":"Get user settings","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"The signed-in user's settings.","content":{"application/json":{"schema":{"type":"object","properties":{"artifacts":{"type":"object","properties":{"language":{"type":"string","enum":["en","zh-CN","ja","ko","es","fr"]}},"required":["language"]}},"required":["artifacts"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}},"put":{"tags":["Settings"],"summary":"Update user settings","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"artifacts":{"type":"object","properties":{"language":{"type":"string","enum":["en","zh-CN","ja","ko","es","fr"]}},"required":["language"]}},"required":["artifacts"],"additionalProperties":false}}}},"responses":{"200":{"description":"The signed-in user's updated settings.","content":{"application/json":{"schema":{"type":"object","properties":{"artifacts":{"type":"object","properties":{"language":{"type":"string","enum":["en","zh-CN","ja","ko","es","fr"]}},"required":["language"]}},"required":["artifacts"]}}}},"400":{"description":"Invalid settings.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/integrations/telegram":{"get":{"tags":["Integrations"],"summary":"Get Telegram integration status","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"The signed-in user's Telegram binding status.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"connected":{"type":"boolean","enum":[false]}},"required":["connected"]},{"type":"object","properties":{"connected":{"type":"boolean","enum":[true]},"display_name":{"type":["string","null"]},"username":{"type":["string","null"]}},"required":["connected","display_name","username"]}]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}},"delete":{"tags":["Integrations"],"summary":"Disconnect Telegram integration","security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Telegram disconnected."},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/integrations/telegram/binding-link":{"post":{"tags":["Integrations"],"summary":"Create Telegram binding link","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"A one-time Telegram deep link for binding a private chat.","content":{"application/json":{"schema":{"type":"object","properties":{"binding_url":{"type":"string","format":"uri"}},"required":["binding_url"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/management/users":{"get":{"tags":["Management"],"summary":"List management users","responses":{"200":{"description":"Management user page.","content":{"application/json":{"schema":{"type":"object","properties":{"next_offset":{"type":["number","null"]},"offset":{"type":"number"},"total":{"type":"number"},"users":{"type":"array","items":{"type":"object","properties":{"active_subscription_count":{"type":"number"},"artifact_count":{"type":"number"},"created_at":{"type":"number"},"email":{"type":"string"},"email_verified":{"type":"boolean"},"id":{"type":"string"},"image":{"type":["string","null"]},"is_anonymous":{"type":"boolean"},"name":{"type":"string"},"telegram_connected":{"type":"boolean"},"updated_at":{"type":"number"}},"required":["active_subscription_count","artifact_count","created_at","email","email_verified","id","image","is_anonymous","name","telegram_connected","updated_at"]}}},"required":["next_offset","offset","total","users"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Management access required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/management/sources":{"get":{"tags":["Management"],"summary":"List management Sources","responses":{"200":{"description":"Management Source page.","content":{"application/json":{"schema":{"type":"object","properties":{"next_offset":{"type":["number","null"]},"offset":{"type":"number"},"sources":{"type":"array","items":{"type":"object","properties":{"active_subscription_count":{"type":"number"},"canonical_url":{"type":["string","null"]},"created_at":{"type":"number"},"feed_url":{"type":"string"},"id":{"type":"string"},"item_count":{"type":"number"},"last_error":{"type":["string","null"]},"last_polled_at":{"type":["number","null"]},"last_success_at":{"type":["number","null"]},"last_synced_at":{"type":["number","null"]},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["rss"]},"updated_at":{"type":"number"}},"required":["active_subscription_count","canonical_url","created_at","feed_url","id","item_count","last_error","last_polled_at","last_success_at","last_synced_at","status","title","type","updated_at"]}},"total":{"type":"number"}},"required":["next_offset","offset","sources","total"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Management access required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/management/artifacts":{"get":{"tags":["Management"],"summary":"List management artifacts","responses":{"200":{"description":"Management Artifact Record page.","content":{"application/json":{"schema":{"type":"object","properties":{"artifacts":{"type":"array","items":{"type":"object","properties":{"artifact_id":{"type":"string"},"audio_duration_ms":{"type":["number","null"]},"created_at":{"type":"number"},"status":{"type":"string","enum":["assembling","composing","composition_failed","failed","queued","ready","rendering"]},"title":{"type":"string"},"type":{"type":"string","enum":["audio_brief","briefing_page"]},"updated_at":{"type":"number"},"user_id":{"type":"string"},"viewer_url":{"type":"string","format":"uri"}},"required":["artifact_id","audio_duration_ms","created_at","status","title","type","updated_at","user_id","viewer_url"]}},"next_offset":{"type":["number","null"]},"offset":{"type":"number"},"total":{"type":"number"}},"required":["artifacts","next_offset","offset","total"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Management access required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/management/artifact-evals/topic-plan":{"post":{"tags":["Management"],"summary":"Create a Topic Plan artifact evaluation run","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"artifact_type":{"type":"string","enum":["audio_brief","briefing_page"]},"capacity":{"type":"object","additionalProperties":{},"default":{}},"feed_item_ids":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":200},"language":{"type":"string","minLength":1},"model":{"type":"string","enum":["deepseek-v4-flash","deepseek-v4-pro"]},"user_preference_context":{"type":"object","additionalProperties":{},"default":{}},"user_request":{"type":"string","minLength":1,"maxLength":4000}},"required":["artifact_type","feed_item_ids","language","user_request"],"additionalProperties":false}}}},"responses":{"202":{"description":"Topic Plan artifact eval run created.","content":{"application/json":{"schema":{"type":"object","properties":{"run_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["failed","queued","running","succeeded"]},"type":{"type":"string","enum":["audio-topic-script","audio-topic-workflow","newspaper-topic-module","topic-plan"]}},"required":["run_id","status","type"]}}}},"400":{"description":"Invalid artifact eval request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Management access required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"503":{"description":"Artifact eval workflow is unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/management/artifact-evals/audio-topic-script":{"post":{"tags":["Management"],"summary":"Create a downstream topic artifact evaluation run","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"topic_index":{"type":"integer","minimum":0},"topic_plan_run_id":{"type":"string","minLength":1}},"required":["topic_index","topic_plan_run_id"],"additionalProperties":false}}}},"responses":{"202":{"description":"Downstream topic artifact eval run created.","content":{"application/json":{"schema":{"type":"object","properties":{"run_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["failed","queued","running","succeeded"]},"type":{"type":"string","enum":["audio-topic-script","audio-topic-workflow","newspaper-topic-module","topic-plan"]}},"required":["run_id","status","type"]}}}},"400":{"description":"Invalid artifact eval request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Management access required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"404":{"description":"Parent Topic Plan eval run not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"503":{"description":"Artifact eval workflow is unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/management/artifact-evals/audio-topic-workflow":{"post":{"tags":["Management"],"summary":"Create a downstream topic artifact evaluation run","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"topic_index":{"type":"integer","minimum":0},"topic_plan_run_id":{"type":"string","minLength":1}},"required":["topic_index","topic_plan_run_id"],"additionalProperties":false}}}},"responses":{"202":{"description":"Downstream topic artifact eval run created.","content":{"application/json":{"schema":{"type":"object","properties":{"run_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["failed","queued","running","succeeded"]},"type":{"type":"string","enum":["audio-topic-script","audio-topic-workflow","newspaper-topic-module","topic-plan"]}},"required":["run_id","status","type"]}}}},"400":{"description":"Invalid artifact eval request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Management access required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"404":{"description":"Parent Topic Plan eval run not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"503":{"description":"Artifact eval workflow is unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/management/artifact-evals/newspaper-topic-module":{"post":{"tags":["Management"],"summary":"Create a downstream topic artifact evaluation run","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"topic_index":{"type":"integer","minimum":0},"topic_plan_run_id":{"type":"string","minLength":1}},"required":["topic_index","topic_plan_run_id"],"additionalProperties":false}}}},"responses":{"202":{"description":"Downstream topic artifact eval run created.","content":{"application/json":{"schema":{"type":"object","properties":{"run_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["failed","queued","running","succeeded"]},"type":{"type":"string","enum":["audio-topic-script","audio-topic-workflow","newspaper-topic-module","topic-plan"]}},"required":["run_id","status","type"]}}}},"400":{"description":"Invalid artifact eval request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Management access required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"404":{"description":"Parent Topic Plan eval run not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"503":{"description":"Artifact eval workflow is unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/artifact-compositions":{"post":{"tags":["Artifacts"],"summary":"Submit an Artifact Composition Request","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"artifact_type":{"type":"string","enum":["audio_brief","briefing_page"]},"language":{"type":"string","enum":["en","zh-CN","ja","ko","es","fr"]},"scope":{"type":"object","properties":{"item_ids":{"type":"array","items":{"type":"string","minLength":1}},"query":{"type":"string","minLength":1},"subscription_ids":{"type":"array","items":{"type":"string","minLength":1}},"time_window":{"type":"object","properties":{"end_ms":{"type":"integer","minimum":0},"start_ms":{"type":"integer","minimum":0}},"required":["end_ms","start_ms"]}},"default":{},"additionalProperties":false},"user_preference_context":{"type":"object","additionalProperties":{},"default":{}},"user_request":{"type":"string","minLength":1,"maxLength":4000}},"required":["artifact_type","user_request"],"additionalProperties":false}}}},"responses":{"202":{"description":"Artifact composition accepted.","content":{"application/json":{"schema":{"type":"object","properties":{"accepted":{"type":"boolean","enum":[true]},"artifact_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["composing"]},"viewer_url":{"type":"string","format":"uri"}},"required":["accepted","artifact_id","status","viewer_url"]}}}},"400":{"description":"Invalid artifact composition request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Skill Session required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"503":{"description":"Artifact composition runtime is unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/artifacts/{artifact_id}":{"get":{"tags":["Artifacts"],"summary":"Get public artifact viewer data","parameters":[{"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i"},"required":true,"name":"artifact_id","in":"path"}],"responses":{"200":{"description":"Public artifact viewer data.","content":{"application/json":{"schema":{"type":"object","properties":{"artifact_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i"},"artifact_data":{"type":"object","properties":{"artifact_type":{"type":"string","enum":["audio_brief","briefing_page"]},"format_reviews":{"type":"object","additionalProperties":{"type":"object","properties":{"checks":{"type":"array","items":{}},"errors":{"type":"array","items":{}},"reviewed_at":{"anyOf":[{"type":"integer","minimum":0},{"type":"string"}]},"summary":{"type":"string"},"verdict":{"type":"string"}},"required":["verdict"],"additionalProperties":{}}},"formats":{"anyOf":[{"type":"object","properties":{"newspaper":{"type":"object","properties":{"modules":{"type":"array","items":{}}},"additionalProperties":{}}},"required":["newspaper"],"additionalProperties":{}},{"type":"object","additionalProperties":{}}]},"render_metadata":{"type":"object","additionalProperties":{}}},"required":["artifact_type","format_reviews","formats"],"additionalProperties":{}},"audio_author":{"type":"string"},"audio_duration_ms":{"type":"integer","minimum":0},"audio_size_bytes":{"type":"integer","minimum":0},"audio_url":{"type":"string"},"cover_image_url":{"type":"string"},"coverage_summary":{"type":"object","properties":{"covered_unique_news_count":{"type":"integer","minimum":0},"coverage_rate":{"type":"number","minimum":0},"total_news_count":{"type":"integer","minimum":0}},"required":["covered_unique_news_count","coverage_rate","total_news_count"]},"content_type":{"type":"string","enum":["application/json","audio/mpeg"]},"download_url":{"type":"string"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]},"status":{"type":"string","enum":["assembling","composing","composition_failed","failed","queued","ready","rendering"]},"title":{"type":"string"},"transcript_text":{"type":"string"},"type":{"type":"string","enum":["audio_brief","briefing_page"]},"updated_at":{"type":"integer","minimum":0},"viewer_url":{"type":"string","format":"uri"}},"required":["artifact_id","status","title","type","viewer_url"]}}}},"400":{"description":"Invalid artifact id.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"404":{"description":"Artifact not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/artifacts/{artifact_id}/audio":{"get":{"tags":["Artifacts"],"summary":"Download public artifact audio","parameters":[{"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i"},"required":true,"name":"artifact_id","in":"path"}],"responses":{"200":{"description":"Ready Audio Brief MP3 bytes.","content":{"audio/mpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid artifact id.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"404":{"description":"Artifact not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"409":{"description":"Artifact audio is not ready.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/artifacts":{"get":{"tags":["Artifacts"],"summary":"List private artifacts","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Private artifacts visible to the signed-in user.","content":{"application/json":{"schema":{"type":"object","properties":{"artifacts":{"type":"array","items":{"type":"object","properties":{"artifact_id":{"type":"string","minLength":1},"audio_duration_ms":{"type":["integer","null"],"minimum":0},"status":{"type":"string","enum":["assembling","composing","composition_failed","failed","queued","ready","rendering"]},"title":{"type":"string"},"type":{"type":"string","enum":["audio_brief","briefing_page"]},"viewer_url":{"type":"string","format":"uri"}},"required":["artifact_id","status","title","type","viewer_url"]}}},"required":["artifacts"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/subscriptions":{"get":{"tags":["Subscriptions"],"summary":"List Subscriptions","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d+:.+$"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":200},"required":false,"name":"query","in":"query"}],"responses":{"200":{"description":"RSS/Atom Subscriptions currently visible to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"next_cursor":{"type":["string","null"]},"subscriptions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["rss"]},"title":{"type":"string","minLength":1},"feed_url":{"type":"string","format":"uri"},"site_url":{"type":["string","null"],"format":"uri"},"last_success_at":{"type":["integer","null"]},"last_error":{"type":["string","null"]},"created_at":{"type":"integer"},"updated_at":{"type":"integer"}},"required":["id","type","title","feed_url","site_url","last_success_at","last_error","created_at","updated_at"]}}},"required":["subscriptions"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}},"post":{"tags":["Subscriptions"],"summary":"Create or reactivate an RSS/Atom Subscription","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"feed_url":{"type":"string","format":"uri"}},"required":["feed_url"]}}}},"responses":{"200":{"description":"Existing Subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"subscription":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["rss"]},"title":{"type":"string","minLength":1},"feed_url":{"type":"string","format":"uri"},"site_url":{"type":["string","null"],"format":"uri"},"last_success_at":{"type":["integer","null"]},"last_error":{"type":["string","null"]},"created_at":{"type":"integer"},"updated_at":{"type":"integer"}},"required":["id","type","title","feed_url","site_url","last_success_at","last_error","created_at","updated_at"]},"created":{"type":"boolean"}},"required":["subscription","created"]}}}},"201":{"description":"Created or reactivated Subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"subscription":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["rss"]},"title":{"type":"string","minLength":1},"feed_url":{"type":"string","format":"uri"},"site_url":{"type":["string","null"],"format":"uri"},"last_success_at":{"type":["integer","null"]},"last_error":{"type":["string","null"]},"created_at":{"type":"integer"},"updated_at":{"type":"integer"}},"required":["id","type","title","feed_url","site_url","last_success_at","last_error","created_at","updated_at"]},"created":{"type":"boolean"}},"required":["subscription","created"]}}}},"400":{"description":"Invalid feed URL or non-RSS/Atom document.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Dashboard write Origin forbidden.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"409":{"description":"User has reached the active Subscription limit.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"500":{"description":"Subscription could not be created after feed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"502":{"description":"Feed URL could not be fetched for validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/subscriptions/{subscription_id}":{"delete":{"tags":["Subscriptions"],"summary":"Soft-unsubscribe from a Subscription","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"subscription_id","in":"path"}],"responses":{"204":{"description":"Subscription deleted."},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Dashboard write Origin forbidden.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"404":{"description":"Subscription not found or already deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/items":{"get":{"tags":["Items"],"summary":"List Feed Items","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"subscription_id","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"keyword","in":"query"},{"schema":{"type":["integer","null"]},"required":false,"name":"published_after","in":"query"},{"schema":{"type":["integer","null"]},"required":false,"name":"published_before","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","pattern":"^\\d+:.+$"},"required":false,"name":"cursor","in":"query"},{"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"array","items":{"type":"string","minLength":1}}]},"required":false,"name":"ids","in":"query"},{"schema":{"type":["boolean","null"],"default":false},"required":false,"name":"search_content","in":"query"}],"responses":{"200":{"description":"Feed Items visible through the user's active Subscriptions.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"subscription":{"type":"object","properties":{"id":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"feed_url":{"type":"string","minLength":1}},"required":["id","title","feed_url"]},"title":{"type":"string","minLength":1},"author":{"type":["string","null"]},"url":{"type":["string","null"]},"published_at":{"type":["integer","null"]},"summary":{"type":["string","null"]},"created_at":{"type":"integer"}},"required":["id","subscription","title","author","url","published_at","summary","created_at"]}},"next_cursor":{"type":["string","null"]}},"required":["items","next_cursor"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Dashboard Feed Item listing requires a Subscription filter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}},"/v1/items/{item_id}":{"get":{"tags":["Items"],"summary":"Get a Feed Item","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"item_id","in":"path"},{"schema":{"type":"string","pattern":"^\\d+$"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20000,"default":12000},"required":false,"name":"max_chars","in":"query"},{"schema":{"type":["boolean","null"],"default":false},"required":false,"name":"include_raw","in":"query"}],"responses":{"200":{"description":"A visible Feed Item.","content":{"application/json":{"schema":{"type":"object","properties":{"item":{"type":"object","properties":{"id":{"type":"string","minLength":1},"subscription":{"type":"object","properties":{"id":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"feed_url":{"type":"string","minLength":1}},"required":["id","title","feed_url"]},"title":{"type":"string","minLength":1},"author":{"type":["string","null"]},"url":{"type":["string","null"]},"published_at":{"type":["integer","null"]},"summary":{"type":["string","null"]},"created_at":{"type":"integer"},"content_text":{"type":["string","null"]},"raw":{"type":"object","properties":{"content_raw":{"type":["string","null"]}}}},"required":["id","subscription","title","author","url","published_at","summary","created_at"]},"next_content_cursor":{"type":["string","null"]}},"required":["item","next_content_cursor"]}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"403":{"description":"Dashboard sessions cannot read Feed Item content.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"404":{"description":"Feed Item not found or not visible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}}}}},"webhooks":{}}