Skip to content
Aurora AI Systems
AI Agents
Meet all 12 agents
CarlaTransport requestsRioDispatch & carriersQuinnQuotes & pricingVictorSales developmentMaraMarketingSofiaCustomer supportAdaAccountingPaulProcurementHugoHR & recruitmentLexLegal & complianceIrisData & reportingAtlasChief of staff
How the agents work
PricingAPI Docs
Services

Solutions — we implement

All solutionsDigital AutomationAI & Machine LearningAPI Integrations & System Connectivity

Software Development — we build

All development servicesCustom Integrations & API DevelopmentCustom CRMCustom ERPWebsite DevelopmentCustom AI AgentsMobile App DevelopmentE-commerce PlatformsStartup MVP Development
Industries
Logistics & TransportationE-commerce & RetailFinance & AccountingReal Estate & PropertyProfessional ServicesTechnology & SaaSManufacturing & ProductionHealthcare & ClinicsConstruction & EngineeringHospitality & TourismEducation & TrainingMarketing & Media Agencies
AboutContactHire agents
  • ENEnglish
  • RORomână
  • DEDeutsch
  • ITItaliano
  • FRFrançais
  • PLPolski
Hire agents
Aurora AI Systems

AI agents, automation and custom software for businesses across Europe & worldwide.

contact@auroraaisystems.com

AI agents

All 12 agentsCarla — Transport requestsRio — Dispatch & carriersQuinn — Quotes & pricingVictor — Sales developmentMara — MarketingSofia — Customer supportAda — AccountingPaul — ProcurementHugo — HR & recruitmentLex — Legal & complianceIris — Data & reportingAtlas — Chief of staff

Product

PricingAPI documentationCheckoutSubscription termsToken limits

Company

SolutionsSoftware DevelopmentIndustriesAbout usContactPrivacy PolicyTerms & Conditions

© 2026 Aurora AI Systems. All rights reserved.

Privacy PolicyCookie PolicyTerms & ConditionsSubscription Terms

API documentation

Aurora Agents API

Everything your developers need to connect Aurora’s AI agents to your CRM, ERP or TMS: authentication, tasks, conversations, tools, webhooks, token limits and billing.

QuickstartAgent reference

Getting started

Introduction
Quickstart
Authentication
Core concepts

Agents & work

Agents
Tasks
Messages & threads
Tools
Knowledge
Handoffs

Events

Webhooks

Usage & billing

Usage & token limits
Limits
Billing & invoices

Reference

Errors
Rate limits
Idempotency
Pagination
Versioning
Agent reference
CarlaRioQuinnVictorMaraSofiaAdaPaulHugoLexIrisAtlas

More

Security & data
Changelog
Show code in

Introduction

The Aurora API lets your CRM, ERP, TMS or any backend hand work to Aurora’s AI agents and receive structured results. Every agent has a fixed set of task types with documented inputs and JSON outputs, so your system can rely on the shape of what comes back.

BASEhttps://api.auroraaisystems.com/v1

  • Format: JSON over HTTPS, UTF-8. Send Content-Type: application/json with every request body.
  • Times: ISO 8601 in UTC, e.g. 2026-10-09T08:14:03Z. Billing months start at 00:00 UTC on the 1st.
  • IDs: prefixed by object type — task_, thr_, msg_, tool_, doc_, whk_, evt_, inv_. Agents use readable ids such as carla.
  • Money: decimal amounts in EUR, e.g. 699.00.
  • Request ids: every response carries an Aurora-Request-Id header. Quote it when you contact support.

The agents

Agent idAgentMain task types
carlaCarla — Transport Request Coordinatortransport_request.extract, transport_request.qualify
rioRio — Dispatch & Carrier Coordinatorcarrier.match, carrier.request_offers
quinnQuinn — Quote & Pricing Specialistquote.create, quote.compare_offers
victorVictor — Sales Development Replead.qualify, lead.research
maraMara — Marketing Managercontent.plan, content.draft
sofiaSofia — Customer Support Leadticket.triage, ticket.reply
adaAda — Accounting Assistantinvoice.extract, invoice.match
paulPaul — Procurement Specialistrfq.create, offers.compare
hugoHugo — HR & Recruitment Partnerjob_ad.draft, applications.organize
lexLex — Legal & Compliance Assistantcontract.review, contract.draft
irisIris — Data & Reporting Analystdata.ask, report.generate
atlasAtlas — Chief of Stafftask.route, brief.generate

Your account, agents and integrations are configured with you during onboarding. Test keys are issued after the kickoff and live keys at go-live. Until then, everything on this page can be tried in the sandbox.

Quickstart

Four steps from an email in your inbox to a structured record in your CRM.

1. Store your test key

Keep keys on your server, as an environment variable. Never put them in a browser, a mobile app or a public repository.

Terminal
export AURORA_API_KEY="aur_test_…"

2. Create a task

Ask Carla to turn a client email into a transport request. The metadata comes back unchanged, so you can match the result to your CRM record.

curl https://api.auroraaisystems.com/v1/agents/carla/tasks \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "transport_request.extract",
    "input": {
      "channel": "email",
      "from": "mihai@agrodelta.example",
      "subject": "Truck Pitesti - Lyon",
      "body": "Hi, we need a truck from Pitești to Lyon next week, 14 europallets ~9t, not stackable. Can you send a price?"
    },
    "metadata": {
      "crm_record_id": "REQ-2041"
    }
  }'
202 Accepted
{
  "id": "task_01J9Z3K8R4",
  "object": "task",
  "agent_id": "carla",
  "type": "transport_request.extract",
  "status": "queued",
  "metadata": {
    "crm_record_id": "REQ-2041"
  },
  "created_at": "2026-10-09T08:14:03Z"
}

3. Get the result

Register a webhook and receive task.completed, or poll the task until its status is final.

curl https://api.auroraaisystems.com/v1/tasks/task_01J9Z3K8R4 \
  -H "Authorization: Bearer $AURORA_API_KEY"
