roasOS
API referenceAgent

Ask the agent

Start one agent run without a browser. The agent plans, calls tools, and can start paid generations on its own up to the cap you set. Two caps govern the run and neither replaces the other. `max_credits` bounds what the run's own thinking may cost. `generation_spend_cap_credits` bounds what the run may spend on renders, voices and other paid work without asking a person — it defaults to 0, so a run you say nothing about can never charge you for a render. Both caps are bounded again by this API key's own spend policy, and the policy always wins. Send `quote_only: true` to see the ceiling for free; the ceiling is `max_credits + generation_spend_cap_credits`. Send the same body with the returned `quote_id` to run it. Confirming reserves the ceiling, and the unused part is refunded when the run ends, so you are never charged more than the number you saw. The run is asynchronous: read it at `/v1/agent-runs/{id}`. Anything the run could not auto-approve waits as a card in `pending_approvals`; approve it in roasOS, or decline it here.

POST
/v1/agent/completions

Start one agent run without a browser. The agent plans, calls tools, and can start paid generations on its own up to the cap you set.

Two caps govern the run and neither replaces the other. max_credits bounds what the run's own thinking may cost. generation_spend_cap_credits bounds what the run may spend on renders, voices and other paid work without asking a person — it defaults to 0, so a run you say nothing about can never charge you for a render. Both caps are bounded again by this API key's own spend policy, and the policy always wins.

Send quote_only: true to see the ceiling for free; the ceiling is max_credits + generation_spend_cap_credits. Send the same body with the returned quote_id to run it. Confirming reserves the ceiling, and the unused part is refunded when the run ends, so you are never charged more than the number you saw.

The run is asynchronous: read it at /v1/agent-runs/{id}. Anything the run could not auto-approve waits as a card in pending_approvals; approve it in roasOS, or decline it here.

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication. Use your API key as the bearer token: Authorization: Bearer roasos_sk_...

In: header

Header Parameters

Idempotency-Key*string

A unique string that makes retries safe. Any value 16-255 characters; reuse it only when retrying the exact same request.

Match^[A-Za-z0-9._:-]+$
Length16 <= length <= 255
X-RoasOS-Project?string

Optional label to group this request under one of your projects. Appears in your usage records.

Match^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$
Length1 <= length <= 64
X-RoasOS-Cost-Center?string

Optional label to attribute this request to a cost center. Appears in your usage records.

Match^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$
Length1 <= length <= 64

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/agent/completions" \  -H "Idempotency-Key: stringstringstri" \  -H "Content-Type: application/json" \  -d '{    "text": "string"  }'
{  "data": {    "schema_version": "agent-run@1",    "kind": "agent_run",    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "trigger": "chat",    "skill_id": "3cd68bb3-8b7e-48be-8232-1b99b5b4b3aa",    "conversation_id": "cc71b11a-25cd-4c2d-9950-df2cc38e3407",    "max_credits": 0,    "generation_spend_cap_credits": 0,    "pricing_version": "string",    "created_at": "2019-08-24T14:15:22Z",    "updated_at": "2019-08-24T14:15:22Z",    "status": "quoted",    "credits_reserved": 0,    "credits_max": 0,    "quote_id": "3c071a1d-db86-46a7-9dc8-72ba3fbca992",    "expires_at": "2019-08-24T14:15:22Z",    "authorization": {      "status": "auto_approved"    }  }}