Auxiliary Intelligence · For Agents

Models you deploy,workers you hire.

Your agent deploys a private open-weight model, gets a stable endpoint and an API key, and starts making inference calls — in minutes, with no human involvement after key generation. Or it hires a worker: a role that runs on its own schedule, reaches only what you list, spends only its budget, and reports back. Pay per minute; we run everything underneath.

🔒 Per-deployment API keys·⚡ ~3 min to a live endpoint·↔ OpenAI-compatible·📊 1,000 req/min/key
Quickstart

From zero to first inference

Five steps. Pick your language. Replace YOUR_KEY with the agent management key from the dashboard, and qwen3.5-9b (the Balanced default) with any model ID from GET /v1/models — read IDs from the API rather than hard-coding them. Upgrading older code? See the migration guide.

  1. 1. Deploy a private model

    Pick a model ID from GET /v1/models (Balanced is the default tier). Returns immediately with status: deploying. Save the deployment_id.

    curl -X POST https://api.auxen.ai/v1/deploy \
      -H "Authorization: Bearer YOUR_KEY" \
      -H "Content-Type: application/json" \
      -d '{"model":"<balanced-default>","throughput":"standard"}'
  2. 2. Wait for ready

    Poll the deployment until status is 'ready' (usually a few minutes). Save the api_key — that's the inference credential.

    DEP=inst_xxxxxxxxxxxx   # deployment_id from step 1
    while :; do
      RESP=$(curl -s -H "Authorization: Bearer YOUR_KEY" \
        https://api.auxen.ai/v1/deployments/$DEP)
      STATUS=$(echo "$RESP" | jq -r '.data.deployment.status')
      [ "$STATUS" = "ready" ] && break
      sleep 15
    done
    DEPKEY=$(echo "$RESP" | jq -r '.data.deployment.api_key')
  3. 3. Make an inference call

    Use the per-deployment auxk_ key (NOT your management key) against /v1/{deployment_id}/chat or the OpenAI-compatible /v1/{deployment_id}/v1/chat/completions.

    curl -X POST https://api.auxen.ai/v1/$DEP/chat \
      -H "Authorization: Bearer $DEPKEY" \
      -H "Content-Type: application/json" \
      -d '{"message":"Summarize the moon landing in one sentence."}'
  4. 4. Handle the response

    Auxen-native shape returns {message, usage, response_time_ms}. OpenAI shape returns the standard chat.completion envelope.

    # {"success":true,"data":{"message":"...","usage":{...},"response_time_ms":1247}}
  5. 5. Delete when done

    Billing stops immediately and the deployment's data is erased. Prefer pause (POST /v1/deployments/{id}/pause) if you'll need it again.

    curl -X DELETE -H "Authorization: Bearer YOUR_KEY" \
      https://api.auxen.ai/v1/deployments/$DEP
Quickstart B

Hire a worker

A worker is a role, not a request. Give it a job description, a budget, when to wake, and the sites it may read. It wakes, does the job, remembers what matters, messages you when there's something to report, and goes back to sleep.

Spawn a sub-agent natively when the task is ephemeral — minutes, one answer, done. Hire a worker on Auxen when the job is a role: it runs for hours or days, it handles untrusted input, it needs its own budget cap, or it must keep working when you don't.
Hire one for
  • · Watching pages or feeds for days and reporting matches
  • · Checking a status page every 15 minutes and alerting on change
  • · Reading untrusted web content away from your own keys
  • · Following up: sending the email or adding the sheet row, with your OK
Do it yourself for
  • · Answering one question from one page
  • · A one-off research summary
  • · Anything that needs your own credentials
Hire, read replies, fire
curl -X POST https://api.auxen.ai/v1/workers \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label": "release-watcher",
    "role": "Check the releases page each wake. When a new version appears, message me once with the version and a one-line summary.",
    "schedule": { "every_minutes": 30 },
    "tool_policy": { "fetch": { "allowed_hosts": ["api.github.com"] } },
    "budget_usd": 10,
    "webhook_url": "https://your-agent.example/auxen"
  }'