200 OK
{
  "id": "task_01J9Z3K8R4",
  "object": "task",
  "agent_id": "carla",
  "type": "transport_request.extract",
  "status": "completed",
  "output": {
    "transport_request": {
      "pickup": {
        "city": "Pitești",
        "country": "RO",
        "postcode": null,
        "date": null
      },
      "delivery": {
        "city": "Lyon",
        "country": "FR",
        "postcode": null
      },
      "cargo": {
        "pallet_type": "EUR",
        "pallets": 14,
        "stackable": false,
        "weight_kg": 9000,
        "loading_meters": 5.6,
        "adr": false
      },
      "missing_fields": [
        "pickup.date",
        "delivery.postcode"
      ],
      "language": "en",
      "confidence": 0.93
    }
  },
  "handoffs": [
    {
      "agent_id": "quinn",
      "task_id": "task_01J9Z3M2QP",
      "type": "quote.create",
      "mode": "auto"
    }
  ],
  "parent_task_id": null,
  "escalation": null,
  "error": null,
  "usage": {
    "input_tokens": 3120,
    "output_tokens": 640,
    "total_tokens": 3760
  },
  "metadata": {
    "crm_record_id": "REQ-2041"
  },
  "created_at": "2026-10-09T08:14:03Z",
  "completed_at": "2026-10-09T08:14:09Z"
}

4. Use it

Write output.transport_request into your CRM record. Carla also handed the request to Quinn automatically — her quote arrives as another task.completed event once the client has sent the missing details.

Authentication

Authenticate every request with a secret key in the Authorization header.

HTTP header
Authorization: Bearer aur_live_4f9c…
Key prefixEnvironmentBehaviour
aur_test_SandboxSame agents and API. 500,000 free tokens per month. Tool calls and webhooks go to your test endpoints. Never invoiced.
aur_live_ProductionReal work, metered and invoiced. Issued at go-live.

Scopes and restrictions

Each key can be limited to specific scopes and agents, and can have its own monthly token limit. Available scopes: agents:read, agents:write, tasks:read, tasks:write, threads:write, tools:write, knowledge:write, webhooks:write, usage:read, limits:write, billing:read.

  • Create, restrict and rotate keys in the console. A revoked key stops working immediately.
  • For a chat widget on your website, call Aurora from your backend — never from the visitor’s browser.
  • A missing or invalid key returns 401 authentication_error; a key without the right scope returns 403 permission_denied.

Core concepts

ObjectWhat it is
AgentA configured AI worker with one job. Its manifest combines persona, skills, tools, knowledge, guardrails and limits.
TaskOne unit of work for one agent: a type, an input and, when finished, a JSON output. Tasks run asynchronously.
Thread & messageA conversation — a support chat, a WhatsApp exchange. The thread keeps the history; each message gets the agent’s reply.
ToolAn action in your systems that an agent may call, such as finding a customer or creating an order.
Knowledge documentA file or text the agent can draw on: tariffs, terms, policies, templates.
HandoffPassing a finished result to the next agent, automatically or after your confirmation.
Usage & limitsTokens metered per model call; they drive alerts, limits and the extra-token line on your invoice.
EventA webhook notification that something happened — a task completed, a limit was reached, an invoice was paid.

Agents

The agent object is the agent’s manifest: how it sounds, what it can do, what it may touch and where it stops. You read all of it; you can change the persona, status and limits.

The agent object

Agent object
{
  "id": "carla",
  "object": "agent",
  "name": "Carla",
  "title": "Transport Request Coordinator",
  "status": "active",
  "persona": {
    "traits": [
      "meticulous",
      "calm under volume",
      "politely persistent"
    ],
    "tone": {
      "formality": 3,
      "description": "Warm and precise"
    },
    "languages": [
      "en",
      "ro",
      "de"
    ],
    "reply_in_sender_language": true,
    "signature": "Carla, dispatch desk"
  },
  "skills": [
    "transport_request.extract",
    "transport_request.qualify",
    "transport_request.follow_up"
  ],
  "tools": [
    "crm.find_customer",
    "crm.create_request"
  ],
  "knowledge": [
    "kb_lanes",
    "kb_general_terms"
  ],
  "guardrails": {
    "never": [
      "quote_prices",
      "invent_missing_data"
    ],
    "handover_when": [
      "adr_goods",
      "oversized_cargo",
      "estimated_value_eur > 20000"
    ]
  },
  "handoffs": [
    {
      "on": "transport_request.qualified",
      "to": "quinn",
      "task_type": "quote.create",
      "mode": "auto"
    }
  ],
  "limits": {
    "monthly_token_limit": null,
    "max_output_tokens": 4000
  },
  "created_at": "2026-10-01T09:00:00Z",
  "updated_at": "2026-10-06T15:20:11Z"
}
ParameterDescription
id stringReadable agent id, e.g. carla. Never changes, even if you rename the agent.
status enumactive, paused or configuring. Paused agents reject new tasks with 409.
persona objectDisplay name, traits, tone (formality 1–5), languages, whether to reply in the sender’s language, and signature.
skills arrayTask types this agent runs. See the agent reference.
tools arrayNames of tools this agent may call.
knowledge arrayKnowledge collections the agent may use.
guardrails objectWhat the agent never does and when it hands over to a person. Read-only.
handoffs arrayWhich result goes to which agent, and how. Read-only.
limits objectMonthly token limit for this agent (or null for the shared pool) and maximum output tokens per model call.

List agents

GET/v1/agents

curl https://api.auroraaisystems.com/v1/agents \
  -H "Authorization: Bearer $AURORA_API_KEY"

Retrieve an agent

GET/v1/agents/{agent_id}

Update an agent

PATCH/v1/agents/{agent_id}

Only the fields below can be changed through the API. Skills, tools, guardrails and handoffs change together with our team, so every change is tested in the sandbox before it reaches your clients.

ParameterDescription
persona.display_name stringThe name clients see, e.g. if you rename Carla to fit your brand.
persona.tone.formality integer 1–51 is very formal, 5 is very casual.
persona.languages arrayISO 639-1 codes the agent writes in, e.g. ["en","ro","de"].
persona.reply_in_sender_language booleanReply in the language of the incoming message when it is in the list.
persona.signature stringSign-off used in outgoing messages, up to 60 characters.
status enumactive or paused.
limits.monthly_token_limit integer or nullMonthly cap for this agent within your pool.
limits.max_output_tokens integerUp to 4,000 unless agreed otherwise.
curl -X PATCH https://api.auroraaisystems.com/v1/agents/carla \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "persona": {
      "tone": {
        "formality": 2
      },
      "signature": "Carla, dispatch desk — Northline Logistics"
    }
  }'

Tasks

A task is one unit of work for one agent. Tasks run asynchronously: create one, then receive the result by webhook or by polling.

Create a task

POST/v1/agents/{agent_id}/tasks

