🎯 Need Help?

Get Premium Support

Priority assistance from the developer

⬆️ Upgrade

Unlock all features

More from ANWP

Sports Leagues Premium

Multi-sport league management with advanced statistics

Learn more →

AnWP SL Theme Kit

Starter themes & block patterns for Sports Leagues

Learn more →

API Import for a Multistage Competition

Pro Feature

An international cup runs in phases: qualifying rounds, a play-off round, a group stage, then a knockout phase. Football Leagues models that as one competition with several stages, and the API import can fill all of them in a single pass – as long as the stages exist first.

That’s the whole trick to this page. Build the skeleton by hand, then map it. The importer fills a structure you’ve already defined. It doesn’t invent stages.

The examples below use real Champions League seasons. The competition structure is the UEFA Champions League 2022-2023: four stages, 10 local rounds and 48 API group rounds. The import screens use the next season, 2023-2024, which followed the same format. From 2024-25 the Champions League swapped its groups for a single league phase – that shape is covered in step 3.

Start with the simple case

This page assumes you’ve already linked at least one straightforward league. If you haven’t, read API Import for a Round-Robin League first – it explains the API Leagues row, the three configuration cards and the two structure steps in detail. Everything below builds on that.

Video: a multistage cup from start to finish

This video walks through a multistage cup import from start to finish. It was recorded on older screens, so some buttons have moved: today the stages are built under Competitions > Add New Competition, and the mapping starts at FL API Import > API Leagues, the database button on the league row, then Manual Configuration. The steps below match the current screens.

🚀 1. Build the stages

Go to Competitions > Add New Competition, set the league and season, and publish. Then work through the stages. Multistage Competitions covers the editor itself; what matters for the import is that each stage ends up with the right type and the right number of rounds.

A typical continental cup looks like this:

Stage titleTypeRoundsBracket Layout
Qualifying roundsKnockoutPreliminary round, First qualifying round, Second qualifying round, Third qualifying roundhide
Play-off roundKnockoutOne round, no name neededhide
Group stageRound RobinOne round
Knockout phaseKnockoutRound of 16, Quarter-finals, Semi-finals, Finalmanual or automatic

Use Add New Stage for each one after the first, and Add New Round inside a stage to build its rounds. Hide the bracket layout on the qualifying and play-off stages – a bracket for those is rarely worth showing. On the final knockout stage, pick a bracket layout: automatic suits a competition that’s already finished, manual gives you control over the order.

A fourth choice, advanced, is a bracket you draw yourself on the stage’s own Bracket tab – see Advanced Bracket. For a real bracket put in order tie by tie on manual, see Euro 2024 Knockout Stage.

The competition editor with a row of stage tabs and the Add New Stage button at the right end, the first stage tab open with Stage Title Qualifying rounds, Competition Type Knockout, Knockout Format and Bracket Layout hide, and its first named rounds, Preliminary round and First qualifying round, listed under Stage Rounds

A stage added with Add New Stage doesn’t start as a knockout. It starts as Round Robin with Double format and Bracket Layout on manual, so on every knockout stage change three things:

  • Competition Type to Knockout.
  • Knockout Format to two-legged ties or single-leg ties, to match how the ties are played. The Competitions list shows it next to the stage.
  • Bracket Layout to hide, unless this is the stage that should draw a bracket.

Add New Round only appears once the stage is a Knockout. A Round Robin stage always has a single round, and that’s right for a group stage. Each round you add arrives named Round #2, Round #3 and so on – type the real name over it, because that name is what you’ll see next to the API rounds in step 3.

A group stage tab in the competition editor with Competition Type Round Robin, the Round-Robin Format and Current MatchWeek fields, its groups listed under Stage Rounds and no Add New Round button
The final knockout stage open in the competition editor with Competition Type Knockout and Bracket Layout manual, the Bracket Layout toggle on Yes, and the Round of 16, Quarter-finals, Semi-finals and Final rounds laid out side by side as bracket columns

Every round arrives with one empty slot

Adding a round in the editor also creates one empty group inside it – a tie, on a knockout stage. The import fills that slot first and adds the rest after it, so you don’t need to create ties by hand. Just get the rounds right.

Click Save below the stages. When you’re done, open Competitions and check the structure reads the way you expect before going near the importer.

The Stages column should say Multiple. Under it, the main stage sits on a line starting #1 > and every other stage on a line starting #2 >>, #3 >> and so on, each with its type, format, number of groups or ties, and ID. If the column says Single, the stages were never added to this competition, and the importer will only see this one.

The Competitions list with a multistage cup whose Stages column reads Multiple, followed by one line per stage giving its title, type, format, number of groups or ties and ID

2. Create the import configuration

Open FL API Import > API Leagues, find the competition and season, and click the blue database button on its row. Choose Manual Configuration, pick your new competition from Select Local Competition, and click Next Step.

Filter by League is the quickest way in: type the competition name and the table shows one row per season. The API names seasons by their starting year, so Champions League 2023-2024 is the 2023 row. Hover the database button and it reads create Import Configuration.

