{"openapi":"3.1.0","info":{"title":"Pix Pulse Recipe Discovery","description":"Public recipe-search capability for Pix Pulse cooking videos.","version":"1.0.0"},"paths":{"/v1/discovery/did.json":{"get":{"tags":["discovery"],"summary":"did:web DID document for Pixmoto","description":"Returns the did:web DID document for this environment, derived from PLAYER_BASE_URL.  Contains the public JsonWebKey2020 verification method corresponding to the ES256 signing key that signs the ai-catalog. Returns 404 when no signing key is configured (unsigned-mode environments have no DID to publish). pix-pulse proxies this endpoint at /.well-known/did.json.","operationId":"discovery_did_document_v1_discovery_did_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/discovery/ai-catalog":{"get":{"tags":["discovery"],"summary":"ARD ai-catalog for Pixmoto","description":"Returns the canonical Agentic Resource Discovery catalog for Pixmoto. The catalog is authored from pix-arcs-api settings and carries an ES256 detached JWS signature in trustManifest.signature when the signing key is configured.  pix-pulse proxies this endpoint verbatim at /.well-known/ai-catalog.json.","operationId":"discovery_ai_catalog_v1_discovery_ai_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/discovery/search":{"post":{"tags":["discovery"],"summary":"Search Pix Pulse cooking recipes","description":"Search Pix Pulse — where real human cooking attention thrives. Returns matching cooking recipes with ingredients, method, a canonical video URL, and related products.","operationId":"discovery_search_v1_discovery_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverySearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverySearchRestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/discovery/health":{"get":{"tags":["discovery"],"summary":"Discovery surface health","description":"Liveness of the public discovery API. Referenced as the 'status' link relation from the RFC 9727 API catalog.","operationId":"discovery_health_v1_discovery_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/discovery/api-catalog":{"get":{"tags":["discovery"],"summary":"RFC 9727 API catalog (linkset)","description":"Returns the application/linkset+json API catalog advertising the OpenAPI description (service-desc), documentation (service-doc), and health resource (status). pix-pulse proxies this at /.well-known/api-catalog.","operationId":"discovery_api_catalog_v1_discovery_api_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/discovery/mcp-server-card":{"get":{"tags":["discovery"],"summary":"MCP Server Card (SEP-1649)","description":"Server card for the public Pix Pulse recipe-discovery MCP server (serverInfo, transport, capabilities). pix-pulse proxies this at /.well-known/mcp/server-card.json.","operationId":"discovery_mcp_server_card_v1_discovery_mcp_server_card_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/discovery/agent-skills/index.json":{"get":{"tags":["discovery"],"summary":"Agent Skills discovery index (v0.2.0)","description":"Index of published agent skills. pix-pulse proxies this at /.well-known/agent-skills/index.json.","operationId":"discovery_agent_skills_index_v1_discovery_agent_skills_index_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/discovery/agent-skills/recipe-search/SKILL.md":{"get":{"tags":["discovery"],"summary":"recipe-search SKILL.md","description":"Markdown skill definition for recipe search. pix-pulse proxies this at /.well-known/agent-skills/recipe-search/SKILL.md.","operationId":"discovery_agent_skill_recipe_search_v1_discovery_agent_skills_recipe_search_SKILL_md_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"DiscoveryFacetValue":{"properties":{"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["name","count"],"title":"DiscoveryFacetValue"},"DiscoveryProduct":{"properties":{"name":{"type":"string","title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"}},"type":"object","required":["name"],"title":"DiscoveryProduct"},"DiscoveryPublisher":{"properties":{"name":{"type":"string","title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["name"],"title":"DiscoveryPublisher","description":"The publishing brand behind a recipe (the authoring authority)."},"DiscoveryRecipe":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"ingredients":{"items":{"type":"string"},"type":"array","title":"Ingredients"},"method":{"items":{"type":"string"},"type":"array","title":"Method"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"prep_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prep Time"},"cook_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cook Time"},"total_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Time"},"serves":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Serves"},"calories":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Calories"}},"type":"object","title":"DiscoveryRecipe"},"DiscoveryRestHit":{"properties":{"experience_id":{"type":"integer","title":"Experience Id"},"url":{"type":"string","title":"Url"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"publisher":{"anyOf":[{"$ref":"#/components/schemas/DiscoveryPublisher"},{"type":"null"}]},"recipe":{"$ref":"#/components/schemas/DiscoveryRecipe"},"products":{"items":{"$ref":"#/components/schemas/DiscoveryProduct"},"type":"array","title":"Products"}},"type":"object","required":["experience_id","url","recipe"],"title":"DiscoveryRestHit"},"DiscoverySearchRequest":{"properties":{"q":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Q"},"meal":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Meal"},"occasion":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Occasion"},"cuisine":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Cuisine"},"ingredient":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Ingredient"},"diet":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Diet"},"cooking_method":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Cooking Method"},"meal_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":50},{"type":"null"}],"title":"Meal Ids"},"occasion_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":50},{"type":"null"}],"title":"Occasion Ids"},"cuisine_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":50},{"type":"null"}],"title":"Cuisine Ids"},"ingredient_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":50},{"type":"null"}],"title":"Ingredient Ids"},"diet_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":50},{"type":"null"}],"title":"Diet Ids"},"cooking_method_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":50},{"type":"null"}],"title":"Cooking Method Ids"},"tag_names":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Tag Names"},"ingredients":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Ingredients"},"exclude_ingredients":{"anyOf":[{"items":{"type":"string","maxLength":64},"type":"array","maxItems":50},{"type":"null"}],"title":"Exclude Ingredients"},"max_total_time_minutes":{"anyOf":[{"type":"integer","maximum":1440.0,"minimum":1.0},{"type":"null"}],"title":"Max Total Time Minutes"},"sort":{"type":"string","enum":["relevance","quickest"],"title":"Sort","default":"relevance"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":20}},"type":"object","title":"DiscoverySearchRequest"},"DiscoverySearchRestResponse":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"total":{"type":"integer","title":"Total"},"results":{"items":{"$ref":"#/components/schemas/DiscoveryRestHit"},"type":"array","title":"Results"},"facets":{"additionalProperties":{"items":{"$ref":"#/components/schemas/DiscoveryFacetValue"},"type":"array"},"type":"object","title":"Facets"},"applied_filters":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Applied Filters"},"unresolved_filters":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Unresolved Filters"},"effective_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Query"},"facets_scope":{"type":"string","enum":["query","catalogue"],"title":"Facets Scope","default":"query"},"excluded_no_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Excluded No Time"},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint"}},"type":"object","required":["total"],"title":"DiscoverySearchRestResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}