ParameterDescription
type string requiredA task type the agent supports, e.g. transport_request.extract.
input object requiredInput for the task type. Fields per type are listed in the agent reference; invalid input returns 422.
metadata objectUp to 20 key–value pairs returned unchanged, e.g. your CRM record id.
callback_url stringSend this task’s events to this URL instead of your registered webhooks.
thread_id stringAttach the task to a conversation so the agent sees its history.
priority enumnormal (default) or high.
handoff enumauto, suggest or none. Defaults to the agent’s manifest.
max_output_tokens integerLower the output limit for this task.

Send an Idempotency-Key header so a retried request never creates a duplicate task. The response is 202 Accepted with the task in status queued.

The task object

Task object
{
  "id": "task_01J9Z3K8R4",
  "object": "task",
  "agent_id": "carla",
  "type": "transport_request.extract",
  "status": "completed",
  "output": {
    "transport_request": {
      "pickup": {
        "city": "Pitești",
        "country": "RO",
        "postcode": null,
        "date": null
      },
      "delivery": {
        "city": "Lyon",
        "country": "FR",
        "postcode": null
      },
      "cargo": {
        "pallet_type": "EUR",
        "pallets": 14,
        "stackable": false,
        "weight_kg": 9000,
        "loading_meters": 5.6,
        "adr": false
      },
      "missing_fields": [
        "pickup.date",
        "delivery.postcode"
      ],
      "language": "en",
      "confidence": 0.93
    }
  },
  "handoffs": [
    {
      "agent_id": "quinn",
      "task_id": "task_01J9Z3M2QP",
      "type": "quote.create",
      "mode": "auto"
    }
  ],
  "parent_task_id": null,
  "escalation": null,
  "error": null,
  "usage": {
    "input_tokens": 3120,
    "output_tokens": 640,
    "total_tokens": 3760
  },
  "metadata": {
    "crm_record_id": "REQ-2041"
  },
  "created_at": "2026-10-09T08:14:03Z",
  "completed_at": "2026-10-09T08:14:09Z"
}

Task statuses

StatusMeaning
queuedAccepted and waiting to run.
runningThe agent is working on it.
requires_actionThe agent called a tool in client mode and is waiting for your result. See submit tool outputs.
completedFinished; output holds the result.
escalatedA guardrail handed the work to a person. escalation holds the reason and a summary for your team.
failedCould not finish; error explains why. Failures caused by our side aren’t billed.
cancelledCancelled by you. Tokens already used are billed.

Retrieve a task

GET/v1/tasks/{task_id}

List tasks

GET/v1/tasks

ParameterDescription
agent_id stringOnly tasks of this agent.
status enumOnly tasks in this status.
type stringOnly this task type.
created_after / created_before timestampTime window.
limit / cursor integer / stringSee pagination.

Submit tool outputs

POST/v1/tasks/{task_id}/tool_outputs

When an agent calls a tool registered in client mode, the task pauses in requires_action and you receive task.requires_action:

Task waiting for your tool result
{
  "id": "task_01J9Z3K8R4",
  "object": "task",
  "agent_id": "carla",
  "status": "requires_action",
  "required_action": {
    "type": "submit_tool_outputs",
    "tool_calls": [
      {
        "id": "call_7Hk2",
        "tool": "crm.find_customer",
        "arguments": {
          "email": "mihai@agrodelta.example"
        }
      }
    ]
  }
}
curl https://api.auroraaisystems.com/v1/tasks/task_01J9Z3K8R4/tool_outputs \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_outputs": [
      {
        "tool_call_id": "call_7Hk2",
        "output": {
          "customer_id": "C-1042",
          "name": "Agro Delta SRL",
          "payment_terms_days": 30
        }
      }
    ]
  }'

Cancel a task

POST/v1/tasks/{task_id}/cancel

Tasks in queued, running or requires_action can be cancelled. Tokens already used are billed.

Messages & threads

Use threads for conversations — a support chat, a WhatsApp exchange, an internal assistant. The thread keeps the history; each message you send returns the agent’s reply.

Create a thread

POST/v1/threads

ParameterDescription
agent_id string requiredThe agent that owns the conversation, e.g. sofia.
channel enumchat, email, whatsapp or internal. Shapes formatting and length.
contact objectName, email and phone of the person writing. Used to look up data the agent may share with them.
metadata objectReturned unchanged.
curl https://api.auroraaisystems.com/v1/threads \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "sofia",
    "channel": "whatsapp",
    "contact": {
      "name": "Mihai Popa",
      "phone": "+40700000000"
    },
    "metadata": {
      "crm_contact_id": "C-1042-01"
    }
  }'

Send a message

POST/v1/threads/{thread_id}/messages

curl https://api.auroraaisystems.com/v1/threads/thr_01J9ZC6Y2B/messages \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "user",
    "content": "Hello, where is our shipment to Lyon?",
    "stream": false
  }'
Agent reply
{
  "id": "msg_01J9ZC7T1D",
  "object": "message",
  "thread_id": "thr_01J9ZC6Y2B",
  "role": "agent",
  "agent_id": "sofia",
  "content": "Hi Mihai! Your shipment SHP-5530 left Pitești on 14 October and is now near Dijon. The driver’s ETA in Lyon is today at 16:30.",
  "handover": false,
  "sources": [
    "tms:shipment:SHP-5530"
  ],
  "usage": {
    "input_tokens": 2210,
    "output_tokens": 96,
    "total_tokens": 2306
  },
  "created_at": "2026-10-16T13:02:44Z"
}

If handover is true, the agent has stopped and a person should continue; the message content tells the client so, and task.escalated carries the summary for your team.

Streaming

Set "stream": true to receive the reply as server-sent events (text/event-stream) while it’s written. Events: message.delta, message.completed and error.

Event stream
event: message.delta
data: {"delta":"Hi Mihai! Your shipment SHP-5530 "}

event: message.delta
data: {"delta":"left Pitești on 14 October and is now near Dijon…"}

event: message.completed
data: {"id":"msg_01J9ZC7T1D","handover":false,"usage":{"input_tokens":2210,"output_tokens":96,"total_tokens":2306}}

List messages and delete a thread

GET/v1/threads/{thread_id}/messages

DELETE/v1/threads/{thread_id}

Deleting a thread permanently removes it and all its messages.

Tools