The API Leagues tab filtered by league to UEFA Champions League, one row per season, with the create Import Configuration tooltip over the filled blue database button of a season that has no configuration yet
The Import Competition Configuration modal for the Champions League season: Linked Competitions shows the API competition and a Local Competition that reads not set, above the Run Wizard, Lazy Import and Manual Configuration cards

The Import Wizard is not the tool for this shape. It builds its own structure, and the point of a multistage competition is that you defined yours. Lazy Import doesn’t fit either: it ignores stages and draws no brackets.

Select Local Competition lists your competitions by their main stage only. Secondary stages never appear in it, and neither does a competition that’s already linked to an API league.

The Select Local Competition modal with its dropdown open on the multistage competition, listed once under its season title with none of its stages shown separately, and the Next Step button below

3. Map each stage to its own API rounds

Step 1 of Edit Competition Structure now lists every round of every stage, main stage first, then the secondary stages in order. The Type column shows whether each row is round-robin or knockout, which is a quick way to catch a stage you set up wrong. A stage with a single round shows as its title followed by a dash, like Play-off round –.

Step 1 of Edit Competition Structure for a multistage cup, with one row per stage and round, a mix of knockout and round-robin in the Type column, and a separate API Rounds selector on each row

This is where a multistage import differs from a league. Don’t start with Set All. Each row gets only the API rounds that belong to it, so the fixtures land in the right stage. Here’s the Champions League 2022-2023 structure in full:

Your rowAPI rounds to select
Qualifying rounds – Preliminary roundPreliminary Round
Qualifying rounds – First qualifying round1st Qualifying Round
Qualifying rounds – Second qualifying round2nd Qualifying Round
Qualifying rounds – Third qualifying round3rd Qualifying Round
Play-off round –Play-offs
Group stage –Every group round – the Champions League names them Group A - 1 through Group H - 6, 48 in all
Knockout phase – Round of 16Round of 16
Knockout phase – Quarter-finalsQuarter-finals
Knockout phase – Semi-finalsSemi-finals
Knockout phase – FinalFinal

The exact names come from the API and vary by competition, so read the dropdown rather than trusting the table above. Once you pick a round on one row, it drops out of every other row’s dropdown, so you can’t map the same API round twice. If a round you need is missing, look for it on another row and remove it there first.

Typing 48 group rounds by hand is no fun, and that’s where Set All earns its place. It adds every round that isn’t mapped to any row yet. So map every other row first, open the group stage dropdown to check only group rounds are left, then click Set All on the group stage row.

A round the provider hasn’t published yet isn’t in any dropdown. A season imported before its final is drawn has no Final round to pick, so that row stays empty. Leave rows like that blank and map them after the draw.

Leave Put all Teams into single table off. It only affects round-robin stages, and a group stage should keep its groups. Click Next Step.

A league phase instead of groups (2024-25 onwards)

Since 2024-25 the Champions League, Europa League and Conference League play a league phase: 36 clubs in one table, but nobody plays everybody. Build that stage as a Round Robin with one round, and map every league round to its single row – League Stage - 1 to League Stage - 8 for the Champions League and Europa League, League Stage - 1 to League Stage - 6 for the Conference League.

This is the one case where Put all Teams into single table goes to Yes. Without it the importer builds a group from each club’s opponents, and step 2 fills up with dozens of overlapping groups instead of one group of 36. Flip it right before Next Step: it goes back to No as soon as step 2 loads, and it applies to every round-robin row in the modal at once. API Import for a Competition with Conferences shows the same switch.

4. Check groups and ties

Step 2 reports what the plugin recognised, and it reads differently per stage type.

Step 2 of Edit Competition Structure for a cup, with knockout rows labelled Ties listing their match-ups and round-robin rows listing named groups, every entry on this already-imported competition set to Ignore
  • Round-robin stages show named groups with their club lists. Names come from the API’s own standings where the club sets match, so you usually get Group A and Group B rather than Group #1.
  • Knockout stages show a single entry labelled Ties: with the match-ups listed. A two-legged tie appears once, not twice – the reverse fixture is recognised as the same pairing.

Every mapped row also repeats its API rounds on a Rounds: line above the groups, which is the last chance to spot a round on the wrong row. Groups are listed in alphabetical order and fill your stage’s groups in that order. A new group stage holds one empty group, so Group A fills it and Group B to Group H are added after it.

Each entry has a Create / Ignore toggle. Anything that already has clubs in your competition defaults to Ignore, which is what makes it safe to come back and map a later stage without disturbing an earlier one. On a stage you are mapping for the first time the toggle is green and reads Create:

Step 2 of Edit Competition Structure on a knockout stage with no clubs yet, its single tie shown beside a green toggle reading Create

Click Update Competition Structure. Missing clubs are imported (with their stadiums too, when Import Stadiums is on in the API settings – it is unless you switched it off), ties and groups are filled, and the round mapping is saved for later imports. On a large cup this takes a few minutes – leave the tab open.

