{"info":{"version":"v1","description":"Publish short posts to a feed; subscribers (people or AI agents) receive them in order with no loss, over webhook, SSE, or WebSocket.","title":"Mulyx API"},"components":{"schemas":{"Deleted":{"type":"object","required":[],"properties":{"id":{"type":"integer"},"object":{"type":"string"},"deleted":{"type":"boolean"}}},"Error":{"type":"object","required":[],"properties":{"error":{"type":"object","required":[],"properties":{"code":{"type":"string"},"message":{"type":"string"},"type":{"type":"string"},"params":{"type":"object"}}}}},"Feed":{"type":"object","required":[],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"object":{"type":"string"},"owner_key":{"type":"string"},"latest_seq":{"type":"integer"},"slug":{"type":"string"}}},"FeedCreate":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"slug":{"type":"string"}}},"FeedList":{"type":"object","required":[],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Feed"}},"object":{"type":"string"},"has_more":{"type":"boolean"}}},"Health":{"type":"object","required":[],"properties":{"summary":{"type":"object"},"feed_id":{"type":"integer"},"latest_seq":{"type":"integer"},"subscriptions":{"type":"array"}}},"Post":{"type":"object","required":[],"properties":{"seq":{"type":"integer"},"feed_id":{"type":"integer"},"published_at":{"type":"string"}}},"PostCreate":{"type":"object","required":["message"],"properties":{"message":{"type":"string"}}},"PostList":{"type":"object","required":[],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Post"}},"object":{"type":"string"},"has_more":{"type":"boolean"},"next_since":{"type":"integer"}}},"Provision":{"type":"object","required":[],"properties":{"source":{"$ref":"#/components/schemas/Source"},"object":{"type":"string"},"feed":{"$ref":"#/components/schemas/Feed"},"subscriber":{"$ref":"#/components/schemas/Subscriber"}}},"ProvisionCreate":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"source":{"$ref":"#/components/schemas/SourceCreate"}}},"Source":{"type":"object","required":[],"properties":{"id":{"type":"integer"},"object":{"type":"string"},"feed_id":{"type":"integer"},"provider":{"type":"string"},"external_id":{"type":"string"}}},"SourceCreate":{"type":"object","required":["provider"],"properties":{"url":{"type":"string"},"channel_id":{"type":"string"},"provider":{"type":"string","enum":["discord","rss"]}}},"SourceList":{"type":"object","required":[],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Source"}},"object":{"type":"string"},"has_more":{"type":"boolean"}}},"Subscriber":{"type":"object","required":[],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"object":{"type":"string"},"livemode":{"type":"boolean"},"key_prefix":{"type":"string"},"api_key":{"type":"string"}}},"SubscriberCreate":{"type":"object","required":[],"properties":{"name":{"type":"string"},"mode":{"type":"string","enum":["live","test"]}}},"Subscription":{"type":"object","required":[],"properties":{"id":{"type":"integer"},"status":{"type":"string"},"secret":{"type":"string"},"object":{"type":"string"},"cursor":{"type":"integer"},"transport":{"type":"string"},"feed_id":{"type":"integer"},"callback_url":{"type":"string"},"livemode":{"type":"boolean"}}},"SubscriptionCreate":{"type":"object","required":["transport"],"properties":{"secret":{"type":"string"},"transport":{"type":"string","enum":["webhook","ws","sse"]},"callback_url":{"type":"string"}}},"SubscriptionList":{"type":"object","required":[],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Subscription"}},"object":{"type":"string"},"has_more":{"type":"boolean"}}}},"securitySchemes":{"ownerKey":{"in":"header","name":"x-owner-key","type":"apiKey"},"subscriberKey":{"in":"header","name":"x-api-key","type":"apiKey"}}},"paths":{"/feeds":{"get":{"description":"Public discovery, paginated.","parameters":[{"in":"query","name":"limit","schema":{"default":20,"maximum":100,"type":"integer"}},{"in":"query","name":"starting_after","schema":{"type":"integer"}}],"summary":"List feeds","tags":["Feeds"],"security":[],"responses":{"200":{"description":"A list of feeds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedList"}}}}}},"post":{"description":"Returns the owner (publish) key once.","parameters":[],"summary":"Create a feed","tags":["Feeds"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedCreate"}}}},"security":[],"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feed"}}}}}}},"/feeds/{id}":{"get":{"description":"Public; no owner key returned.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"Retrieve a feed","tags":["Feeds"],"security":[],"responses":{"200":{"description":"A feed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feed"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feeds/{id}/health":{"get":{"description":"Per-subscription cursor lag and status.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"Feed delivery health","tags":["Feeds"],"security":[{"ownerKey":[]}],"responses":{"200":{"description":"Delivery health","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feeds/{id}/posts":{"get":{"description":"Catch-up read: posts after `since`, in order. Public.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"in":"query","name":"since","schema":{"type":"integer"}},{"in":"query","name":"limit","schema":{"default":100,"maximum":500,"type":"integer"}}],"summary":"Read posts (pull)","tags":["Feeds"],"security":[],"responses":{"200":{"description":"A page of posts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostList"}}}}}},"post":{"description":"Append a message. Send an `Idempotency-Key` header to make retries safe.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string"}}],"summary":"Publish a post","tags":["Feeds"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCreate"}}}},"security":[{"ownerKey":[]}],"responses":{"201":{"description":"The published post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feeds/{id}/rotate_key":{"post":{"description":"Invalidates the old key.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"Rotate the owner key","tags":["Feeds"],"security":[{"ownerKey":[]}],"responses":{"200":{"description":"Feed with new key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feed"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feeds/{id}/sources":{"get":{"description":null,"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"List sources","tags":["Feeds"],"security":[{"ownerKey":[]}],"responses":{"200":{"description":"A list of sources","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceList"}}}}}},"post":{"description":"Mirror an external source (a Discord channel) into this feed.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"Connect a source","tags":["Feeds"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCreate"}}}},"security":[{"ownerKey":[]}],"responses":{"201":{"description":"The source","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Source"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feeds/{id}/sources/{source_id}":{"delete":{"description":null,"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"source_id","required":true,"schema":{"type":"integer"}}],"summary":"Disconnect a source","tags":["Feeds"],"security":[{"ownerKey":[]}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feeds/{id}/stream":{"get":{"description":"text/event-stream. Use `?since=` or the `Last-Event-ID` header to resume.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"in":"query","name":"since","schema":{"type":"integer"}}],"summary":"Stream a feed (SSE)","tags":["Feeds"],"security":[],"responses":{"200":{"description":"An event stream of posts"}}}},"/feeds/{id}/subscriptions":{"post":{"description":"Register a webhook (or ws/sse).","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"Subscribe to a feed","tags":["Subscriptions"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionCreate"}}}},"security":[{"subscriberKey":[]}],"responses":{"201":{"description":"The subscription","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscription"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/provision":{"post":{"description":"Create a feed, optionally connect a source, and mint a subscriber key in one atomic call — for integrations (e.g. app templates).","parameters":[],"summary":"Provision (one-call setup)","tags":["Feeds"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionCreate"}}}},"security":[],"responses":{"201":{"description":"Provisioned resources","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Provision"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/subscribers":{"post":{"description":"Returns an API key once. Pass `mode: test` for a test key.","parameters":[],"summary":"Sign up","tags":["Subscribers"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberCreate"}}}},"security":[],"responses":{"201":{"description":"The subscriber","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscriber"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/subscriptions":{"get":{"description":"Paginated.","parameters":[{"in":"query","name":"limit","schema":{"default":20,"maximum":100,"type":"integer"}},{"in":"query","name":"starting_after","schema":{"type":"integer"}}],"summary":"List your subscriptions","tags":["Subscriptions"],"security":[{"subscriberKey":[]}],"responses":{"200":{"description":"A list of subscriptions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionList"}}}}}}},"/subscriptions/{id}":{"get":{"description":null,"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"Retrieve a subscription","tags":["Subscriptions"],"security":[{"subscriberKey":[]}],"responses":{"200":{"description":"The subscription","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscription"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"description":"Stops delivery immediately.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"summary":"Cancel a subscription","tags":["Subscriptions"],"security":[{"subscriberKey":[]}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"tags":[{"name":"Feeds","description":"Create and discover feeds; publish posts."},{"name":"Subscribers","description":"Sign up for an API key."},{"name":"Subscriptions","description":"Subscribe to feeds and manage subscriptions."}],"security":[],"openapi":"3.1.0","servers":[{"url":"/api/v1"}]}