Tools let agents act in your systems. You describe an action with a JSON Schema; the agent decides when to call it and with which arguments. Nothing runs in your systems unless you register a tool for it.

Register a tool

POST/v1/tools

ParameterDescription
name string requiredUnique name, e.g. crm.find_customer. Letters, digits, dots and underscores.
description string requiredWhat the tool does and when to use it. Agents read this, so be specific.
input_schema object requiredJSON Schema for the arguments.
mode enum requiredwebhook: we call your URL. client: the task pauses and you run the tool.
url stringRequired in webhook mode. HTTPS only.
agents array requiredAgent ids allowed to call the tool.
timeout_ms integerHow long we wait for your response in webhook mode. Default 10,000, maximum 30,000.
curl https://api.auroraaisystems.com/v1/tools \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "crm.find_customer",
    "description": "Find a customer in our CRM by email address or VAT number.",
    "mode": "webhook",
    "url": "https://crm.yourcompany.example/aurora/tools",
    "agents": [
      "carla",
      "sofia",
      "ada"
    ],
    "timeout_ms": 10000,
    "input_schema": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        },
        "vat_id": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  }'

Webhook mode

We send a signed POST to your URL — same signature scheme as webhooks — and wait for your JSON response.

We send
{
  "tool": "crm.find_customer",
  "tool_call_id": "call_7Hk2",
  "task_id": "task_01J9Z3K8R4",
  "agent_id": "carla",
  "arguments": {
    "email": "mihai@agrodelta.example"
  }
}
You respond (200 OK)
{
  "output": {
    "customer_id": "C-1042",
    "name": "Agro Delta SRL",
    "payment_terms_days": 30
  }
}

If your endpoint returns an error or times out, the agent is told the tool failed. It retries once, continues without the result if it safely can, or escalates the task.

Client mode

The task pauses with status requires_action. Run the action yourself and send the result with submit tool outputs. Use client mode when your system can’t receive inbound calls.

List and delete tools

GET/v1/tools

DELETE/v1/tools/{tool_id}

Knowledge

Upload the documents agents should rely on — price lists, terms, policies, templates, past cases. When an agent works on a task, it retrieves the relevant passages and uses your facts instead of general knowledge.

Upload a document

POST/v1/knowledge/documents

ParameterDescription
file filePDF, DOCX, XLSX, CSV, TXT, MD or HTML, up to 50 MB. Send as multipart/form-data.
url / text stringInstead of a file, a public URL to fetch or plain text, as JSON.
title string requiredShown in the console and in the agent’s sources.
agents array requiredAgent ids that may use the document.
collection stringGroup documents, e.g. kb_lanes.
cURL — multipart upload
curl https://api.auroraaisystems.com/v1/knowledge/documents \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -F file=@road-tariffs-2026.xlsx \
  -F title="Road tariffs 2026" \
  -F "agents[]=quinn" \
  -F "agents[]=carla"
201 Created
{
  "id": "doc_8KQ2M1",
  "object": "knowledge_document",
  "title": "Road tariffs 2026",
  "status": "processing",
  "agents": [
    "quinn",
    "carla"
  ],
  "bytes": 184320,
  "created_at": "2026-10-06T10:41:00Z"
}

Status moves from processing to ready or failed, and you receive knowledge.document.ready or knowledge.document.failed. Uploading and indexing is free; passages used in a task count as input tokens.

List, retrieve and delete

GET/v1/knowledge/documents

GET/v1/knowledge/documents/{document_id}

DELETE/v1/knowledge/documents/{document_id}

Deleting a document removes the file and its index; agents stop using it.

Handoffs

Agents pass work to each other the way your team does: Carla completes a transport request, Quinn prices it, Rio books the carrier. Handoffs are defined in each agent’s manifest and agreed with you during setup.

ModeWhat happens
autoThe next task is created automatically, with the finished output as its input.
suggestThe output includes suggested_handoffs; nothing happens until you confirm.
noneNo handoff; your system decides what comes next.

Confirm a suggested handoff

POST/v1/tasks/{task_id}/handoff

curl https://api.auroraaisystems.com/v1/tasks/task_01J9Z3K8R4/handoff \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "quinn",
    "type": "quote.create",
    "input_overrides": {
      "pricing_rules": "key_accounts"
    }
  }'

Every handoff is recorded in the parent task’s handoffs array and the child task’s parent_task_id, and fires handoff.created. Atlas can coordinate longer chains for you.

Webhooks

Webhooks push events to your system as they happen, so you don’t have to poll.

Register an endpoint

POST/v1/webhooks

curl https://api.auroraaisystems.com/v1/webhooks \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://crm.yourcompany.example/hooks/aurora",
    "events": [
      "task.completed",
      "task.escalated",
      "limit.reached",
      "invoice.created"
    ],
    "description": "CRM production"
  }'
201 Created — the secret is shown only once
{
  "id": "whk_3MZ81Q",
  "object": "webhook",
  "url": "https://crm.yourcompany.example/hooks/aurora",
  "events": [
    "task.completed",
    "task.escalated",
    "limit.reached",
    "invoice.created"
  ],
  "secret": "whsec_…",
  "created_at": "2026-10-06T10:02:00Z"
}

Events

EventSent when
task.completedA task finished with an output.
task.failedA task could not finish.
task.requires_actionA task waits for your tool result.
task.escalatedA guardrail handed a task to a person.
handoff.createdAn agent passed work to another agent.
message.completedAn agent finished a reply in a thread.
knowledge.document.readyA document is indexed and in use.
knowledge.document.failedA document could not be processed.
usage.threshold_reachedUsage crossed one of your alert thresholds.
limit.reachedA token limit or spending cap was reached.
invoice.createdA new invoice was issued.
invoice.paidAn invoice was paid.
invoice.payment_failedAn automatic payment failed.
agent.updatedAn agent’s persona, status or limits changed.

Payload

Event envelope
{
  "id": "evt_01J9Z4D2WQ",
  "object": "event",
  "type": "task.completed",
  "created_at": "2026-10-09T08:14:09Z",
  "data": {
    "object": {
      "id": "task_01J9Z3K8R4",
      "object": "task",
      "agent_id": "carla",
      "status": "completed",
      "output": {
        "transport_request": {
          "…": "…"
        }
      },
      "metadata": {
        "crm_record_id": "REQ-2041"
      }
    }
  }
}

Verifying signatures

