3.7 KiB
3.7 KiB
LobeHub Cloud Internal Chat Endpoint (2026-07-05)
Discovery
POST https://app.lobehub.com/webapi/chat/lobehub is exposed but requires a live browser session with Cloudflare clearance (cf_clearance) and a valid Better Auth session cookie. Direct curl from a datacenter IP fails with 403/500 even with a valid API key.
The programmatic chat path discovered via Playwright network capture is the tRPC call:
POST https://app.lobehub.com/trpc/lambda/aiAgent.execAgent?batch=1
GET https://app.lobehub.com/trpc/lambda/message.getMessages
Execute agent
import requests, json, time
s = requests.Session()
# ... login first (see cloud-apikey-trpc-bypass-2026-07-05.md) ...
r = s.post("https://app.lobehub.com/trpc/lambda/aiAgent.execAgent?batch=1", headers={
"Origin": "https://app.lobehub.com",
"Referer": "https://app.lobehub.com/",
"Content-Type": "application/json",
}, json={
"0": {
"json": {
"agentId": "agt_CuyRvAsGEBtc",
"appContext": {
"agentDocumentId": None,
"defaultTaskAssigneeAgentId": None,
"documentId": None,
"groupId": None,
"orchestrationRole": None,
"scope": None,
"taskId": None,
"threadId": None,
"topicId": None,
},
"prompt": "Say hi in one word",
"deviceId": None,
"fileIds": [],
"parentMessageId": None,
"resumeApproval": None,
"selectedToolIds": None,
"trigger": None,
"userInterventionConfig": {"approvalMode": "manual", "allowList": []},
},
"meta": {
"values": {
"appContext.agentDocumentId": ["undefined"],
"appContext.defaultTaskAssigneeAgentId": ["undefined"],
"appContext.documentId": ["undefined"],
"appContext.groupId": ["undefined"],
"appContext.orchestrationRole": ["undefined"],
"appContext.scope": ["undefined"],
"appContext.taskId": ["undefined"],
"appContext.threadId": ["undefined"],
"appContext.topicId": ["undefined"],
"deviceId": ["undefined"],
"parentMessageId": ["undefined"],
"resumeApproval": ["undefined"],
"selectedToolIds": ["undefined"],
"trigger": ["undefined"],
},
"v": 1,
},
}
}, timeout=60)
data = r.json()[0]["result"]["data"]["json"]
topic_id = data["topicId"]
message_id = data["messageId"]
Poll for response
for attempt in range(15):
time.sleep(3)
r = s.get("https://app.lobehub.com/trpc/lambda/message.getMessages", params={
"batch": "1",
"input": json.dumps({"0": {"json": {
"agentId": "agt_CuyRvAsGEBtc",
"isolatedTopic": True,
"topicId": topic_id,
}}}},
headers={"Origin": "https://app.lobehub.com", "Referer": "https://app.lobehub.com/"},
timeout=15,
)
msgs = r.json()[0]["result"]["data"]["json"]
for msg in msgs:
print(msg.get("role"), msg.get("content"))
Observed models in chat UI
gpt-5.4-minigpt-5.5claude-sonnet-5claude-fable-5nano-banana-2-liteseedance-2.0
Notes
/api/v1/modelsand/api/v1/chat/completionsare not functional entry points for Cloud.- A full OpenAI-compatible proxy would need to wrap
aiAgent.execAgent+message.getMessagespolling. - This was verified from DO server
[REDACTED-IP]; local/DC IPs are blocked by Cloudflare for the tRPC endpoints too unless session +cf_clearancecookies are present.