Hosted AI agents. Any model, your tools, one key.

An agent is a model with a system prompt, webhook skills you host, memory per session and a schedule. Create it with one API call, message it with another.

What an agent is

One model
Any chat model in the catalog, named by id. Change it with a PATCH; the memory and skills stay.
Your webhook skills
A name, a JSON schema and a URL you host. Tool calls arrive signed; your JSON answer goes back to the model.
Memory
Conversation history per session id, kept on the instance. Send the same session id to continue.
Cron
A prompt on a schedule, run as a turn. Skipped when the balance is empty.
API and webhooks
Send messages and read turns over REST. Turn events post to your webhook, signed, with retries.
Billing you can read
Every turn carries its charge, and each model call inside it is on the receipt.

Pricing

TierInstanceSkillsCronsPer turn
Starter$9.00 a monthup to 3up to 1tokens at the model price + $0.005
Pro$39.00 a monthup to 20up to 20tokens at the model price + $0.005

Fees come from GET /v1/agents/pricing. Tokens bill at the price on each model page, the same as a direct request. Both draw from the prepaid balance.

Create one, then message it

create
curl https://api.uplinkswitch.com/v1/agents \
  -H "Authorization: Bearer $UPLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "support",
    "model": "claude-sonnet-5-5",
    "tier": "starter",
    "system_prompt": "You answer billing questions for our store.",
    "skills": [{
      "name": "lookup_order",
      "description": "Find an order by its number",
      "url": "https://example.com/hooks/lookup-order",
      "parameters": { "type": "object", "properties": { "order": { "type": "string" } } }
    }],
    "webhook_url": "https://example.com/hooks/agent-events"
  }'
message
curl https://api.uplinkswitch.com/v1/agents/AGENT_ID/messages \
  -H "Authorization: Bearer $UPLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "session_id": "customer-1842", "content": "Where is order 10422?" }'
  • The create call answers 201 with the agent and a webhook_secret, shown once; use it to check the signature on events and tool calls.
  • The message call answers with the turn: output, charge_usd, fee_usd, and the tool_calls and model_calls it took.
  • PATCH /v1/agents/:id with { "status": "stopped" } pauses it; POST /v1/agents/:id/crons with an expression and a prompt schedules it.

Questions

What is a hosted AI agent?
An agent is a model with a system prompt, a set of tools, and a memory, kept running for you. You send it a message; it calls your tools as many times as it needs, keeps the conversation per session id, and answers. It runs on the schedule you set and posts events to your webhook.
Which models can an agent use?
Any chat model in the catalog, by its catalog id. The agent sends every model call through the same key and routing as a direct request, so the per-token price is the one on the model page.
How do skills work?
A skill is a name, a description, a JSON schema for its arguments and a URL you host. When the model decides to use it, the agent POSTs the arguments to your URL with an HMAC signature and feeds your response back to the model. No OAuth, no SDK: any endpoint that answers JSON is a skill.
How is an agent billed?
Two lines on the ledger. A flat monthly fee for the instance, $9.00 on Starter and $39.00 on Pro, and per turn the tokens at the model's normal price plus a $0.005 fee. Both draw from the prepaid balance; an unpaid monthly fee stops the agent until the balance covers it.
What is the difference between Starter and Pro?
Limits. Starter runs with up to 3 skills and 1 cron; Pro with up to 20 skills and 20 crons. The model, the memory and the API are the same on both.
Is this an alternative to building my own agent loop?
Yes. The loop (model call, tool call, model call again), the conversation memory, the scheduler, the retrying webhooks and the billing are the hosted part. Your side is the system prompt and the HTTP endpoints the skills call.

Chain models without an agent? See Workflows.

Create an agent