Every webhook and webhook-mode tool call carries an Aurora-Signature header, e.g. t=1760000043,v1=6c1f…. Compute an HMAC-SHA256 with your endpoint secret over {t}.{raw body}, compare it in constant time with v1, and reject requests older than 5 minutes.

import crypto from "node:crypto";

// rawBody: the request body exactly as received, before JSON parsing
export function verifyAuroraSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
  const given = Buffer.from(parts.v1 || "", "hex");
  const exp = Buffer.from(expected, "hex");
  return given.length === exp.length && crypto.timingSafeEqual(given, exp);
}

Delivery and retries

Respond with a 2xx status within 10 seconds, then do the heavy work in the background. Otherwise we retry with exponential backoff for up to 24 hours. Events can arrive more than once or out of order — store the event id and ignore duplicates.

Usage & token limits

Every model call made for your tasks is metered in tokens. Usage drives your alerts, your limits and the extra-token line on your invoice.

How tokens are counted

  • Input tokens: the agent’s instructions and persona, your task input, conversation history, retrieved knowledge passages and tool results.
  • Output tokens: everything the agent writes, including tool-call arguments.
  • A task’s usage is the sum of all its model calls. Input and output tokens are priced the same.
  • Each agent includes 10,000,000 tokens per month, pooled across your agents and reset at 00:00 UTC on the 1st. Extra tokens cost €15 per million, metered per 1,000.
  • Uploading and indexing knowledge is free. Tasks that fail because of an error on our side aren’t billed.

Every task and message returns a usage object, and every response carries these headers:

HeaderValue
Aurora-Tokens-UsedTokens used by this request.
Aurora-Tokens-RemainingIncluded tokens left in the current billing month, across your account.
Aurora-Spend-RemainingEUR left before your spending cap, when the policy is cap.

Retrieve usage

GET/v1/usage

ParameterDescription
period YYYY-MMBilling month. Defaults to the current one.
group_by enumagent (default), api_key or day.
curl https://api.auroraaisystems.com/v1/usage?period=2026-10&group_by=agent \
  -H "Authorization: Bearer $AURORA_API_KEY"
200 OK
{
  "object": "usage",
  "period": "2026-10",
  "included_tokens": 30000000,
  "used_tokens": 18412360,
  "remaining_included_tokens": 11587640,
  "overage_tokens": 0,
  "overage_amount_eur": 0.00,
  "by_agent": [
    {
      "agent_id": "carla",
      "input_tokens": 6904112,
      "output_tokens": 1301228,
      "total_tokens": 8205340,
      "tasks": 1874
    },
    {
      "agent_id": "quinn",
      "input_tokens": 5140215,
      "output_tokens": 964665,
      "total_tokens": 6104880,
      "tasks": 932
    },
    {
      "agent_id": "rio",
      "input_tokens": 3512018,
      "output_tokens": 590122,
      "total_tokens": 4102140,
      "tasks": 611
    }
  ],
  "updated_at": "2026-10-19T08:00:00Z"
}

Limits

Limits decide what happens when your included tokens run out, and keep any single agent or integration from using the whole pool. You set the policy at checkout and can change it at any time; changes take effect immediately.

The limits object

GET/v1/limits

Limits object
{
  "object": "limits",
  "overage_policy": "cap",
  "monthly_spend_cap_eur": 500.00,
  "alert_thresholds_pct": [
    50,
    80,
    100
  ],
  "alert_emails": [
    "finance@yourcompany.example"
  ],
  "agents": {
    "carla": {
      "monthly_token_limit": 12000000
    },
    "quinn": {
      "monthly_token_limit": null
    }
  },
  "api_keys": {
    "key_crm_prod": {
      "monthly_token_limit": null
    }
  },
  "rate_limits": {
    "requests_per_minute_per_agent": 60,
    "tokens_per_minute_per_agent": 200000
  },
  "max_output_tokens": 4000
}

Update limits

PATCH/v1/limits

ParameterDescription
overage_policy enumhard_stop: stop at the included tokens. cap: allow extra tokens up to monthly_spend_cap_eur. unlimited: allow extra tokens without a cap.
monthly_spend_cap_eur numberMaximum spend on extra tokens per month, excl. VAT. Used with cap.
alert_thresholds_pct arrayPercentages of included tokens that trigger usage.threshold_reached.
alert_emails arrayWho receives alert emails.
agents.{agent_id}.monthly_token_limit integer or nullMonthly limit for one agent.
api_keys.{key_id}.monthly_token_limit integer or nullMonthly limit for one API key.
curl -X PATCH https://api.auroraaisystems.com/v1/limits \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "overage_policy": "cap",
    "monthly_spend_cap_eur": 800,
    "agents": {
      "quinn": {
        "monthly_token_limit": 8000000
      }
    }
  }'

Rate limits are read-only; contact us to raise them.

When a limit is reached

SituationResponse
Included tokens used up and policy is hard_stop402 with code quota_exceeded
Spending cap reached (policy cap)402 with code spend_cap_reached
An agent’s monthly limit reached402 with code agent_limit_reached, for that agent only
An API key’s monthly limit reached402 with code key_limit_reached, for that key only

Tasks already running finish normally. New tasks and messages are rejected until the next billing month or until you raise the limit. A limit.reached event is sent once per limit per month.

402 Payment Required
{
  "error": {
    "type": "limit_error",
    "code": "spend_cap_reached",
    "message": "Monthly spend cap of €500.00 reached. Raise monthly_spend_cap_eur or wait until 1 November 2026.",
    "request_id": "req_01J9ZB4N7F"
  }
}

Billing & invoices

Read your subscription, preview the next invoice and fetch invoices — for example to book them automatically in your ERP.

  • The setup fee is invoiced when you order.
  • Subscriptions start at go-live; the first month is prorated by day.
  • On the 1st of each month one invoice is issued: subscriptions for the new month in advance, extra tokens from the previous month in arrears and, for card payments, the processor fee passed on at cost where permitted.
  • Card and SEPA Direct Debit are charged automatically on the invoice date; bank transfers are due within 14 days.
  • For Romanian companies, invoices are also submitted through e-Factura.

Subscription

GET/v1/billing/subscription