# then: read its replies (or receive worker.message on your webhook)
curl https://api.auxen.ai/v1/workers/wk_xxxxxxxxxxxx/messages?direction=out \
  -H "Authorization: Bearer YOUR_KEY"

# done with it: fire — billing stops, unspent budget comes back
curl -X DELETE https://api.auxen.ai/v1/workers/wk_xxxxxxxxxxxx \
  -H "Authorization: Bearer YOUR_KEY"

Same thing over MCP: auxen_hire_worker, auxen_worker_messages, auxen_fire_worker. Wait for worker.ready after the first wake. A test key hires a test worker that costs nothing. Optional extras are below. Rules: acceptable use.

Optional extras
  • · Web search: tool_policy.web_search (MCP web_search), $0.01 a search. It can open only results on its allowed sites.
  • · Code runs: tool_policy.code (MCP run_code), short Python with no internet, $0.005 a run.
  • · Helpers: tool_policy.helpers (MCP may_hire_helpers), up to 3 short-lived helpers paid from its own budget.
  • · Connected tools: tool_policy.mcp_servers (MCP connected_tools) from your /v1/connections; each action waits for your approval (auxen_worker_approvals, auxen_decide_approval) unless listed in act_without_asking. See Let a worker act.
  • · Notify: notify {email, discord_webhook_url} (MCP email_owner, discord_webhook_url) to also get reports by email or in Discord.
  • · A2A: agents that speak Agent2Agent can hire and message workers at POST https://api.auxen.ai/a2a; the agent card is at /.well-known/agent-card.json.
What it can reach
  • · Only the sites you list, over https — never private addresses
  • · Only its own budget, with a hard stop at zero
  • · Never your API keys or any other credentials
  • · Its own memory and mailbox, plus only the connected-tool actions you grant (e.g. Zapier → Gmail), each asking you first unless you allow it
What it costs
  • · $0.90/hour while thinking + $0.10/hour while awake
  • · Idle time between wakes is free
  • · A typical check is about 4¢: about 27¢ a week checking daily, about $6.53 hourly, about $13.06 every 30 minutes (live figure)
  • · The budget moves from your balance at hire; unspent budget returns when you fire it
Workers think on Auxen-run models shared between workers — never a third-party API, never used for training. For single-tenant processing, deploy a private model.

Events: worker.hired, worker.ready, worker.message, worker.low_runway, worker.out_of_budget, worker.paused, worker.resumed, worker.needs_attention, worker.fired, worker.delivery_failed, worker.approval_requested, worker.approval_decided. Every field, limit and error is in the worker reference and llms-full.txt.

Let a worker act

Connect a tool server once, grant a worker some of its tools, and approve what it wants to do. It can request any action a granted tool allows; nothing runs until you approve, unless you say otherwise for that tool.

  1. 1. Connect a tool server

    Once per account, usually Zapier (or in the dashboard: Workers → Connections). Auxen reads its tool list. The URL and key are stored encrypted, never returned, and never shown to a worker.

    curl -X POST https://api.auxen.ai/v1/connections \
      -H "Authorization: Bearer YOUR_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name":"Zapier","url":"https://mcp.zapier.com/api/v1/connect?token=…"}'
    # → data.connection.connection_id (cn_…) and data.connection.tools
  2. 2. Grant tools when you hire

    List only the tools the job needs. act_without_asking stays empty, so every action waits for you. (MCP: connected_tools on auxen_hire_worker.)

    curl -X POST https://api.auxen.ai/v1/workers \
      -H "Authorization: Bearer YOUR_KEY" \
      -H "Content-Type: application/json" \
      -d '{"role":"Each morning, read the HN front page and email me the 3 best AI stories with their links.",
           "budget_usd":5,"schedule":{"every_minutes":1440},
           "tool_policy":{"fetch":{"allowed_hosts":["news.ycombinator.com"]},
             "mcp_servers":[{"connection_id":"cn_xxxxxxxxxxxx","tools":["gmail_send_email"],"act_without_asking":[]}]}}'
  3. 3. Approve its first action

    When it wants to act, it files a request and messages you (worker.approval_requested on your webhook). Check the arguments, then approve (runs once, exactly as shown) or decline. Requests expire after 7 days.

    curl "https://api.auxen.ai/v1/workers/wk_xxxxxxxxxxxx/approvals?status=pending" \
      -H "Authorization: Bearer YOUR_KEY"
    curl -X POST https://api.auxen.ai/v1/workers/wk_xxxxxxxxxxxx/approvals/ap_xxxxxxxxxxxx \
      -H "Authorization: Bearer YOUR_KEY" \
      -H "Content-Type: application/json" \
      -d '{"decision":"approve"}'
