Skip to main content

Platform guide

Create a receipt from n8n

Use one HTTP Request node to send a workflow run to Automation Receipts and create a readable receipt.

Start with safe example data

Confirm that n8n can create a receipt before you connect real emails, tickets, documents, customers, or actions. Approval is optional and may happen in Automation Receipts, n8n, Slack, email, another tool, or not be required.

Use the starter workflow

Import the starter JSON into n8n, then add your own API key and endpoint URL before running it.

Use the callback starter workflow

Import this optional example when you want Automation Receipts to send a saved review result back to n8n. Add your own API key before running it.

What you need

Automation Receipts access

Use an active account and an active API key. The key is sent in the Authorization header.

An n8n workflow

For the first test, use Manual Trigger, Edit Fields, and HTTP Request nodes.

Basic workflow shape

This is the first test path. It proves n8n can create a receipt before you connect the same pattern to a production workflow.

Manual Trigger
  ->
Edit Fields
  ->
HTTP Request
  ->
Receipt appears in Automation Receipts
1

Manual Trigger

Run the workflow by hand while you set up the first receipt.

2

Edit Fields

Create example values that the HTTP Request node can send.

3

HTTP Request

POST the JSON body to Automation Receipts.

4

Receipt

Open the run detail page and confirm the timeline and review state.

HTTP Request settings

Method
POST
URL
https://automationreceipts.com/api/v1/runs
Body type
JSON
Authentication
Bearer token header

Headers

Authorization: Bearer aar_live_REPLACE_ME
Content-Type: application/json

Use https://automationreceipts.com/api/v1/runs unless your account uses a different workspace or environment endpoint.

Edit Fields values

Most values can be hardcoded strings for the first test. Real workflows should use dynamic n8n expressions where values come from earlier nodes or must change each run, especially run_uid.

Hardcoded first-test value

{
  "input_summary": "Customer asked about refund options."
}

Dynamic workflow value

{
  "run_uid": "n8n-{{$execution.id}}",
  "input_summary": "{{$json.email_summary}}",
  "output_summary": "{{$json.ai_reply_summary}}"
}

Make run_uid unique

Automation Receipts rejects duplicate run_uid values within the same workspace. Use an execution ID, timestamp, UUID, or another value that changes every run.

Use exact machine values

Automation Receipts expects exact lowercase machine values for enum fields. Use needs_review, not Needs review; medium, not Medium; pending, not Pending; and n8n, not N8N. Dynamic n8n expressions are fine, but they must resolve to these exact values.

Field Valid values
statuspending, needs_review, approved, rejected, completed, failed, cancelled
risk_levellow, medium, high, unknown
approval_statusnot_required, pending, approved, rejected, needs_changes
source_typen8n, make, ifttt, stackai, zapier, custom_script, manual, other, custom
Field Example value Type Notes
automation_namen8n First ReceiptstringName shown in Automation Receipts.
run_uidn8n-first-receipt-{{$execution.id}}stringMust be unique for each run.
source_typen8nstringUse this for n8n workflows.
trigger_typemanual_teststringGood label for a Manual Trigger connection test.
statusneeds_reviewstringUse needs_review when the run is waiting on a person.
risk_levelmediumstringUse medium when the example receipt asks for review.
input_summaryManual n8n connection test with sample input.stringOne summary is required.
output_summaryAn example receipt payload was prepared.stringKeep it short and plain.
approval_requiredtruebooleanSend a JSON boolean, not a quoted string.
approval_statuspendingstringUse pending when review is requested.
callback_urlhttps://example.com/n8n-review-resultstringOptional. Use only when n8n should receive the review result later.
final_actionNo real action takenstringBe clear about what did or did not happen.

Keep booleans unquoted

Send false as false, not "false". The string "false" may be treated as truthy by the API and can make approval look required.

Starter payloads

Use the completed example for your first connection test. Use the review example when the workflow output should wait for a recorded review outcome. Keep the wording service-agnostic so receipts make sense even when the workflow later moves beyond n8n.

No review needed

{
  "automation_name": "n8n First Receipt",
  "run_uid": "n8n-first-receipt-{{$execution.id}}",
  "source_type": "n8n",
  "trigger_type": "manual_test",
  "status": "completed",
  "risk_level": "low",
  "input_summary": "Manual n8n connection test with sample input.",
  "output_summary": "An example receipt payload was sent from n8n to Automation Receipts.",
  "model_used": "none",
  "tools_used": "Manual Trigger, Edit Fields, HTTP Request",
  "approval_required": false,
  "approval_status": "not_required",
  "final_action": "No real action taken",
  "events": [
    {
      "event_type": "trigger_received",
      "event_label": "Manual test started",
      "event_summary": "The n8n workflow was started by a Manual Trigger."
    },
    {
      "event_type": "action_taken",
      "event_label": "Receipt logged",
      "event_summary": "n8n sent an example receipt to Automation Receipts."
    }
  ]
}

Review requested

