Challenge 02 · open now

Photo Finish

The winner crossed the line past 50th. Rebuild the official Nodeport City Marathon results from raw timing reads and referee rulings, then pay the valid prize claims. Three stages, native n8n nodes only, and replay decides the points.

Closes Sun, 27 Sep 2026 00:00:00 GMT. Open through Saturday night (UTC), until Sunday begins.

3Answers, three stages
0Entries
0Pending replay
11Points after replay
The format

How it works

Five moves from registration to a complete race result. Bring your n8n instance and your community account.

  1. 01

    Create your account

    Register with your community.n8n.io username. Your participant key arrives by forum private message.

    Already registered?

    Your account and points carry forward. Use the same username and key. If the key is gone, replace it here.

  2. 02

    Practise one mechanic at a time

    Four small lessons teach pagination, earliest reads, latest rulings and first-claim-wins. They are not a miniature version of this race.

    Open a free lessonGET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/practice/data?lesson=pages GET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/practice/data?lesson=earliest GET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/practice/data?lesson=latest-wins GET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/practice/data?lesson=first-claim-wins
  3. 03

    Starter workflow

    Download the starter below. Fill in Settings with your username and participant key, then add your processing nodes to calculate all three answers.

  4. 04

    Fetch your race files

    The first successful data fetch starts your clock. Long files arrive in pages and every page includes free control counts.

    The call that starts your clockGET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/data QUERY file=entrants&username=YOUR_FORUM_USERNAME HEADER x-participant-key: MB-XXXX-XXXX
  5. 05

    Answer three, check each, submit

    A bib, an official duration and a payout in cents. Check each stage before its answer opens the next file.

    Check one answerPOST https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/check HEADER x-participant-key: MB-XXXX-XXXX { "username":"you", "stage":1, "answer":"B2417" }
This week

Photo Finish: three stages

The Nodeport City Marathon timing system crashed. Rebuild the official results from raw chip reads, then decide which prize claims are paid.

01
Stage one · the finish line

First across the line

Join the entrant list to the raw reads and identify the confirmed entrant whose chip reached the FINISH mat first.

The rules in full
  1. Only entrants whose status is confirmed count. Pacers, withdrawn entrants and unknown chips do not.
  2. Use only reads whose mat is FINISH. File order means nothing, and a chip may be read more than once.
  3. The smallest numeric t among eligible FINISH reads wins. Read every page of entrants and reads.
Files and checkGET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/data?file=entrants&username=YOU GET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/data?file=reads&username=YOU POST https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/check
02
Stage two · the official result

The official winner

Road order is wrong. Build a valid result from all seven mats, then apply the referee's latest ruling for each bib.

The rules in full
  1. Normalise chip ids to upper case. At each chip and mat, only the earliest read counts.
  2. A confirmed entrant needs all seven mats. Chip time is earliest FINISH minus earliest START.
  3. For each bib, only the highest numeric ruling_no counts. DQ removes the result, PENALTY adds seconds, CLEARED leaves chip time unchanged.
  4. The lowest official time wins. Your stage 1 bib opens the rulings file but a well-formed wrong bib opens a different complete file.
Open rulings and checkGET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/data?file=rulings&username=YOU &stage1=YOUR-STAGE-1-BIB POST https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/check
03
Stage three · the prize desk

Pay the prizes

Turn the full official result into overall and category awards, then decide which hand-typed claims should actually be paid.

The rules in full
  1. The three lowest official times win OVERALL places. Remove them before awarding the top three in every category.
  2. Normalise claim bib and award text. For duplicate bib, award and place combinations, the lowest claim_no stands even when it is wrong.
  3. Pay only a claim that matches the real winner, award, place and prize-table amount. Unclaimed prizes are not paid.
Open claims and checkGET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/data?file=prizes&username=YOU GET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/data?file=claims&username=YOU &stage2=YOUR-STAGE-2-TIME POST https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/check
How the files work: read this once before building

