DocsYour first brief
03 / 04

Your first brief

A step-by-step walkthrough for passing your first Nodox brief.

Overview

This guide walks you through your first Nodox brief from start to finish. Every step is given twice, once for n8n and once for Make, and the same shape applies in Zapier or any other webhook-capable platform.

What you'll build

A simple workflow that receives data from Nodox, processes it against the brief's requirements, and sends the result back. This is the foundation of every Nodox brief.

Nodoxsends payload
Your workflowprocesses data
Nodoxvalidates result

Step 1: set up your automation tool

In n8n

First, you need access to n8n. You have two options:

  • n8n Cloud - quick setup at n8n.io (free tier available)
  • Self-hosted - run your own instance for ~€5/month (see our self-host n8n guide)

Once you have n8n ready, create a new workflow.

In Make

Make is hosted, so there is nothing to install and nothing to self-host. Sign in at make.com and create a new scenario.

Step 2: create a webhook trigger

Every Nodox brief starts with receiving data via a webhook. Here's how to set it up:

In n8n

  1. In your n8n workflow, click "+" to add a node
  2. Search for "Webhook" and select it
  3. Configure the webhook:
    • HTTP Method: POST
    • Path: Leave as default or set something memorable
    • Respond: When Last Node Finishes (simplest - your workflow's output becomes your answer)
  4. Activate the workflow using the toggle in the top-right
  5. Copy the Production URL - this is what you'll paste into Nodox
Use the production URL, and activate the workflow

Copy the Production URL, not the Test URL, and make sure the workflow is Active. A Test URL only listens once, right after you click "Execute workflow" - it's the #1 cause of "webhook isn't listening" errors.

In Make

  1. In your Make scenario, click the "+" and search for "Webhooks"
  2. Pick Custom webhook, then Add a webhook and give it a name
  3. Copy the URL it shows - this is what you'll paste into Nodox. It looks like https://hook.eu2.make.com/<id> (the zone can be eu1, eu2, us1 or us2)
  4. Set the scenario schedule to Immediately as data arrives
  5. Save the scenario and turn it On with the On/Off toggle
In Make there is no test URL - turn the scenario on

A Custom webhook has one URL, so there is nothing to pick between. What matters is the On/Off toggle. A scenario that is off still answers 200 "Accepted" and queues the request, so Nodox waits for a result that never arrives and the case times out.

Step 3: process the data

When Nodox sends data to your webhook, you'll receive a JSON body with two parts:

What Nodox sends to your webhook
{
  "payload": {
    // The actual data you need to process
    // This varies per brief
  },
  "metadata": {
    "callbackUrl": "https://nodox.ai/api/callbacks/...",
    "callbackToken": "token_abc123",
    "mockApiBase": "https://nodox.ai/api/mock/..."
  }
}

Add processing nodes or modules based on what the brief requires. For a simple echo brief:

  1. The payload contains the data to process
  2. The callbackUrl is where you send your result
  3. The callbackToken must be sent as a header in your response

Reading a field

In n8n

Reference a field with an expression, for example {{ $json.metadata.callbackUrl }}.

In Make

The Custom webhook module exposes the same envelope as mappings. Reference a payload field with {{1.payload.user_id}} and a metadata field with {{1.metadata.callbackUrl}}, where 1 is the webhook module's number.

Step 4: send your response

After processing the data, Nodox needs your result back. There are two ways to deliver it - pick one:

Option A: Respond directly (recommended to start)

In n8n

If your Webhook node's Respond option is set to When Last Node Finishes, you're already done: whatever your last node outputs is sent back as the HTTP response, and Nodox validates it automatically. Just make sure the final node outputs only your result - not the payload/metadata envelope.

In Make

Option A does not exist in Make. Make answers "Accepted" as soon as the webhook is hit, before the scenario runs, so the response Nodox reads is Make's acknowledgement and never your result. In Make, go straight to option B.

Option B: Send a callback

For long-running workflows (and some later briefs), respond asynchronously instead. In Make this is the only option.

In n8n

  1. Add an HTTP Request node after your processing
  2. Configure it:
    • Method: POST
    • URL: Use an expression to get {{ $json.metadata.callbackUrl }}
    • Body Content Type: JSON
  3. Add the callback token as a header:
Required Header (Option B only)
x-nodox-token: {{ $json.metadata.callbackToken }}

Then set the body to your processed result directly (no wrapper needed):

Your response body
{
  // Your processed result goes here directly
  // No need for callbackToken or received wrapper
}

In Make

  1. Add an HTTP - Make a request module after your processing
  2. Configure it:
    • Method: POST
    • URL: {{1.metadata.callbackUrl}}
    • Body type: Raw
    • Content type: JSON (application/json)
  3. Add one header - name x-nodox-token, value {{1.metadata.callbackToken}}
  4. Write your result into the request body as JSON, mapping values in where they belong
Building the body in Make

Make has no JSON.stringify, so you type the JSON yourself and drop mappings into it. Quote strings, leave numbers unquoted. If you just need to echo the payload back, run {{1.payload}} through a Transform to JSON module first and map its output into the body.

Required Header (callback only)

A callback must include the x-nodox-token header with the callback token. Without it, Nodox can't match your response to the test. (Option A needs no headers at all.)

Step 5: test in Nodox

Now you're ready to run the brief:

  1. Go to the brief page on Nodox
  2. Paste your webhook URL in the "Webhook URL" field
  3. Click "Test" first to verify your webhook is accessible
  4. Once the test succeeds, click "Run All Tests"
  5. Watch the results - each test case will show Pass, Fail, or Timeout
Passed

When all tests pass, you'll earn XP and can unlock Nox to review your solution.

Common mistakes to avoid

Missing the x-nodox-token header

Every response must include the x-nodox-token header with the callback token from metadata. Without it, Nodox can't match your response to the test.

Wrong response format

Send your processed result directly as the JSON body. Don't wrap it in any extra fields - just send the data the brief expects.

n8n: using the Test URL instead of the Production URL

n8n has both Test and Production webhook URLs. The Test URL only works while you're actively listening in the editor. Always use the Production URL for Nodox.

n8n: workflow not activated

Make sure your n8n workflow is activated (toggle at the top right). An inactive workflow won't respond to webhook calls.

Make: scenario left off

A scenario that is off still answers 200 "Accepted" and queues the request, so the URL looks fine and the case times out anyway. Turn the scenario on and set its schedule to Immediately as data arrives.

Make: the scenario turned itself off

Make switches a scenario off after three consecutive errors. If the first few cases passed and the rest timed out, open the scenario's execution history, fix the module that errored, and turn the scenario back on before you run again.

Make: quoting numbers in the JSON body

You type the raw JSON body yourself, so it is easy to wrap a mapping in quotes. Write "total": {{2.total}}, not "total": "{{2.total}}". A quoted number fails the case even when the value is right.

Timeout (taking too long)

You have 30 seconds to respond. If your workflow takes longer, the test times out. Optimize slow operations or check for infinite loops.

Next steps

You've passed your first brief. Here's what to explore next:

  • Try harder briefs - move up in difficulty as you get comfortable
  • Learn about mock APIs - some briefs require calling external APIs (see mock API docs)
  • Use Nox - after passing tests, get its feedback on your solution
  • Follow a track - a structured sequence of briefs that builds toward a skill
Stuck on a brief?

If tests are failing, click on a failed test to see the expected vs actual output. Use the Nox debugger (available when tests fail) to get targeted hints.