The opencode serve
command runs a headless HTTP server that exposes an OpenAPI endpoint that an opencode client can use.
opencode serve [--port <number>] [--hostname <string>]
Flag Short Description Default --port
-p
Port to listen on 4096
--hostname
-h
Hostname to listen on 127.0.0.1
When you run opencode
it starts a TUI and a server. Where the TUI is the
client that talks to the server. The server exposes an OpenAPI 3.1 spec
endpoint. This endpoint is also used to generate an SDK .
This architecture lets opencode support multiple clients and allows you to interact with opencode programmatically.
You can run opencode serve
to start a standalone server. If you have the
opencode TUI running, opencode serve
will start a new server.
When you start the TUI it randomly assigns a port and hostname. You can instead pass in the --hostname
and --port
flags . Then use this to connect to its server.
The /tui
endpoint can be used to drive the TUI through the server. For example, you can prefill or run a prompt. This setup is used by the opencode IDE plugins.
The server publishes an OpenAPI 3.1 spec that can be viewed at:
http://<hostname>:<port>/doc
For example, http://localhost:4096/doc
. Use the spec to generate clients or inspect request and response types. Or view it in a Swagger explorer.
The opencode server exposes the following APIs.
Method Path Description Response GET
/app
Get app info App
POST
/app/init
Initialize the app boolean
Method Path Description Response GET
/config
Get config info Config
GET
/config/providers
List providers and default models { providers:
Provider[] , default: { [key: string]: string } }
Method Path Description Notes GET
/session
List sessions Returns Session[]
GET
/session/:id
Get session Returns Session
GET
/session/:id/children
List child sessions Returns Session[]
POST
/session
Create session body: { parentID?, title? }
, returns Session
DELETE
/session/:id
Delete session PATCH
/session/:id
Update session properties body: { title? }
, returns Session
POST
/session/:id/init
Analyze app and create AGENTS.md
body: { messageID, providerID, modelID }
POST
/session/:id/abort
Abort a running session POST
/session/:id/share
Share session Returns Session
DELETE
/session/:id/share
Unshare session Returns Session
POST
/session/:id/summarize
Summarize session GET
/session/:id/message
List messages in a session Returns { info:
Message , parts:
Part[] }[]
GET
/session/:id/message/:messageID
Get message details Returns { info:
Message , parts:
Part[] }
POST
/session/:id/message
Send chat message body matches ChatInput
, returns Message
POST
/session/:id/shell
Run a shell command body matches CommandInput
, returns Message
POST
/session/:id/revert
Revert a message body: { messageID }
POST
/session/:id/unrevert
Restore reverted messages POST
/session/:id/permissions/:permissionID
Respond to a permission request body: { response }
Method Path Description Response GET
/find?pattern=<pat>
Search for text in files Array of match objects with path
, lines
, line_number
, absolute_offset
, submatches
GET
/find/file?query=<q>
Find files by name string[]
(file paths)GET
/find/symbol?query=<q>
Find workspace symbols Symbol[]
GET
/file?path=<path>
Read a file { type: "raw" | "patch", content: string }
GET
/file/status
Get status for tracked files File[]
Method Path Description Response POST
/log
Write log entry. Body: { service, level, message, extra? }
boolean
Method Path Description Response GET
/agent
List all available agents Agent[]
Method Path Description Response POST
/tui/append-prompt
Append text to the prompt boolean
POST
/tui/open-help
Open the help dialog boolean
POST
/tui/open-sessions
Open the session selector boolean
POST
/tui/open-themes
Open the theme selector boolean
POST
/tui/open-models
Open the model selector boolean
POST
/tui/submit-prompt
Submit the current prompt boolean
POST
/tui/clear-prompt
Clear the prompt boolean
POST
/tui/execute-command
Execute a command ({ command }
) boolean
POST
/tui/show-toast
Show toast ({ title?, message, variant }
) boolean
GET
/tui/control/next
Wait for the next control request Control request object POST
/tui/control/response
Respond to a control request ({ body }
) boolean
Method Path Description Response PUT
/auth/:id
Set authentication credentials. Body must match provider schema boolean
Method Path Description Response GET
/event
Server-sent events stream. First event is server.connected
, then bus events Server-sent events stream
Method Path Description Response GET
/doc
OpenAPI 3.1 specification HTML page with OpenAPI spec