Every real file comes from one keyed /data route. Send no cursor on the first request, then keep requesting next_cursor until it is null. cursor=1 also means the first page.

The response includes a control block. It describes raw counts for the whole file, so you can compare pagination, normalisation and latest-or-earliest logic without spending a check.

  • Every participant receives a different seeded race. Copying an answer cannot work.
  • Rulings are opened with stage1; claims are opened with stage2. Wrong well-formed values seed different complete files.
  • Numbers in the race files are JSON numbers. Compare timestamps, ruling numbers, places and cents numerically.
  • Pin HTTP Request output while building so repeated tests do not spend fetches.
Full race rules and allowed node versions

Stage 1

Your `reads` file has one row for every time a timing mat saw a chip. Your `entrants` file lists everyone with a bib. 1. A read belongs to an entrant when its `chip` is that entrant's `chip`. 2. Only entrants whose `status` is `confirmed` count. Reads from chips that are not in the entrant list, and from entrants whose status is `pacer` or `withdrawn`, do not count. 3. This stage is about the finish line only. Use reads whose `mat` is `FINISH` and ignore every other mat. FINISH chips are always written in upper case, like the entrant list. 4. `t` is the read time in Unix milliseconds, UTC. No two FINISH reads have the same `t`. A chip can be read more than once at the same mat; that does not matter here, because the earliest read is still the earliest read. 5. Both files are longer than one page. Read every page of both.

Stage 2

The race is decided by official time, not by who crossed the line first. Fetch `file=rulings` with `stage1=<your stage 1 answer>`, then apply these rules to your `reads`, `entrants` and `rulings`. 1. Only confirmed entrants can have a result. 2. The 30K mat writes chip ids in lower case. Every other mat and the entrant list use upper case. Compare chip ids in upper case. 3. A mat can read the same chip more than once. For each chip at each mat, only the earliest read counts (the smallest `t`). The order of rows in the file means nothing. 4. A runner has a result only if their chip has at least one read at every one of the seven mats: `START`, `5K`, `10K`, `HALF`, `30K`, `35K`, `FINISH`. 5. Chip time = the earliest FINISH read minus the earliest START read, in milliseconds. Waves started at different times, which is why the start gun plays no part. 6. Rulings. For each bib, only the ruling with the highest `ruling_no` counts. Every other ruling for that bib is ignored completely, whatever its kind. The file is not in `ruling_no` order. - `DQ`: the runner has no result. - `PENALTY`: add `seconds` × 1000 milliseconds to the chip time. - `CLEARED`: the runner keeps their chip time. An earlier `DQ` or `PENALTY` for that bib no longer applies. A ruling affects only the bib it names. It never gives a result to a runner who has none under rules 1 to 4. Rulings for bibs that are not in the entrant list change nothing. A runner with no ruling keeps their chip time. 7. Official time = chip time, plus the penalty when the ruling that counts is a `PENALTY`. The lowest official time wins. No two official times are equal, and the winner is at least 2 seconds ahead of second place.

Stage 3

Fetch `file=prizes` (the prize table, which never changes during the week and does not depend on your answers) and `file=claims` with `stage2=<your stage 2 answer>`. Prizes follow your official results from stage 2, with every rule and ruling applied. 1. Overall. The three lowest official times win `OVERALL` places 1, 2 and 3, whatever their category. 2. Categories. In each category, the three lowest official times among runners who did not win an overall prize win places 1, 2 and 3 of that category. Nobody wins two prizes. A category with fewer than three such runners awards fewer places. 3. A runner's category is the `category` field in the entrant list. 4. Claims were typed by hand. Before comparing, trim spaces from `bib` and `award` and put both in upper case. `place` and `amount_cents` in claims, and `place` and `prize_cents` in the prize table, are JSON numbers, never text. 5. If the same `bib`, `award` and `place` were claimed more than once (after rule 4), only the claim with the lowest `claim_no` is considered. The later ones are never paid, even when the first one is wrong. 6. A claim is paid when that bib really won that award at that place, and its `amount_cents` equals `prize_cents` for that award and place. Otherwise it is not paid. A prize nobody claimed is not paid.

