“Finance already approved this”
A finance manager approved the refund, but the customer says nothing happened. Approval is only one step: the decision has to be delivered and verified, the original agent has to come back and resume, Axiom has to claim and dispatch execution, and the provider has to confirm. This page shows how to find which step is waiting and who is responsible next.
To diagnose “finance already approved this,” inspect request delivery, native approval ID and verified decision, last notification delivery, last agent status read, execution claim and target acknowledgment. Show the next responsible party. An unreachable connector or missing agent heartbeat leaves status uncertain. An approved action may simply be waiting for its agent to return.
Open the action timeline
Find the action: search by action ID, agent, tenant or invoice in the project's Actions (/app/projects/:pid/actions), or across projects in Control Evidence (/control/orgs/:oid/evidence) or Incidents search (POST /v1/orgs/{oid}/search). Then open Action detail (/app/actions/:aid), or call:
GET /v1/actions/{action_id}/timelineThe response has status, agent, decision (the stored policy result and rule trace), events, approvals (each with its decisions), related (delegated actions sharing the root) and diagnosis:
{
"diagnosis": {
"steps": [
{ "step": "Request delivered to approval system", "state": "done", "detail": null },
{ "step": "Verified decision recorded", "state": "done" },
{ "step": "Last notification delivery", "state": "done", "detail": "delivered at 2026-11-14T18:04:02.000Z" },
{ "step": "Agent read status after the decision", "state": "missing", "detail": "2026-11-14T18:01:40.000Z" },
{ "step": "Execution claimed and dispatched", "state": "pending" },
{ "step": "Target acknowledged outcome", "state": "pending" }
],
"next_responsible_party": "The requesting agent: it must resume with the same action ID"
}
}Read each step
| Step | States | What to check |
|---|---|---|
| Request delivered to approval system | not_required, pending, failed, done; detail holds the last delivery error | For a connector, the approval's native_ref (for ServiceNow the record sys_id) and last_delivery_at. failed means 8 attempts failed: fix the connector or approver mapping. |
| Verified decision recorded | not_required, pending, partial, denied, done | Each decision's approver, verified_via (axiom_session or connector_readback) and native_ref. partial means a second approver is still needed. If the approver decided in ServiceNow but this is pending, check progress: decision_readback_unavailable means Axiom cannot read the native record yet. |
| Last notification delivery | missing, pending, failed, done; detail is "status at time" plus the last error | The most recent webhook delivery for this action. missing means no webhook is configured for this project, agent or tenant (not a failure); failed means the delivery was marked dead after 10 attempts; pending means queued or retrying. Webhooks are optional: an agent may poll instead. |
| Agent read status after the decision | done or missing; detail is the time of the last read | Once the action was approved, only a read made after the approval counts as done: an earlier read cannot have seen the decision. Before approval, any read counts. missing with an older detail means the agent last looked before it was approved. |
| Execution claimed and dispatched | pending, done | The dispatched event names the gateway and claim ID. |
| Target acknowledged outcome | pending, observed_only, unknown, done | done means a valid provider-signed attestation; observed_only means the gateway saw an HTTP response without one; unknown means reconciliation is running. |
Next responsible party
next_responsible_party | When |
|---|---|
Axiom (approval delivery) | Pending approval and the request is not yet delivered. |
Approver in servicenow (or Approver in axiom) | Pending approval, delivered, waiting for a person. |
The requesting agent: it must resume with the same action ID | Approved. Nothing runs until the original agent resumes. |
Provider: commit and acknowledge | Executing: dispatched, waiting for the provider's response. |
Provider: reconciliation by operation key | Outcome unknown. |
No one: the action is closed | Succeeded, failed, denied, expired, revoked or cancelled. |
The common answers
- Approved, waiting for the agent (state
approved, progressawaiting_agent_resume). The most common case. The agent may be stopped, waiting for a webhook it never receives, or a CLI that only runs when someone invokes it. Ask the agent's operator to run status and resume with the same action ID (for a CLI:axiom status act_…, thenaxiom resume act_…). If the resume deadline passes first, the action expires (resume_expired) and a new request needs a fresh approval. - Decided in the native system, not yet verified (state
pending_approval, progressdecision_readback_unavailableorwaiting_on_person). Axiom accepts a decision only after it reads it back from the approval system. Check the connector's health and that the native system calls the connector webhook. - Approved, then closed on resume (state
revokedordenied). Readreason_code: the agent was suspended, the grant revoked, policy changed (policy_stale) or the approver lost the role (approver_ineligible). The approval was valid, but authority is rechecked at execution. - Dispatched, result uncertain (state
outcome_unknown). The provider received the request but its answer was lost. Do not resubmit. Axiom is reconciling by operation key; the provider's own records are authoritative. - Succeeded, but the customer cannot see it. Open the receipt:
target_refis the provider's own record ID (for example the refund ID), and "destination confirmed" tells you whether the provider signed it.
What the diagnosis cannot see
- Agent liveness. Axiom sees an agent only when it calls. A delivered notification proves the relay endpoint accepted the event, not that the agent's runtime woke up; "Agent read status after the decision" is the evidence that it did. With no read after the decision and no heartbeat from the agent's runtime, the agent's status is uncertain, not failed.
- An unreachable connector leaves the decision state uncertain. Missing evidence is shown as
pendingormissing, never as a denial.