Skip to main content
POST
/
v1
/
instances
/
{instance_id}
/
responses
curl -X POST https://api.chowder.dev/v1/instances/f47ac10b-58cc-4372-a567-0e02b2c3d479/responses \
  -H "Authorization: Bearer chd_org_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "input": "What files are in the current directory?"
  }'
{
  "id": "resp_6f8a9b2c4d1e",
  "object": "response",
  "status": "completed",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {
          "type": "output_text",
          "text": "Here are the files in the current directory:\n\n- README.md\n- package.json\n- src/\n- node_modules/"
        }
      ]
    }
  ],
  "model": "claude-sonnet-4-20250514",
  "usage": {
    "input_tokens": 42,
    "output_tokens": 38,
    "total_tokens": 80
  }
}
Send a message to a running OpenClaw instance. Chowder proxies your request to the instance’s gateway, which processes it through the OpenResponses API — an open-source implementation of the OpenAI Responses API format. The instance must be in running status. If it’s stopped or provisioning, you’ll get a 409 Conflict.
Accepts an organization key (chd_org_*) or a scoped key (chd_sk_*) with interact permission on this instance.

Path Parameters

instance_id
string
required
The ID of the instance to send a message to.

Request Body

The body follows the OpenAI Responses API format. At minimum you need model and input.
model
string
required
The model to use for this request. This is passed through to the configured model provider — use model identifiers like "claude-sonnet-4-20250514", "gpt-4o", or "gemini-2.0-flash" depending on which provider the instance is set up with.
input
string
required
The user message to send. This is the text input for the AI agent.
You can include any additional fields supported by the OpenResponses API (e.g. instructions, tools, previous_response_id for conversation continuity). These are passed through to the gateway as-is.

Response

Returns 200 OK with the OpenResponses API response object.
id
string
Unique response ID (e.g. "resp_abc123"). Use this as previous_response_id in follow-up messages to maintain conversation context.
object
string
Always "response".
status
string
Response status, typically "completed".
output
array
Array of output items. Each item has a type field. The most common type is "message", which contains the agent’s reply.
model
string
The model that generated the response.
usage
object
Token usage for the request.
curl -X POST https://api.chowder.dev/v1/instances/f47ac10b-58cc-4372-a567-0e02b2c3d479/responses \
  -H "Authorization: Bearer chd_org_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "input": "What files are in the current directory?"
  }'
{
  "id": "resp_6f8a9b2c4d1e",
  "object": "response",
  "status": "completed",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {
          "type": "output_text",
          "text": "Here are the files in the current directory:\n\n- README.md\n- package.json\n- src/\n- node_modules/"
        }
      ]
    }
  ],
  "model": "claude-sonnet-4-20250514",
  "usage": {
    "input_tokens": 42,
    "output_tokens": 38,
    "total_tokens": 80
  }
}

Conversation Continuity

To have a multi-turn conversation, pass the id from the previous response as previous_response_id in your next request:
curl -X POST https://api.chowder.dev/v1/instances/f47ac10b-.../responses \
  -H "Authorization: Bearer chd_org_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "input": "Now create a new file called hello.txt with the text Hello World",
    "previous_response_id": "resp_6f8a9b2c4d1e"
  }'
The agent retains the full conversation history and can reference previous messages.