{
  "automation_name": "n8n Review Example",
  "run_uid": "n8n-approval-review-{{$execution.id}}",
  "source_type": "n8n",
  "trigger_type": "manual_test",
  "status": "needs_review",
  "risk_level": "medium",
  "input_summary": "Manual n8n connection test with sample input.",
  "output_summary": "A sample draft was created and is waiting for review.",
  "model_used": "none",
  "tools_used": "Manual Trigger, Edit Fields, HTTP Request",
  "approval_required": true,
  "approval_status": "pending",
  "final_action": "Draft created and waiting for review",
  "events": [
    {
      "event_type": "trigger_received",
      "event_label": "Manual test started",
      "event_summary": "The n8n workflow was started by a Manual Trigger."
    },
    {
      "event_type": "output_generated",
      "event_label": "Sample draft created",
      "event_summary": "The workflow prepared sample output for review."
    },
    {
      "event_type": "approval_requested",
      "event_label": "Review requested",
      "event_summary": "The sample draft is waiting for a review outcome."
    }
  ]
}

Common mistakes

Problem What it usually means Fix
400 bad requestThe body is not a valid JSON object.Use JSON body mode and check commas, quotes, brackets, and n8n expressions that may output blank text.
401 unauthorizedThe Authorization header is missing, wrong, or uses a revoked key.Use Authorization: Bearer aar_live_... with the full active API key.
Missing BearerThe API key was sent without the expected bearer-token prefix.Use Authorization: Bearer YOUR_API_KEY, including the space after Bearer.
API key in the bodyThe key was pasted into the JSON payload instead of the header.Remove it from the body and put it in the Authorization header.
409 duplicate run_uidA receipt with that run ID already exists in the workspace.Use a dynamic value such as n8n-first-receipt-{{$execution.id}}.
422 validation errorA required field is missing or a value is not allowed.Check automation_name, run_uid, and at least one of input_summary or output_summary.
Wrong Content-TypeThe API did not receive the request as JSON.Set Content-Type: application/json and use JSON body mode.
Manual text where dynamic values are neededThe workflow sends the same value every run.Use n8n expressions for IDs and any values that should come from the current execution.
Empty n8n expressionsAn expression such as {{$json.email_summary}} resolves to blank.Run the previous node and confirm the field exists in its output before using it in the payload.
Request does not reach Automation ReceiptsThe HTTP Request node is pointed at an old, local, or private endpoint.Use https://automationreceipts.com/api/v1/runs unless your account uses a different endpoint.
Payload too largeThe JSON body is over 131072 bytes.Send concise summaries instead of raw emails, documents, or full model payloads.
Too much private dataThe payload contains full messages, documents, secrets, or private details that are not needed for the receipt.Send summaries and only the context a person needs to understand what happened.
404 run not foundAn append-event request could not find the run.Use /api/v1/runs/{run_uid}/events with the original run_uid, not numeric run_id.

Optional: send the review result back to n8n

If your n8n workflow needs to continue after a person records a review in Automation Receipts, include a callback_url when creating the receipt. After the review is saved, Automation Receipts POSTs a small review result payload back to that URL.

Keep this as a second step

First prove the basic receipt path works. Then add a callback URL from the n8n path that should receive the review result. This is useful for Wait/webhook-style continuation patterns, but Automation Receipts does not configure or manage n8n wait nodes for you.

Download the tested callback starter

This workflow uses Manual Trigger, Edit Fields, HTTP Request, a Wait node, and a final Edit Fields node that reads the resumed callback body.

Create-run payload with callback URL

{
  "automation_name": "n8n Review Example",
  "run_uid": "n8n-approval-review-{{$execution.id}}",
  "source_type": "n8n",
  "status": "needs_review",
  "risk_level": "medium",
  "input_summary": "Manual n8n connection test with sample input.",
  "output_summary": "A sample draft was created and is waiting for review.",
  "approval_required": true,
  "approval_status": "pending",
  "callback_url": "https://YOUR-N8N-CALLBACK-URL.example/path",
  "final_action": "Draft created and waiting for review"
}

The review result payload stays intentionally small. It includes the receipt source, run_uid, automation name, review status, optional review note, review time, and receipt URL. It does not include the full receipt, input summary, output summary, user email, or API key.

Read callback fields after the Wait node

In the tested n8n Wait/webhook resume flow, n8n exposes the Automation Receipts POST body under body after the Wait node resumes.

Review result n8n expression
Review status{{$json.body.review_status}}
Review note{{$json.body.review_note}}
Receipt URL{{$json.body.receipt_url}}

If n8n receives the callback, the receipt records the callback as delivered. If the callback URL fails or times out, the review remains saved and the receipt records the callback failure.

What this does not do yet

Not a workflow builder

This setup creates a readable receipt and can optionally send a review result callback. It does not build the rest of the n8n workflow for you.

There are no callback retries, custom callback headers, callback secrets, or multiple callback URLs in this first pass. Approval or review in Automation Receipts remains optional.

n8n save notes

Depending on your n8n version and account, workflows may autosave. Some node panels do not show a separate Save button. After editing a node, close the node panel and check that the workflow itself is saved or autosaved before running the test again.

Next steps