Extend Zo

API

Access Zo programmatically

The Zo API lets you interact with your Zo from scripts, automations, or other apps. Authenticate with an access token from Settings > Advanced.

Quick start#

  1. Go to Settings > Advanced and create an access token
  2. Copy it immediately — you won't see it again

Warning

Your API key grants full access to your Zo. Keep it secret and never commit it to version control.

API reference#

Base URL: https://api.zo.computer

POST /zo/ask

Send a message to your Zo and get a response.

Request

inputstringrequired

Your message to Zo

conversation_idstring

Continue an existing conversation

model_namestring

Override the default model (use /models/available to list options)

persona_idstring

Override the active persona (use /personas/available to list options)

output_formatobject

JSON Schema for structured output

streambooleandefault: false

Enable streaming mode. Returns Server-Sent Events (SSE) instead of JSON.

Response

outputstring | object

Zo's response. Returns an object if output_format was specified.

conversation_idstring

ID to continue this conversation in subsequent requests.

Streaming Response (when stream: true)

Returns a Server-Sent Events stream with Content-Type: text/event-stream. Each event has the format:

Event Types:

  • FrontendModelResponse — Text chunk from the model (data.content)
  • End — Stream completed (includes data.output if output_format was specified)
  • Error — Error occurred (data.message)

The x-conversation-id response header contains the conversation ID for follow-up requests.

GET /models/available

List all available models you can use with the /zo/ask endpoint. When authenticated with an API key, includes your BYOK (Bring Your Own Key) configurations.

Response

modelsarray

List of available models

models[].model_namestring

The value to pass to model_name in /zo/ask

models[].labelstring

Human-readable model name

models[].vendorstring

Model provider (e.g., "Anthropic", "OpenAI", "Custom")

models[].descriptionstring | null

Short description of the model's capabilities

models[].typestring | null

Either "fast" or "capable", indicating the model's speed/capability tradeoff

models[].context_windownumber | null

Maximum context window size in tokens

models[].is_byokboolean

Whether this is a BYOK (Bring Your Own Key) model

GET /personas/available

List all configured personas. Use the returned id values with the persona_id parameter in /zo/ask to override the active persona.

Response

personasarray

List of configured personas

personas[].idstring

The value to pass to persona_id in /zo/ask

personas[].namestring

Display name for the persona

personas[].promptstring

System prompt defining the persona's behavior

personas[].modelstring | null

AI model ID, or null for system default

personas[].imagestring | null

Avatar image URL

Examples#

Continuing a conversation#

Use the returned conversation_id to continue the conversation:

Structured output#

Use output_format to get responses as structured JSON. This is based on OpenAI's Structured Outputs.

Streaming#

Use stream: true to receive responses as Server-Sent Events:

Listing available models#

Listing available personas#