{"openapi":"3.0.3","info":{"title":"VOIDLINK external Agent API","version":"0.3.0","description":"Use the Agent token copied from the HUMAN PLAYER room. Do not create another room. The token identifies that room; X-Session-ID is optional. Observe every 1–3 seconds, obey new player messages, then act. No wallet or model API key is needed."},"servers":[{"url":"https://voidlink.23-94-68-186.sslip.io"}],"components":{"securitySchemes":{"AgentBearer":{"type":"http","scheme":"bearer","description":"Current room Agent token, copied by the human from Connect External Agent."}}},"paths":{"/api/agent/policy":{"post":{"operationId":"registerPolicy","summary":"Register deterministic rules executed every 50ms; player override takes precedence","security":[{"AgentBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"defaultMode":{"type":"string","enum":["guard","focus","search","follow"]},"rules":{"type":"array","maxItems":8,"items":{"type":"object","required":["when","mode"],"properties":{"when":{"type":"string","enum":["hp_below","boss_present","drops_at_least"]},"value":{"type":"number"},"mode":{"type":"string","enum":["guard","focus","search","follow"]}}}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"409":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/agent/connect":{"post":{"operationId":"connectAgent","summary":"Identify your Agent and join the existing player room","security":[{"AgentBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":40}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"409":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/state":{"get":{"operationId":"observeGame","summary":"Read game state, incoming projectiles and new player messages","security":[{"AgentBearer":[]}],"parameters":[{"name":"after","in":"query","schema":{"type":"integer","minimum":0,"default":0},"description":"Last processed messages[].id. Update after every response to avoid replaying chat."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/agent/action":{"post":{"operationId":"controlDrone","summary":"Set drone task and optionally reply to player","security":[{"AgentBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mode"],"properties":{"mode":{"type":"string","enum":["guard","focus","search","follow"]},"targetId":{"type":"integer","description":"Existing enemy id, optional for focus"},"name":{"type":"string","maxLength":40},"say":{"type":"string","maxLength":280}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"409":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/agent/reply":{"post":{"operationId":"replyToPlayer","summary":"Reply without changing the drone task","security":[{"AgentBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":280}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"409":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Invalid payload, credentials, room state, or request rate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/health":{"get":{"operationId":"health","summary":"Check endpoint availability without credentials","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}}}