Approve a held agent action (and execute it)
Approves one write an agent asked for and the workspace’s approval policy held for review
(GET /api/agent-approvals lists them). By default approving executes the action, exactly
once, with the exact arguments the agent sent, and the response carries the real outcome.
Send "execute": false to approve it without executing — the decision is recorded and a
person does it by hand.
Payments held by the platform. When a payment is confirmed (a Cobre or dLocal charge paid,
or a payment receipt confirmed by a bank credit or verified by a person), Jelliu holds one action
per connected ERP to register it (tool_source: erp_payment, origin: system, requested by
“Jelliu”, valid for 7 days). These are never executed without approval. Approving one creates
the payment exactly as shown (Alegra payment or Siigo cash receipt, applied to the matched open
invoice), after re-checking that the ERP is still connected and that the invoice still belongs to
that customer and still owes at least the amount. When the customer, the invoice or where the
money landed could not be determined unambiguously (and always for SAP Business One), the action
is held record-only: executable is false, its params.motivo says why, executing it answers
409 AGENT_ACTION_NOT_EXECUTABLE, and it is approved with "execute": false once registered by hand.
What is checked again at execution time. The approval authorizes this action; it does not
bypass anything else. Before sending it, every control the agent’s own write would pass is
re-checked: the app is still connected (and to the same account the request was made against),
the agent is not paused or deleted, the app is still in the agent’s scope and not read-only,
the tool is not disabled, the write lane is on, and the month’s execution budget is not spent.
If any of these changed, nothing is sent and the action ends in execution_failed with the
reason.
Outcomes (status in the response and on the row):
executed— it ran and the app confirmed it.executedAtandexecutionActionId(the agent action log entry for the execution) are set.execution_failed— it definitely did not happen: a control refused it or the app rejected it.executionErrorsays why.execution_unknown— it was sent but the answer was lost (timeout, network). It may or may not have happened; check the app before doing it again. It is never retried automatically.approved— only with"execute": false: recorded, nothing executed.
The workspace also gets an in-app notification with the outcome.
Idempotency. Exactly once. Two concurrent approvals of the same action execute it a single
time; the other request gets 409 AGENT_ACTION_APPROVAL_CLOSED naming the state and who
decided it. An expired action is never executed. Do not retry a 200 whose status is
execution_unknown: the action cannot be approved twice, by design.
Access
- Required role:
admin(a person, or a key withfullscope). An agent key can never approve its own action. - Rate limit: Audit routes limit. See Rate limits.
- Plan: Available on every plan.
Authentication
Workspace API key: jl_ followed by 64 lowercase hex characters, created by the workspace owner in the
dashboard (Settings → API Keys) and sent as Authorization: Bearer jl_.... The plaintext is shown once,
at creation; Jelliu stores only a SHA-256 hash. A workspace can hold up to 25 active keys.
Operations restricted to admins or owners reject keys without the full scope with 403, and say so in
their description. No key, whatever its scope, can mint or revoke API keys or rotate a webhook secret —
that requires a signed-in owner session. A revoked key stops authenticating within about 10 seconds.
See Authentication.
Path parameters
Request
true (default) executes the action once. false approves it without executing
(record-only). Must be a JSON boolean; a string is rejected with 400.
Response
The approval was recorded. executed and status say what happened to the action; a 200
does not by itself mean the action ran.