Subscription object
{
  "object": "subscription",
  "status": "active",
  "currency": "EUR",
  "agents": [
    {
      "agent_id": "carla",
      "status": "active",
      "unit_price": 699.00,
      "active_since": "2026-10-06"
    },
    {
      "agent_id": "quinn",
      "status": "active",
      "unit_price": 699.00,
      "active_since": "2026-10-06"
    },
    {
      "agent_id": "rio",
      "status": "active",
      "unit_price": 699.00,
      "active_since": "2026-10-06"
    }
  ],
  "current_period": {
    "start": "2026-10-01",
    "end": "2026-10-31"
  },
  "overage_price_per_million": 15.00,
  "payment_method": {
    "type": "sepa_debit",
    "last4": "3000"
  }
}

Add or remove agents

POST/v1/billing/subscription/agents

curl https://api.auroraaisystems.com/v1/billing/subscription/agents \
  -H "Authorization: Bearer $AURORA_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "sofia"
  }'

The agent is added in status configuring and becomes active once it’s set up for you; billing starts on activation, prorated. If it needs a new integration, we confirm the scope with you first.

DELETE/v1/billing/subscription/agents/{agent_id}

Removes the agent at the end of the current billing month.

Upcoming invoice

GET/v1/billing/upcoming

Invoice preview
{
  "object": "invoice_preview",
  "issue_date": "2026-11-01",
  "currency": "EUR",
  "lines": [
    {
      "description": "Agent subscription — November 2026",
      "quantity": 3,
      "unit_price": 699.00,
      "amount": 2097.00
    },
    {
      "description": "Extra tokens — October 2026",
      "quantity": 0,
      "unit": "1M tokens",
      "unit_price": 15.00,
      "amount": 0.00
    }
  ],
  "subtotal": 2097.00,
  "vat": {
    "treatment": "domestic",
    "rate": 21,
    "amount": 440.37
  },
  "total": 2537.37
}

Invoices

GET/v1/billing/invoices

GET/v1/billing/invoices/{invoice_id}

GET/v1/billing/invoices/{invoice_id}/pdf

Invoice object
{
  "id": "inv_2026_11_0042",
  "object": "invoice",
  "number": "AUR 0142",
  "status": "paid",
  "issue_date": "2026-11-01",
  "due_date": "2026-11-01",
  "currency": "EUR",
  "subtotal": 2097.00,
  "vat_amount": 440.37,
  "total": 2537.37,
  "payment": {
    "method": "sepa_debit",
    "status": "succeeded",
    "paid_at": "2026-11-04T06:12:00Z"
  },
  "e_invoice": {
    "system": "RO e-Factura",
    "status": "accepted"
  },
  "pdf_url": "https://api.auroraaisystems.com/v1/billing/invoices/inv_2026_11_0042/pdf"
}
ParameterDescription
number stringSeries and number as issued by our invoicing system.
status enumopen, paid, overdue or void.
payment objectMethod and status of the automatic payment, if any.
e_invoice object or nullFor Romanian companies: pending, sent, accepted or rejected in e-Factura.

Errors

Errors use standard HTTP status codes and a consistent JSON body.

422 Unprocessable Entity
{
  "error": {
    "type": "validation_error",
    "code": "missing_field",
    "message": "input.body is required when input.channel is \"email\".",
    "param": "input.body",
    "request_id": "req_01J9ZA2K5C"
  }
}
StatusTypeWhen
400invalid_request_errorMalformed JSON, unknown parameter or wrong type.
401authentication_errorMissing, invalid or revoked API key.
402limit_errorA token limit or spending cap was reached. code says which.
403permission_deniedThe key lacks the scope or agent access for this request.
404not_foundThe object doesn’t exist or isn’t visible to this key.
409conflictIdempotency key reused with a different body, or the object’s state doesn’t allow the action.
413payload_too_largeRequest body or file over the size limit.
422validation_errorInput doesn’t match the task type’s schema; param names the field.
429rate_limit_errorToo many requests or tokens per minute.
500api_errorSomething went wrong on our side. Safe to retry with the same Idempotency-Key.
503overloadedTemporary capacity issue. Retry with backoff.

Every error includes a request_id. Send it to support@auroraaisystems.com if you need help.

Rate limits

By default each agent accepts 60 requests and 200,000 tokens per minute on your account. Higher limits are available on request.

HeaderMeaning
RateLimit-LimitRequests allowed in the current window.
RateLimit-RemainingRequests left in the window.
RateLimit-ResetSeconds until the window resets.
Retry-AfterSent with 429: seconds to wait before retrying.

Retry 429 and 503 with exponential backoff and jitter. Don’t retry other 4xx errors without changing the request.

Idempotency

Send an Idempotency-Key header — any unique string, such as a UUID — with POST requests. If the same key arrives again within 24 hours with the same body, you get the original response instead of a duplicate task. The same key with a different body returns 409 conflict.

Pagination

List endpoints return pages of up to 100 objects (default 20). Pass limit and, for the next page, cursor.

List response
{
  "object": "list",
  "data": [
    {
      "id": "task_01J9Z3K8R4",
      "object": "task",
      "status": "completed"
    }
  ],
  "has_more": true,
  "next_cursor": "c_9f3a1e"
}

Versioning

Pin a version with the Aurora-Version header, e.g. Aurora-Version: 2026-10-01. Without the header, your account’s version — set at go-live — is used. Breaking changes only ship in new dated versions, announced in the changelog. New fields, event types and task types can appear at any time, so ignore fields you don’t recognise.

Agent reference

Task types and example payloads for each agent. Exact input fields and output schemas for your account — including fields added for your systems during setup — are available in the console and through GET /v1/agents/{agent_id}.

Carla — Transport Request Coordinator

Agent id carla, Operations. Agent page

Task typeWhat it does
transport_request.extractTurn an email, message or document into a structured transport request
transport_request.qualifyCheck completeness and fit against your lanes and rules
transport_request.follow_upDraft or send the message that asks the client for missing details
Example input — POST /v1/agents/carla/tasks
{
  "type": "transport_request.extract",
  "input": {
    "channel": "email",
    "from": "mihai@agrodelta.example",
    "subject": "Truck Pitesti - Lyon",
    "body": "Hi, we need a truck from Pitești to Lyon next week, 14 europallets ~9t, not stackable. Can you send a price?"
  },
  "callback_url": "https://crm.yourcompany.example/hooks/aurora"
}
Example output — transport_request.extract
{
  "transport_request": {
    "pickup": {
      "city": "Pitești",
      "country": "RO",
      "postcode": null,
      "date": null
    },
    "delivery": {
      "city": "Lyon",
      "country": "FR",
      "postcode": null
    },
    "cargo": {
      "pallet_type": "EUR",
      "pallets": 14,
      "stackable": false,
      "weight_kg": 9000,
      "loading_meters": 5.6,
      "adr": false
    },
    "missing_fields": [
      "pickup.date",
      "delivery.postcode"
    ],
    "language": "en",
    "confidence": 0.93
  }
}

