Held Executions

Approve or deny a held execution

Changed on

Decide a pending held execution — the agent's owner or an org:admin only.

approve releases the call, which is re-authorized and run once; deny fails it with a permission-denied result. The first decision wins: deciding one that is no longer pending (or has expired) answers 409. An agent caller is always refused (403), whatever its permissions.

post/executions/holds/{held_execution_id}:decide

Request

  • Base URL: / (relative, and the document was published on a file host, not at the API’s origin)
  • URL: /executions/holds/{held_execution_id}:decide
  • Auth: one of:
    • HTTP bearer
    • OAuth 2 (authorization code, authorization URL /authorize, token URL /oauth/token)

Path parameters

held_execution_idstring required

ID of the held execution.

Example:held_6968b398a1c4e2d07b5f93c6

Request body

decision'approve' | 'deny' required

A reviewer's decision on a pending approval.

reasonstring nullable

Optional reason, recorded with the decision.

Example request

{
  "decision": "deny",
  "reason": "Not this account"
}

Response

Successful Response

agent_idstring required

The agent whose call was held.

api_namestring required

Name of the API called.

api_vendorstring required

Vendor of the API called.

api_versionstring required

Version of the API called.

created_atstring date-time required

When the call was held.

credential_idstring required

The credential selected when the call was held.

decided_atstring date-time nullable

When it left pending.

decided_bystring nullable

Reviewer who decided it.

decision_reasonstring nullable

Reviewer's reason.

execution_idstring nullable

Execution record written once the approved call ran.

execution_status'held' | 'queued' | 'running' | 'completed' | 'failed' | 'cancelled' nullable

Where the held call stands: held until decided, then queued, running, and completed, failed or cancelled.

expires_atstring date-time required

When a pending held execution expires undecided.

idstring required

Held execution id (held_…).

matched_rule_idstring nullable

The require-approval permission rule that held the call.

methodstring required

HTTP method of the held call.

operation_idstring nullable

Resolved OpenAPI operation id.

pathstring required

Upstream path of the held call.

review_urlstring required

Review page a signed-in reviewer opens to approve or deny the call. Carries no credential.

state'pending' | 'approved' | 'denied' | 'expired' | 'withdrawn' required

Lifecycle of an execution approval; every state but pending is terminal.

trace_idstring nullable

Trace id of the held call.

updated_atstring date-time nullable

Last change.

Example response

{
  "_links": {
    "execution": "https://jentic.example.com/executions/exec_6968b3982706c619fe73f0cf",
    "result": "https://jentic.example.com/executions/holds/held_6968b398a1c4e2d07b5f93c6/result",
    "self": "https://jentic.example.com/executions/holds/held_6968b398a1c4e2d07b5f93c6",
    "withdraw": "https://jentic.example.com/executions/holds/held_6968b398a1c4e2d07b5f93c6:withdraw"
  },
  "agent_id": "agnt_6968b3984d1c238dbe7e2e29",
  "api_name": "stripe",
  "api_vendor": "stripe.com",
  "api_version": "2024-04-10",
  "created_at": "2026-01-15T09:30:00Z",
  "credential_id": "cred_6968b39855d91a3561684b32",
  "decided_at": "2026-01-15T09:42:00Z",
  "decided_by": "usr_6968b3987ee4c3ec0b4ee3b9",
  "decision_reason": "Not this account",
  "execution_id": "exec_6968b3982706c619fe73f0cf",
  "execution_status": "held",
  "expires_at": "2026-01-15T10:30:00Z",
  "id": "held_6968b398a1c4e2d07b5f93c6",
  "matched_rule_id": "apr_6968b398c4e1a2b3d5f60718",
  "method": "POST",
  "operation_id": "listCharges",
  "path": "/v1/refunds",
  "review_url": "https://jentic.example.com/app/agents/approvals/held_6968b398a1c4e2d07b5f93c6",
  "state": "pending",
  "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
  "updated_at": "2026-01-15T09:42:00Z"
}

Changes