Back office

Chain the endpoints you already run, with no model in the way

Half of what gets called an agent problem is a plumbing problem. The API Orchestrator is the deterministic half of Mopus. Steps call your endpoints, pass values between them, and branch on what came back.

Every team has the same script. Authenticate, fetch the customer, fetch their orders, compute something, write it back, notify someone. It lives in a cron job nobody owns, and when it fails at 3am the log says `undefined`.

7.8 mo

median slip on a first in-house agent build. Only 26% ship on time.

AgentCorps

The flow

What runs when the message arrives.

Every step below is a real node type on the canvas, and the log underneath is the execution it produces. A branch the run didn't take stays dark, same as it would in the console.

agents / customer-3607 steps
trigger
auth.token
customers.get
orders.list
risk
review.create
sync.push
run_4f80c1customer-360completed · 0.42s
  1. 01orchestrator.runcustomer-360 · run-syncstarted
  2. 02step.httpPOST /v1/auth/token200 · 84ms
  3. 03step.httpGET /v1/customers/{input.id}200 · 131ms
  4. 04step.httpGET /v1/orders?status=open200 · 96ms
  5. 05conditionorders.body.total > 5000false
  6. 06step.httpPOST /v1/sync202 · 74ms
  7. 07orchestrator.return5 calls · ok0.42s

What it uses

What this leans on.

Values move by template

Give each step an alias and read the previous one with `{alias.body.field}`. That same alias is the identifier a CEL condition branches on.

One trigger for the whole chain

A single token and one POST runs it. Wait for the result, put it on a queue, or set a delay you can cancel.

Delays measured in days

Under ten minutes the queue holds it. Beyond that a one-shot schedule does. Either can be cancelled by id.

A large response is not truncated

Steps are recorded in their own rows, so a step returning a big body is kept whole rather than trimmed to fit beside the others.

What it meters

One execution per run of the chain, however many calls it makes.