Rio — Dispatch & Carrier Coordinator

Agent id rio, Operations. Agent page

Task typeWhat it does
carrier.matchShortlist carriers for a load from your own data
carrier.request_offersSend price requests to carriers and collect the replies
shipment.updateProcess a status, ETA or delay event and notify the right people
documents.checkCheck CMR, POD and photos for completeness
Example input — POST /v1/agents/rio/tasks
{
  "type": "carrier.match",
  "input": {
    "shipment_id": "SHP-5530",
    "lane": {
      "from": "RO-110",
      "to": "FR-69"
    },
    "vehicle": "tautliner",
    "max_buy_price": 1260
  }
}
Example output — carrier.match
{
  "candidates": [
    {
      "carrier_id": "car_118",
      "name": "Carpat Trans SRL",
      "lane_loads_90d": 4,
      "last_price": 1190,
      "score": 0.91
    },
    {
      "carrier_id": "car_052",
      "name": "Dunav Freight EOOD",
      "lane_loads_90d": 2,
      "last_price": 1240,
      "score": 0.78
    }
  ],
  "recommended": "car_118"
}

Quinn — Quote & Pricing Specialist

Agent id quinn, Sales & marketing. Agent page

Task typeWhat it does
quote.createPrice a request and produce the offer
quote.compare_offersRank carrier or supplier offers against your rules
quote.follow_upChase open offers and record win or loss reasons
Example input — POST /v1/agents/quinn/tasks
{
  "type": "quote.create",
  "input": {
    "transport_request_id": "REQ-2041",
    "pricing_rules": "default",
    "currency": "EUR",
    "formats": [
      "email",
      "pdf"
    ]
  }
}
Example output — quote.create
{
  "quote": {
    "id": "Q-7781",
    "sell_price": 1560,
    "currency": "EUR",
    "breakdown": {
      "estimated_buy_price": 1240,
      "margin": 320
    },
    "margin_pct": 20.5,
    "valid_until": "2026-10-12T14:00:00Z",
    "approval_required": false,
    "files": [
      {
        "type": "pdf",
        "file_id": "file_q7781"
      }
    ]
  }
}

Victor — Sales Development Rep

Agent id victor, Sales & marketing. Agent page

Task typeWhat it does
lead.qualifyScore a lead against your ideal customer profile
lead.researchSummarise what a company does and why it may need you
outreach.draftWrite a first message or a follow-up sequence
deal.next_stepSuggest and schedule the next action on a deal
Example input — POST /v1/agents/victor/tasks
{
  "type": "lead.qualify",
  "input": {
    "lead": {
      "name": "Elena Radu",
      "company": "Nordic Pack SRL",
      "website": "https://nordicpack.example",
      "message": "We’re looking for a partner for weekly groupage to Germany."
    },
    "criteria": "default"
  }
}
Example output — lead.qualify
{
  "qualification": {
    "score": 82,
    "fit": "high",
    "segment": "manufacturing",
    "reasons": [
      "recurring weekly volume",
      "lane matches RO to DE groupage"
    ],
    "next_step": {
      "type": "call_proposal",
      "draft_id": "drf_441"
    }
  }
}

Mara — Marketing Manager

Agent id mara, Sales & marketing. Agent page

Task typeWhat it does
content.planBuild a content calendar for a period and a goal
content.draftWrite posts, newsletters, articles or ad copy
seo.briefPrepare an SEO brief with search intent and outline
review.replyDraft a reply to a review or comment
Example input — POST /v1/agents/mara/tasks
{
  "type": "content.draft",
  "input": {
    "format": "social_post",
    "channel": "linkedin",
    "topic": "Weekly groupage Romania to Germany",
    "audience": "operations managers in manufacturing",
    "language": "en",
    "variants": 2
  }
}
Example output — content.draft
{
  "drafts": [
    {
      "id": "drf_901",
      "text": "Every Thursday a truck leaves Romania for Germany with room for your pallets…",
      "status": "waiting_for_approval"
    },
    {
      "id": "drf_902",
      "text": "Groupage to Germany shouldn’t mean waiting for a full truck…",
      "status": "waiting_for_approval"
    }
  ]
}

Sofia — Customer Support Lead

Agent id sofia, Customer service. Agent page

Task typeWhat it does
ticket.triageClassify a message by topic and urgency and route it
ticket.replyAnswer a client message with data from your systems
claim.intakeOpen a claim and collect the required documents
Example input — POST /v1/agents/sofia/tasks
{
  "type": "ticket.reply",
  "input": {
    "channel": "whatsapp",
    "contact": {
      "phone": "+40700000000"
    },
    "message": "Hello, where is our shipment to Lyon?",
    "context_lookup": true
  }
}
Example output — ticket.reply
{
  "reply": {
    "text": "Hi Mihai! Your shipment SHP-5530 left Pitești on 14 October and is now near Dijon…",
    "language": "en",
    "sources": [
      "tms:shipment:SHP-5530"
    ]
  },
  "ticket": {
    "id": "T-9120",
    "status": "answered",
    "handover": false
  }
}

Ada — Accounting Assistant

Agent id ada, Finance & procurement. Agent page

Task typeWhat it does
invoice.extractRead a supplier invoice into structured data
invoice.matchMatch an invoice to orders, shipments or POs
payments.reconcileReconcile a bank statement against open items
collections.remindPrepare or send a payment reminder
Example input — POST /v1/agents/ada/tasks
{
  "type": "invoice.extract",
  "input": {
    "file_id": "file_inv_4471",
    "match_against": [
      "orders",
      "shipments"
    ]
  }
}
Example output — invoice.extract
{
  "invoice": {
    "supplier": {
      "name": "Carpat Trans SRL",
      "vat_id": "RO00000000"
    },
    "number": "4471",
    "issue_date": "2026-10-17",
    "currency": "EUR",
    "total": 1250.00,
    "lines": [
      {
        "description": "Transport Pitești–Lyon",
        "amount": 1210.00
      },
      {
        "description": "Waiting time",
        "amount": 40.00
      }
    ]
  },
  "match": {
    "shipment_id": "SHP-5530",
    "expected_total": 1210.00,
    "difference": 40.00,
    "status": "needs_review"
  }
}

