1 USD ≈ 27,000 credits · display only
Reference rate may change over time.
1 USD ≈ 27,000 credits · display only
Reference rate may change over time.
Upstream: POST https://api.gommo.net/api/v2/chat (form urlencoded).
Playground
Playground — worker picker Platform → Chat (search chat) or sidebar Platform → Chat when ?dev=1. Multi-turn UI: /app/chat/.
| Operation | Gommo public API |
|---|---|
| Chat agent | POST https://api.gommo.net/api/v2/chat action=chat |
| Chat stream | POST https://api.gommo.net/api/v2/chat action=stream (SSE) |
| Set model | POST https://api.gommo.net/api/v2/chat action=set_model |
| Field | Notes |
|---|---|
action | chat, stream, set_model, models |
access_token | User token (or use Bearer header) |
domain | Registration domain, e.g. <registration-domain> |
query | User message text |
messages | JSON array — required non-empty for action=chat |
sessionId | Optional — multi-turn; upstream form often uses chat_id (same UUID) |
language | Optional — UI locale for upstream (capture uses VI, EN) |
Gateway fills defaults from env when omitted. Set explicitly when you manage models/sessions yourself:
| Field | When |
|---|---|
model, server, agent_id | set_model, stream — model routing |
chat_id | Session UUID (set_model, chat) |
project_id | Some stream payloads |
chat_tools | JSON e.g. {"web_search":true,"web_fetch":false} on stream |
system_custom_prompt / custom_system_prompt | Override system prompt |
device_* | Same as other platform forms |
WARNING
Upstream action=chat requires non-empty messages. Send at least one { "role": "user", "text": "..." }.
action=stream → SSE response.
curl.exe -X POST "https://api.gommo.net/api/v2/chat" ^
-H "Content-Type: application/x-www-form-urlencoded" ^
-d "action=chat&access_token=%TOKEN%&domain=%REGISTRATION_DOMAIN%&query=Hello&messages=[{\"role\":\"user\",\"text\":\"Hello\"}]"$d = $env:GOMMO_API_DOMAIN; if (-not $d) { throw 'Set GOMMO_API_DOMAIN to the user registration domain (dealer)' }
$messages = '[{"role":"user","text":"Hello"}]'
$form = "action=chat&access_token=$env:TOKEN&domain=$d&query=Hello&messages=$messages"
Invoke-RestMethod -Method POST -Uri "https://api.gommo.net/api/v2/chat" `
-ContentType "application/x-www-form-urlencoded" -Body $formcurl.exe -X POST "https://api.gommo.net/api/v2/chat" ^
-H "Authorization: Bearer %TOKEN%" ^
-H "Content-Type: application/x-www-form-urlencoded" ^
-d "action=chat&domain=%REGISTRATION_DOMAIN%&query=Hello&messages=[{\"role\":\"user\",\"text\":\"Hello\"}]"curl.exe -N -X POST "https://api.gommo.net/api/v2/chat" ^
-H "Content-Type: application/x-www-form-urlencoded" ^
-d "action=stream&access_token=%TOKEN%&domain=%REGISTRATION_DOMAIN%&query=Tell a short story&messages=[{\"role\":\"user\",\"text\":\"Tell a short story\"}]"$d = $env:GOMMO_API_DOMAIN; if (-not $d) { throw 'Set GOMMO_API_DOMAIN to the user registration domain (dealer)' }
$messages = '[{"role":"user","text":"Tell a short story"}]'
$form = "action=stream&access_token=$env:TOKEN&domain=$d&query=Tell a short story&messages=$messages"
curl.exe -N -X POST "https://api.gommo.net/api/v2/chat" `
-ContentType "application/x-www-form-urlencoded" -d $formPOST https://api.gommo.net/api/v2/chat with action=models (form-urlencoded, same auth as chat).
$d = $env:GOMMO_API_DOMAIN; if (-not $d) { throw 'Set GOMMO_API_DOMAIN to your registration domain' }
$form = "action=models&access_token=$env:TOKEN&domain=$d"
Invoke-RestMethod -Method POST -Uri "https://api.gommo.net/api/v2/chat" `
-ContentType "application/x-www-form-urlencoded" -Body $formResponse shape is pass-through JSON (catalog entries with model ids, servers, pricing metadata). Use a returned id with action=set_model before chat/stream if you switch models mid-session.
Mode B (self-host): GET {gateway}/gateway/chat-models — Bearer, merged catalog for portal/dev.
action=set_model — form includes chat_id (session UUID), model, server, agent_id (from catalog or your config).
$d = $env:GOMMO_API_DOMAIN; if (-not $d) { throw 'Set GOMMO_API_DOMAIN to your registration domain' }
$sid = '<session-uuid>'
$form = "action=set_model&access_token=$env:TOKEN&domain=$d&chat_id=$sid&model=gpt-5.5::cheap"
Invoke-RestMethod -Method POST -Uri "https://api.gommo.net/api/v2/chat" `
-ContentType "application/x-www-form-urlencoded" -Body $formaction | Typical Content-Type | Client work |
|---|---|---|
chat | Often text/event-stream or JSON | If SSE: read lines data: {...} until [DONE]; concatenate choices[0].delta.content (or message.content in final chunk). If JSON: parse body once. |
stream | text/event-stream | Same SSE loop; do not expect one JSON object. |
models, set_model | application/json | Parse JSON envelope. |
Example SSE chunk (simplified):
data: {"choices":[{"delta":{"content":"Hello"}}]}
data: [DONE]Usage/credits may appear in the last chunks (usage, credit fields). Integrators must implement SSE parsing — raw body is not a single "text" field.
Optional server-side session/message storage (separate from chat_id on /api/v2/chat):
POST https://api.gommo.net/api/v2/ai-chat-sessions — form-urlencoded.
action | Purpose |
|---|---|
save_message | Persist one message |
save_session | Update session title/preview and session metadata (e.g. chatProcessing) |
list_sessions | List sessions for user |
get_messages | Messages in a session |
get_session | Session metadata |
Common form fields: access_token, domain, action, optional device_*.
| Action | Extra fields |
|---|---|
save_message | session_id, message_id, role (user | model), text, optional attachments (JSON string), timestamp, metadata (JSON) |
save_session | session_id, title, preview, optional agent_id, model, server, project_id, timestamp, metadata (JSON) |
get_messages, get_session | session_id; optional limit, offset, cursor |
list_sessions | optional limit, offset, cursor |
$d = $env:GOMMO_API_DOMAIN; if (-not $d) { throw 'Set GOMMO_API_DOMAIN to your registration domain' }
$form = "action=list_sessions&access_token=$env:TOKEN&domain=$d"
Invoke-RestMethod -Method POST -Uri "https://api.gommo.net/api/v2/ai-chat-sessions" `
-ContentType "application/x-www-form-urlencoded" -Body $formMode B JSON (POST {gateway}/gateway/chat-sessions): use camelCase — sessionId, messageId, role, text, limit, offset, cursor — gateway maps to upstream session_id, etc.
POST {gateway}/gateway/chat — JSON body (Bearer required):
{
"action": "chat",
"query": "Hello",
"messages": [{ "role": "user", "text": "Hello" }],
"language": "EN"
}Omit language → gateway sends upstream VI. Playground Platform → Chat exposes the same field.
Session sync (Mode B): POST {gateway}/gateway/chat-sessions — { "action": "list_sessions" } or { "action": "get_messages", "sessionId": "…" }.