ActionBoxDOCS

n8n

Pause an n8n workflow for an ActionBox approval, branch on the decision, and report what happened afterward.

The ActionBox node asks a person to approve or reject a request and keeps the n8n execution waiting for their answer. After approval, your workflow performs the operation and reports its outcome to ActionBox.

Install from npm

n8n-nodes-actionbox is available for n8n instances you administer. The tested compatibility target is n8n 2.38.7. It has not been verified for n8n Cloud. ActionBox itself runs at https://actionbox.cloud.

Install the node

On your n8n instance, sign in as an owner or admin:

  1. Open Settings → Community Nodes and select Install.
  2. Enter n8n-nodes-actionbox as the package name.
  3. Read and accept n8n's notice about community nodes, then select Install.
  4. Add an ActionBox node to a workflow.

See n8n's community-node installation guide if the installation option is unavailable. To build from source instead, follow the public repository's Docker guide. That setup runs n8n locally and connects it to hosted ActionBox.

Configure callback delivery

Give n8n a public HTTPS callback address before requesting approval. For local Docker testing, use an HTTPS tunnel. Keep the address unchanged while any execution is waiting.

Keep n8n's data volume and execution records for at least as long as your approval timeout. They hold the state needed to resume after a restart.

A local n8n editor is enough to build a workflow. Live approval delivery also needs that reachable callback address: the hosted ActionBox service cannot call an address that is accessible only on your computer.

Add ActionBox credentials

Create a dedicated Source in the ActionBox dashboard. Copy its live Source key and webhook signing secret when they are shown.

In n8n, create ActionBox API credentials and save both values. The Source key authenticates API requests; the signing secret verifies callbacks. Keep both in n8n credentials, away from workflow parameters and Action descriptions.

Test Action ID is an existing Action owned by that Source. The connection test reads this Action to check the Source key. If the Source is new, save the credentials first, create a request, and then use its ID for the test. This check does not test the signing secret; receiving a valid callback does.

Run your first approval

Import the repository's example workflow. For the Docker installation, first generate the local example as described in the Docker guide. Custom nodes use a different node identifier from npm-installed nodes, and that step adjusts the import.

n8n workflow: Start connects to Request Approval, then an Approved IF node. The true branch runs Demo Operation and Report Success; the false branch ends at Not Approved.

The example workflow in n8n. Report Success uses the ActionBox Report Outcome operation. Select the image to view it at full size.

  1. Select your ActionBox API credentials on both ActionBox nodes.
  2. Open Request Approval, which uses Request Approval and Wait. Give the request a clear title and enough description for the reviewer to understand it. For a first test, use a title such as “Approve this n8n test?” and a timeout of five minutes.
  3. Start the workflow. Open the request in the ActionBox inbox and choose Approve.
  4. Check that n8n continues through the approved branch and reports the demo operation's success. The demo performs no external operation.
  5. Start another execution and choose Reject. This execution should take the Not Approved branch.

Replace the demo step with your operation after these checks pass. Add a failure path that reports a failed outcome when the operation fails.

Configure the request

FieldWhat to enter
TitleThe decision the reviewer needs to make
DescriptionThe context needed to make that decision
PriorityLow, normal, high, or urgent
Reviewer EmailsComma-separated reviewer emails to restrict access; leave empty for workspace access
Approve Label / Reject LabelThe button text; the option IDs stay approve and reject
Timeout (Minutes)How long n8n waits; the default is 1,440 minutes (24 hours)

Pass one input item to the waiting operation. A batch is rejected before any request is created. Use separate executions for concurrent approvals.

Branch on the result

Configure the IF node to test this boolean expression:

{{ $json.actionbox.approved }}

Continue with the operation only when the value is true. The connector checks the callback signature and reads the current Action before returning approval. The decision must approve the same version and fingerprint that n8n originally submitted for review.

The result keeps the original input in input and the decision in actionbox:

FieldMeaning
inputThe original input JSON
actionbox.action_idThe Action to inspect or report an outcome for
actionbox.approvedWhether this execution received a valid approval
actionbox.decision_statusapproved, rejected, expired, cancelled, timed_out, snapshot_changed, or invalid_response
actionbox.action_versionThe version submitted for review
actionbox.fingerprintThe fingerprint of that version
actionbox.responseResponse data when available

A rejection, expiry, cancellation, timeout, or changed review snapshot returns approved: false. While the execution is waiting, its saved result is a timeout placeholder. It is not a completed decision.

Report the execution outcome

Approval records permission to run. Report Outcome records what happened when your operation ran. Send Success only after it succeeds, or Failed from your failure path.

Map the approved result into these fields:

Report Outcome fieldExpression
Action ID{{ $('Request Approval').item.json.actionbox.action_id }}
Action Version{{ $('Request Approval').item.json.actionbox.action_version }}
Fingerprint{{ $('Request Approval').item.json.actionbox.fingerprint }}

These expressions use the node name in the example. Adjust the name if you rename that node. Preserve these values through your workflow rather than substituting a newer Action snapshot.

Protect the downstream operation with its own business idempotency key. Retrying an API request inside the connector reuses the original request payload and idempotency key, but starting a new n8n execution creates a new approval request. Neither approval nor outcome reporting prevents another service from executing a side effect twice.

Handle missed callbacks and cancellations

If no usable callback arrives before the deadline, n8n continues with approved: false and decision_status: timed_out. A callback that arrives before n8n has saved its waiting state can also be rejected and leave the execution waiting until timeout. This version has no background polling fallback.

Use Get Action with the saved Action ID to inspect the latest state. Before recovering manually, compare its version and fingerprint with the saved approval request and check whether your operation already ran. Get Action does not turn an earlier timeout into automatic approval.

Use Cancel Action to cancel an outstanding request. Stopping the n8n execution alone does not cancel the Action; cancel it explicitly or let it expire.

Before using the workflow for real work, test rejection, cancellation, timeout, and restarting n8n while it waits. Keep waiting executions on the same connector and n8n versions until they finish.

On this page