Paul — Procurement Specialist

Agent id paul, Finance & procurement. Agent page

Task typeWhat it does
rfq.createWrite and send a request for quotation
offers.compareCompare supplier offers against weighted criteria
po.draftDraft a purchase order for approval
spend.analyzeBreak down spend by category and supplier
Example input — POST /v1/agents/paul/tasks
{
  "type": "offers.compare",
  "input": {
    "rfq_id": "rfq_311",
    "criteria": {
      "price": 0.5,
      "delivery": 0.3,
      "terms": 0.2
    }
  }
}
Example output — offers.compare
{
  "ranking": [
    {
      "supplier": "Supplier C",
      "unit_price": 326,
      "delivery_days": 2,
      "includes_fitting": true,
      "score": 0.86
    },
    {
      "supplier": "Supplier A",
      "unit_price": 318,
      "delivery_days": 1,
      "includes_fitting": false,
      "score": 0.82
    },
    {
      "supplier": "Supplier B",
      "unit_price": 299,
      "delivery_days": 21,
      "includes_fitting": false,
      "score": 0.64
    }
  ],
  "recommendation": "Supplier C if fitting is needed; otherwise Supplier A."
}

Hugo — HR & Recruitment Partner

Agent id hugo, People & legal. Agent page

Task typeWhat it does
job_ad.draftWrite a job ad from a short brief
applications.organizeTurn CVs into one structured table — no scoring
interview.schedulePropose and book interview slots
documents.expiryList licences, certificates and contracts that expire soon
Example input — POST /v1/agents/hugo/tasks
{
  "type": "documents.expiry",
  "input": {
    "within_days": 60,
    "document_types": [
      "driving_licence",
      "adr_certificate",
      "tachograph_card",
      "contract"
    ]
  }
}
Example output — documents.expiry
{
  "expiring": [
    {
      "employee_id": "emp_204",
      "document": "tachograph_card",
      "expires_on": "2026-11-28"
    },
    {
      "employee_id": "emp_118",
      "document": "tachograph_card",
      "expires_on": "2026-12-03"
    },
    {
      "employee_id": "emp_311",
      "document": "tachograph_card",
      "expires_on": "2026-12-09"
    }
  ],
  "notified": [
    "employees",
    "fleet_manager"
  ]
}

Lex — Legal & Compliance Assistant

Agent id lex, People & legal. Agent page

Task typeWhat it does
contract.reviewCheck a contract against your playbook
contract.draftDraft a document from your template
contract.compareExplain the differences between two versions
claim.prepareAssemble a damage or delay claim file
gdpr.requestLog and track a data-subject request
Example input — POST /v1/agents/lex/tasks
{
  "type": "contract.review",
  "input": {
    "file_id": "file_nordic_fta",
    "playbook": "transport_client_v3"
  }
}
Example output — contract.review
{
  "review": {
    "issues": [
      {
        "clause": "7.2",
        "topic": "payment_term",
        "found": "90 days",
        "playbook": "max 45 days",
        "severity": "high",
        "suggested_text": "Payment within 45 days of the invoice date."
      },
      {
        "clause": "9.3",
        "topic": "liability_cap",
        "found": "EUR 500 per shipment",
        "playbook": "CMR limits",
        "severity": "high"
      },
      {
        "clause": "15.1",
        "topic": "auto_renewal",
        "found": "3 years",
        "playbook": "max 1 year",
        "severity": "medium"
      }
    ],
    "escalate": [
      {
        "clause": "12",
        "reason": "exclusive foreign jurisdiction"
      }
    ]
  }
}

Iris — Data & Reporting Analyst

Agent id iris, Management. Agent page

Task typeWhat it does
data.askAnswer a question about your data, with sources
report.generateBuild a scheduled KPI report
anomaly.scanLook for unusual movements in your metrics
Example input — POST /v1/agents/iris/tasks
{
  "type": "data.ask",
  "input": {
    "question": "Why is our margin lower this month?",
    "sources": [
      "erp",
      "tms"
    ],
    "period": "2026-10"
  }
}
Example output — data.ask
{
  "answer": {
    "text": "Gross margin is 14.2% against 17.9% last month…",
    "figures": [
      {
        "metric": "gross_margin_pct",
        "value": 14.2,
        "previous": 17.9
      }
    ],
    "sources": [
      "erp:invoices",
      "tms:shipments"
    ],
    "suggested_actions": [
      {
        "agent_id": "ada",
        "type": "collections.remind",
        "note": "invoice unbilled waiting time"
      }
    ]
  }
}

Atlas — Chief of Staff

Agent id atlas, Management. Agent page

Task typeWhat it does
task.routeUnderstand a request and send it to the right agent
brief.generatePrepare a management brief for a period
meeting.summarizeTurn notes or a transcript into decisions and tasks
followups.trackList open items and chase their owners
Example input — POST /v1/agents/atlas/tasks
{
  "type": "brief.generate",
  "input": {
    "period": "yesterday",
    "audience": "management",
    "agents": [
      "carla",
      "quinn",
      "rio",
      "ada",
      "paul",
      "lex"
    ]
  }
}
Example output — brief.generate
{
  "brief": {
    "summary": "Yesterday: 38 transport requests, 21 quotes sent, 14 accepted.",
    "needs_decision": [
      {
        "ref": "PO-1204",
        "agent_id": "paul",
        "action": "approve purchase order"
      },
      {
        "ref": "contract_nordic_fta",
        "agent_id": "lex",
        "action": "sign off contract check"
      },
      {
        "ref": "client_agro_delta",
        "agent_id": "quinn",
        "action": "framework price"
      }
    ]
  }
}

Security & data

  • In transit and at rest: all traffic uses TLS; stored data is encrypted at rest.
  • Use of your data: your inputs, outputs and documents are processed only to perform your tasks and provide the service. They are not used to train AI models.
  • Retention: task inputs and outputs are kept for 90 days by default. Set a shorter period in the console — or zero, to delete them once delivered. Threads, tasks and documents can be deleted at any time through the API.
  • Access: scoped keys, per-key limits and a request log with key and request id for every call.
  • Data protection: we process personal data on your behalf under the data processing terms of the subscription.

Changelog

2026-10-01

First public version of the API: agents, tasks, threads and messages with streaming, tools, knowledge, handoffs, webhooks, usage and limits, billing and invoices.