{"openapi": "3.1.0", "info": {"title": "Agent Relay", "version": "2.0.0", "description": "Access to Hady's Beeper account: every connected network (WhatsApp, Signal, Messenger, Instagram, LinkedIn, Beeper/Matrix). List and search chats and messages, read any chat, and send text as Hady. Sends need an exact chat ID and are sent under Hady's name to real people. Also two agent channels: 'claude-code' and 'codex' (posts there are tagged [muse] automatically; replies come back tagged [claude] or [codex]). Auth: Authorization: Bearer <API key>."}, "servers": [{"url": "https://oracle-vm.tail4a6b03.ts.net"}], "components": {"securitySchemes": {"bearer": {"type": "http", "scheme": "bearer"}}}, "security": [{"bearer": []}], "paths": {"/v1/accounts": {"get": {"operationId": "listAccounts", "summary": "Connected chat accounts", "responses": {"200": {"description": "OK"}}}}, "/v1/chats": {"get": {"operationId": "listChats", "summary": "Recent chats, newest activity first", "parameters": [{"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 20}}, {"name": "account", "in": "query", "description": "Network or account ID, e.g. whatsapp", "schema": {"type": "string"}}, {"name": "unread", "in": "query", "schema": {"type": "boolean"}}], "responses": {"200": {"description": "OK"}}}}, "/v1/chats/search": {"get": {"operationId": "searchChats", "summary": "Find chats by title or participant", "parameters": [{"name": "q", "in": "query", "required": true, "schema": {"type": "string"}}, {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 20}}], "responses": {"200": {"description": "OK"}}}}, "/v1/chats/{chat_id}/messages": {"get": {"operationId": "listChatMessages", "summary": "Read recent messages in a chat, oldest first", "parameters": [{"name": "chat_id", "in": "path", "required": true, "description": "Exact chat ID from listChats/searchChats (URL-encode it)", "schema": {"type": "string"}}, {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 20}}, {"name": "after", "in": "query", "description": "Only messages after this message id", "schema": {"type": "string"}}], "responses": {"200": {"description": "OK"}}}, "post": {"operationId": "sendChatMessage", "summary": "Send a text message as Hady", "parameters": [{"name": "chat_id", "in": "path", "required": true, "description": "Exact chat ID from listChats/searchChats (URL-encode it)", "schema": {"type": "string"}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["text"], "properties": {"text": {"type": "string", "maxLength": 8000}}}}}}, "responses": {"200": {"description": "Sent"}, "429": {"description": "Rate limited"}}}}, "/v1/messages/search": {"get": {"operationId": "searchMessages", "summary": "Search messages across all chats", "parameters": [{"name": "q", "in": "query", "schema": {"type": "string"}}, {"name": "chat_id", "in": "query", "schema": {"type": "string"}}, {"name": "after", "in": "query", "description": "ISO timestamp", "schema": {"type": "string"}}, {"name": "before", "in": "query", "description": "ISO timestamp", "schema": {"type": "string"}}, {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 20}}], "responses": {"200": {"description": "OK"}}}}, "/v1/channels": {"get": {"operationId": "listChannels", "summary": "List agent channels", "responses": {"200": {"description": "OK"}}}}, "/v1/channels/{channel}/messages": {"get": {"operationId": "listMessages", "summary": "Read an agent channel, oldest first", "parameters": [{"name": "channel", "in": "path", "required": true, "schema": {"type": "string", "enum": ["claude-code", "codex"]}}, {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 20}}, {"name": "after", "in": "query", "description": "Only messages after this message id", "schema": {"type": "string"}}], "responses": {"200": {"description": "OK"}}}, "post": {"operationId": "sendMessage", "summary": "Post to an agent channel as [muse]", "parameters": [{"name": "channel", "in": "path", "required": true, "schema": {"type": "string", "enum": ["claude-code", "codex"]}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["text"], "properties": {"text": {"type": "string", "maxLength": 8000}}}}}}, "responses": {"200": {"description": "Sent"}, "429": {"description": "Rate limited"}}}}}}