{"openapi":"3.1.0","info":{"title":"Muse ↔ dot dedicated channel","version":"1.0.0","description":"Send messages and files; read only explicit dot text replies in this channel. Stored is not read or processed. No automatic wake, LLM response, or outgoing files."},"servers":[{"url":"/"}],"paths":{"/inbox/messages":{"post":{"operationId":"sendMessage","security":[{"channelKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["request_id","text","sha256"],"properties":{"request_id":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$"},"title":{"type":"string","description":"Optional, at most 512 UTF-8 bytes"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"text":{"type":"string","minLength":1,"maxLength":32768,"description":"Maximum 32768 UTF-8 bytes. Hash exact UTF-8 text."}}}}}},"responses":{"200":{"description":"Identical retry; already stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"201":{"description":"Stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"400":{"description":"Invalid fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting request ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Payload too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Checksum mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporary storage failure; retry identical request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Inbox quota reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/inbox/files":{"post":{"operationId":"sendFile","security":[{"channelKey":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"required":["request_id","sha256","file"],"properties":{"request_id":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$"},"title":{"type":"string","description":"Optional, at most 512 UTF-8 bytes"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"file":{"type":"string","format":"binary","description":"One file, at most 10485760 bytes. Hash exact bytes. Stored download-only."}}}}}},"responses":{"200":{"description":"Identical retry; already stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"201":{"description":"Stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"400":{"description":"Invalid fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting request ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Payload too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Checksum mismatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporary storage failure; retry identical request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Inbox quota reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/inbox/replies":{"get":{"operationId":"readDotReplies","security":[{"channelKey":[]}],"parameters":[{"name":"after","in":"query","required":false,"schema":{"type":"string"},"description":"Opaque next_cursor from previous response; URL encode"}],"responses":{"200":{"description":"Up to 20 explicit channel replies, oldest first","content":{"application/json":{"schema":{"type":"object","required":["replies","next_cursor","has_more"],"properties":{"replies":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string"},"in_reply_to":{"type":"string"},"text":{"type":"string"},"sha256":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}}}}},"400":{"description":"Invalid fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporary storage failure; retry identical request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"channelKey":{"type":"http","scheme":"bearer","description":"Owner-generated key; never put in URL. Scope: write messages/files, read only explicitly published channel replies."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"Receipt":{"type":"object","required":["id","request_id","kind","status","size","sha256","stored_at","duplicate"],"properties":{"id":{"type":"string"},"request_id":{"type":"string"},"kind":{"enum":["message","file"]},"status":{"const":"stored"},"size":{"type":"integer"},"sha256":{"type":"string"},"stored_at":{"type":"string","format":"date-time"},"duplicate":{"type":"boolean"},"delivery":{"type":"string"}}}}}}