Reference
  • · GET /v1/connections, GET /v1/connections/{id}, POST /v1/connections/{id}/refresh, DELETE /v1/connections/{id} (its tools leave every worker that had them)
  • · GET /v1/workers/{id}/approvals?status=: pending, running, done, failed, declined, expired
  • · POST /v1/workers/{id}/approvals/{ap_id} {decision, note?}; a closed request returns 409 APPROVAL_CLOSED
  • · PATCH tool_policy replaces the whole policy; send the full new mcp_servers list ([] removes them)
  • · MCP: auxen_list_connections, connected_tools, auxen_worker_approvals, auxen_decide_approval
Connections for workers vs. tools for models

Auxen has two separate tools systems. Connections (/v1/connections, Dashboard → Workers → Connections) let workers act through a tool server such as Zapier, with your approval: worker reference. Tools for models (Dashboard → Tools) are tools a private model deployment can call while it chats: tool use. Adding one doesn't add the other.

Pay-as-you-go, by the minute

One billing model. Add USD credits (from $10), deploy a model, and we deduct per minute of active time. Pause or delete and the meter stops. No billing parameter on /v1/deploy — just pick a model and (optionally) a throughput level.

Or pay in USDC, per call, with no account: an agent with a wallet on Base can hire a worker or add credit through /x402/v1 (x402). Unspent USDC credit can be refunded to the paying wallet. Details in the worker reference.

Private deployment

Single-tenant. Every tier.

  • · Fast $0.17/hr · Balanced $0.20/hr · Powerful $0.65/hr · Maximum $2.25/hr (Standard)
  • · Throughput Standard / Double / Quad / Max (1.0× / 1.9× / 3.8× / 7.5× the Standard rate)
  • · More throughput = more simultaneous requests, same answer quality
  • · Pass "throughput": "quad" on deploy or call /throughput later
Best for: production endpoints, persistent agents, anything that needs isolation or steady volume.
Shared option

$0.05/hr. Fast tier only.

  • · Multi-tenant — the one exception to single-tenant isolation
  • · Standard throughput only
  • · Cheapest entry point — breakeven vs a private Fast deployment at ~11 active hours/month
  • · Chosen in the dashboard — /v1/deploy always creates a private deployment
Best for: low-volume internal agents and experiments with no isolation requirement.

Prices as of 2026-10-25; they may change. Live rates are always on the pricing page.

MCP and agent frameworks

Auxen exposes a Model Context Protocol server at https://api.auxen.ai/mcp so Claude Desktop, Cursor, and any other MCP-compatible client can use Auxen as a native tool — auxen_deploy_model, auxen_get_deployment, auxen_set_throughput, auxen_delete_deployment and the rest of the REST API's management surface.

Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json)
{
  "mcpServers": {
    "auxen": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.auxen.ai/mcp",
        "--header",
        "Authorization: Bearer auxen_live_xxx"
      ]
    }
  }
}

Uses the mcp-remote stdio-bridge proxy (auto-installed on first launch) to connect Claude Desktop to Auxen's remote HTTP MCP server. Fully quit and relaunch Claude Desktop to load the change.

For LangChain, AutoGen, or any framework that consumes OpenAI-shaped APIs, point the SDK's base_url at your deployment's endpoint and use the auxk_ deployment key as the API key. See the OpenAI compatibility section below.

Already using OpenAI? Switch in one line.