5. Create games and squads

Reopen the database button. The three cards are replaced by action cards. Run Create Games, then Update Players & Squads with All Clubs selected, then Update Finished Games if the competition is already under way.

On a first setup you often don’t have to reopen anything: after Update Competition Structure succeeds, the configuration modal opens by itself on the action cards.

The Import Competition Configuration modal for the linked Champions League season, Linked Competitions showing both the API and the local competition, with Create Games and Update Players and Squads under Create and Setup and Update Finished Games under Update Games

Games land in the stage that owns their API round, which is exactly why the mapping in step 3 was worth doing carefully.

Group games also get their matchweek from the last number in the round name, so Group C - 4 becomes matchweek 4 of the group stage. Knockout games take their round’s ID instead – 1 for the stage’s first round, 2 for the next.

6. One standing table per group

The group stage needs its own tables, and there’s one table per group. Go to Competitions > Standing Tables > Add New Standing Table, pick the group-stage competition and the group, and set the ranking rules.

The Standing Tables screen under the Competitions menu, with the Add New Standing Table button at the top and the row actions of a group table open, showing Edit, Quick Edit, Trash, View and Clone

The setup screen shows each stage as the competition title followed by the stage title, for example UEFA Champions League 2023-2024 – Group stage. Only round-robin stages are offered, and a group drops out of the Group list once it has a published table. Work down the list until it’s empty and every group is covered.

The Add New Standing Table setup with the group stage of the cup chosen under Competition, one of its groups picked under Group with that group's clubs listed, and the Save and Continue button

Clone last season’s tables

If you ran the same cup last season, clone those standing tables instead of rebuilding eight of them. The ranking rules come across with the clone, which is the part that’s tedious to redo.

Hover last season’s table in the list and click Clone. The copy opens on the setup screen, just like a new table – pick this season’s group stage and group, then Save & Continue. Row colors, notes and initial points come across along with the rules, so clear any initial points last season’s table carried.

Knockout stages don’t need standing tables. Their bracket is drawn from the ties.

7. Later rounds, later

A cup only reveals its later match-ups as it goes. You map what exists now, and come back after each draw. That return trip is a separate, shorter job – see Add New Games to a Multistage Competition.

Save the league to the Import Dashboard with the star button so scores and line-ups keep updating in between. See Import Dashboard.

8. Check the competition page

Open the competition on the front end. The group tables and the knockout bracket both show on the competition page. Stages set to hide draw no bracket, which is why the qualifying and play-off rounds don’t add brackets of their own.

The front-end page of an imported multistage cup, showing the group standing tables followed by the knockout bracket with results filled in

To show the bracket somewhere else, use the Bracket Shortcode with the knockout stage’s ID – the one the Competitions list shows next to the stage.

🆘 Troubleshooting

My competition isn’t in Select Local Competition

Two reasons. The list shows competitions by their main stage, so look for the season title, not a stage name like Group stage. And a competition that’s already linked to an API league and season is left out – open that league’s row instead of starting a new configuration.

Only the first stage appears in step 1

The other stages aren’t attached to this one. Stages belong to a competition when they’re added as tabs with Add New Stage in its editor and saved – a second competition created on its own stays separate, and the Competitions list shows it as Single. Fix the structure, close the modal and reopen it – the stage list is read when the modal opens.

Games landed in the wrong stage

An API round was mapped to the wrong row. Correcting the mapping doesn’t move games that already exist, and Create Games skips every fixture it has imported before. So: reopen the structure from the branching-arrow button on the league row (Add teams to groups/ties), move the round to the right row, click Next Step and then Update Competition Structure. Then delete the misplaced games permanently – moving them to the Trash isn’t enough, because a trashed game still counts as imported – and run Create Games again. Existing games aren’t duplicated.

Create Games finished, but some games are missing

A game is only created when both clubs sit in the same group or tie of the mapped round. Fixtures that don’t are skipped, so compare the number of games with the real schedule. The usual cause is an entry left on Ignore in step 2, so that group or tie never got its clubs. Reopen Add teams to groups/ties, set that entry to Create, update the structure and run Create Games again.

Step 2 shows dozens of groups for one stage

That’s a league phase read without the single-table switch. Go back to step 1, set Put all Teams into single table to Yes and click Next Step again. It resets every time step 2 loads, so set it again whenever you step back.

A knockout round shows no ties

The draw for that round hasn’t happened yet, so the API has no fixtures for it. Map it now if you like, but the ties only appear once the fixtures exist. Come back after the draw.

The bracket is empty or out of order

The bracket reads the ties in the order they’re stored. With manual bracket layout you can reorder them in the competition editor. See Advanced Bracket.

An empty bracket usually has a simpler cause: the stage is on hide, or it’s on automatic and has no games yet – automatic draws nothing until the first game exists. Euro 2024 Knockout Stage shows both layouts on a real bracket, and how to drag the ties into the official order.

📚 What’s next