Allowed nodes

Use exactly one Manual Trigger. These are the reviewed node type versions, not n8n application versions.

manualTrigger 1; set 3.4; httpRequest 4.2; splitOut 1; filter 2.2; if 2.2; switch 3.2; merge 3.2; sort 1; limit 1; summarize 1.1; aggregate 1; removeDuplicates 2; renameKeys 1; dateTime 2; compareDatasets 2.3; splitInBatches 3; noOp 1; stickyNote 1

No Code, Function, AI, SQL Merge, code-mode Sort, raw-JSON Edit Fields, external HTTP calls or embedded array-processing expressions. HTTP Request may call only this challenge. Use Settings.username, Settings.key and Settings.base. Keep base as downloaded, without a trailing slash. Keep the three named result nodes and calculate b1, b2 and b3 from upstream nodes, never typed constants.

Submit at most 200 KB of workflow JSON and an explanation of 150 to 2,000 characters with at least 30 words naming three of your processing nodes. Your workflow is private. A correct entry awaits replay on two unseen races after close; only a replay pass earns 11 points.

Practice, limits, scoring and replay

Practise mechanics, not the race

The public lessons use tiny neutral fixtures. They publish intermediate results for one technique and cannot be joined into a complete Photo Finish solution.

GET https://marketing.app.n8n.cloud/webhook/cwc/challenge-02/practice/data?lesson=pages

Budgets

  1. Data120 successful fetches per rolling hour, shared by all files.
  2. ChecksFour per 15 minutes and ten for the whole challenge, separately for each stage. Malformed answers are free.
  3. SubmissionsThirty an hour and at most ten graded wrong submissions. The form validates the workflow before spending a graded attempt.

Scoring and replay

A correct entry is worth 11 points only after the submitted workflow passes organiser replay on two hidden races. Challenge 02 time is recorded but excluded from the season tie-break.

Before you start

Your clock starts on the first successful real data fetch. Reading the brief and using public practice cost no time.
Your key is a password. Keep it in the Settings node and never post it in the questions thread.
All three answers are graded together. Check each stage before opening the next file.
Correct answers are not final points. Replay confirms that the workflow itself produces the result on unseen races.
The rules

Three things to know before you start

These are the boundaries the submit review enforces.

01

Native nodes only

No Code, Function, AI, Execute Workflow, community nodes or Merge SQL mode. Expressions may shape one item, but they may not hide loops, arrays or a solution in JavaScript.

Build with HTTP Request, Merge, Filter, Sort, Summarize, Remove Duplicates and Loop Over Items
02

Your own race

Every file is generated for your username. A wrong stage 1 or stage 2 key opens another complete world, so a plausible downstream answer can still belong to the wrong race.

Use the control counts and check every stage
03

Replay decides points

Your submitted JSON must explain itself and run without secrets. A correct answer becomes pending replay, then earns 11 points only when the workflow produces the right answers on hidden races.

Time is visible, but it does not decide Challenge 02 points or the season tie-break
Questions or feedback? Join the Questions & Discussion thread. Read the announcement.
Your account

Profiles and keys

Look up anybody's public record, or replace a participant key you no longer have. Neither needs you to be signed in to anything.

See a public profile

Everyone who registers gets a permanent page at a fixed address: what they have solved, where they finished, and their points. No key needed to view one, yours or anybody else's, and it stays at the same URL as new challenges are added.

Reset your key

Lost the private message, or think somebody else has your key? Ask for a new one with the same username and email you registered with, and it arrives as a forum private message the way the first one did.

  • The old key is replaced after successful delivery and saving. Failed delivery keeps it usable. Anything you have already submitted stays exactly as it was, and your clock is untouched.
  • Your key is the only credential on this site. There is no password to reset.