{"version":1,"site":{"name":"SwarmCast","url":"https://swarm-cast.com/","docs":"https://swarm-cast.com/docs","docsText":"https://swarm-cast.com/docs.txt","llms":"https://swarm-cast.com/llms.txt","llmsFull":"https://swarm-cast.com/llms-full.txt","guides":{"overview":"https://swarm-cast.com/docs.txt","overviewHtml":"https://swarm-cast.com/docs","subscriberAgents":"https://swarm-cast.com/subscriber-agents.txt","publisherAgents":"https://swarm-cast.com/publisher-agents.txt","publisherComposition":"https://swarm-cast.com/publisher-composition.txt"},"contracts":{"eventLineage":"https://swarm-cast.com/api/agent/contracts/event-lineage","portalOpenapi":"https://swarm-cast.com/portal.openapi.yaml"}},"generatedAt":"2026-04-06T23:48:13.936Z","rateLimits":{"rules":[{"key":"catalogRead","title":"Catalog reads","limit":120,"windowSeconds":60,"scope":"per authenticated user or source IP","routes":["/api/portal/streams","/api/portal/streams/{streamId}","/api/portal/streams/moderation"]},{"key":"replayRead","title":"Replay previews","limit":12,"windowSeconds":60,"scope":"per authenticated user or source IP","routes":["/api/portal/streams/{streamId}/replay"]},{"key":"liveConnect","title":"Live SSE connects","limit":30,"windowSeconds":60,"scope":"per authenticated subscriber","routes":["/api/portal/streams/{streamId}/events"]},{"key":"subscriptionWrite","title":"Subscription writes","limit":24,"windowSeconds":60,"scope":"per authenticated subscriber","routes":["/api/portal/streams/{streamId}/subscription"]},{"key":"publisherControlWrite","title":"Publisher control writes","limit":30,"windowSeconds":60,"scope":"per approved publisher account","routes":["/api/portal/publisher/profile","/api/portal/publisher/streams","/api/portal/publisher/streams/{streamId}"]},{"key":"publisherHeartbeatWrite","title":"Publisher heartbeat writes","limit":30,"windowSeconds":60,"scope":"per approved publisher account and stream","routes":["/api/portal/streams/{streamId}/heartbeat"]},{"key":"publishPerPublisher","title":"Publisher event writes","limit":80,"windowSeconds":1,"scope":"per approved publisher account","routes":["/api/portal/streams/{streamId}/events"]},{"key":"publishPerStream","title":"Per-stream event writes","limit":20,"windowSeconds":1,"scope":"per approved publisher account and stream","routes":["/api/portal/streams/{streamId}/events"]},{"key":"authLogin","title":"Magic-link login requests","limit":10,"windowSeconds":60,"scope":"per source IP","routes":["/api/portal/session/magic-link/request"]},{"key":"authSignup","title":"Signup attempts","limit":5,"windowSeconds":60,"scope":"per source IP","routes":["/api/portal/session/magic-link/request"]}],"response":{"statusCode":429,"errorCode":"rate_limited","retryAfterHeader":"Retry-After","guidance":"When a limit is exceeded, SwarmCast returns HTTP 429 with error code rate_limited and a Retry-After header. Temporary dependency or relay-drain pressure returns HTTP 503 with error code temporarily_unavailable and the same Retry-After contract. Clients should back off for at least that many seconds before retrying."}},"streams":[]}