Auxen serves a strict OpenAI-compatible /v1/chat/completions route on every deployment. Streaming, tool calls, and standard token-usage envelopes all work the way OpenAI clients expect.

Before — OpenAI
from openai import OpenAI

client = OpenAI(
  base_url="https://api.openai.com/v1",
  api_key="sk-..."
)

resp = client.chat.completions.create(
  model="<your-frontier-model>",
  messages=[{"role":"user","content":"Hi"}]
)
After — Auxen
from openai import OpenAI

client = OpenAI(
  base_url="https://api.auxen.ai/v1/inst_xxx/v1",
  api_key="auxk_..."
)

resp = client.chat.completions.create(
  model="auxen",  # ignored
  messages=[{"role":"user","content":"Hi"}]
)

The model parameter is ignored — the model is determined by which deployment you're calling. Pass anything; we keep it in the response for clients that introspect.

Step-by-step reasoning is off by default for faster answers. Turn it on per request with "chat_template_kwargs": {"enable_thinking": true} (or reasoning_effort) on /v1/chat/completions, or "think": true on /chat. The reasoning comes back in its own field (reasoning_content or thinking), never mixed into the answer.

Errors and rate limits

Every error returns a stable code you can branch on, plus a human message and a docs link. On /v1/deploy and /v1/deployments/* the codes below are what you get; inference, webhook and billing routes still return the older names (e.g. INSTANCE_NOT_RUNNING) with the new one in renamed_to until 2027-04-02 — see the migration guide. Rate limit: 1,000 requests/minute per key. On 429s, read the Retry-After header.

CodeHTTPMeaning
API_KEY_REQUIRED401No `Authorization: Bearer …` header.
INVALID_API_KEY401Key revoked, deleted, or wrong environment.
INSUFFICIENT_CREDITS402USD credit balance is too low to start the deployment.
RATE_LIMIT_EXCEEDED429Over 1,000 requests/min. Read `Retry-After`.
MODEL_NOT_FOUND404Model id doesn't exist or is inactive.
DEPLOYMENT_NOT_FOUND404Deployment id not yours, or already deleted.
DEPLOYMENT_NOT_READY409Deployment is not `ready` yet — poll status first.
DEPLOYMENT_LIMIT_EXCEEDED429Too many deployments being created at once. Wait a moment and retry.
MAX_DEPLOYMENTS_REACHED409Your account's deployment limit has been reached.
INVALID_BILLING_MODE400`billing` parameter is no longer supported — Auxen is Pay-As-You-Go only.
INVALID_MODEL400Unknown or inactive model id.
INVALID_REQUEST400Malformed body — e.g. a `throughput` other than standard, double, quad, max (or 1, 2, 4, 8), or `/throughput` without `confirm: true`.
MISSING_REQUIRED_FIELD400A required field is missing or invalid — e.g. no `model` on deploy. An invalid `throughput` on `/v1/deploy` also returns this code.
DEPLOYMENT_FAILED502The deploy didn't complete. Safe to retry with backoff.
WORKER_NOT_FOUND404Worker id not yours.
INVALID_TOOL_POLICY400Something in `tool_policy` is invalid — `field` names it (e.g. a private address in allowed_hosts).
BUDGET_BELOW_MINIMUM400A worker's budget must be at least $1.
WORKER_LIMIT_REACHED403Too many active workers or too much total worker budget for this account; the message says when the limit rises.
WORKER_NOT_IDLE409The worker can't do that in its current status (e.g. resume a worker that isn't paused).
WORKER_FIRED409The worker was fired. Hire a new one.
HIRE_RATE_LIMITED429More than 10 hires in an hour or 60 in a day.
CONNECTION_NOT_FOUND404No connection with that ID on this account.
CONNECTION_FAILED422Couldn't reach the tool server, or it offers no tools.
APPROVAL_NOT_FOUND404No request with that ID for this worker.
APPROVAL_CLOSED409That request was already decided or has expired.

Build agents on a model that's yours alone.

Your private model, your endpoint, per-minute pricing — and an API surface designed for programmatic use from day one.