# Get World Cup 2026 standings, squads and injuries from Machina's API

Machina Sports' Match Context API serves the completed FIFA World Cup 2026 from an archive: the final group tables, the players each team brought to a match, and who was recorded missing for it. Each read is one paid `POST`, at $0.01 for standings, $0.01 for squads and $0.01 for injuries. The storefront answers with a 402 price quote that you pay over x402 or MPP and retry, so nothing is charged until you pay.

## At a glance

- **Endpoints:** `POST https://agents.machina.gg/zcj/zb25mu6s8anp/world-cup/v1/get-standings`, `POST https://agents.machina.gg/zcj/zb25mu6s8anp/world-cup/v1/get-squads`, `POST https://agents.machina.gg/zcj/zb25mu6s8anp/world-cup/v1/get-injuries`
- **Body:** standings takes `{}`. Squads and injuries need one fixture: `event` (such as `"Brazil vs Morocco"`), `event_urn`, `provider_event_id`, or `team` with `opponent` or `date`. Squads also accepts `home_team` and `away_team`.
- **Price per call:** standings $0.01, squads $0.01, injuries $0.01. All three cost $0.03.
- **Payment:** a 402 price quote, paid over x402 (Base USDC) or MPP (Tempo USDC) and retried. No account or API key.
- **Response:** JSON `{status, meta, data}`. `data` holds `standings`, `squads` or `injuries`, with `archive` and `coverage` blocks.
- **Scope:** FIFA World Cup 2026 only, served from the final archive (`archive.live` is `false`)
- **Unserved answers:** 400, 404, 502 and 503 are never billed
- **Full purchase flow:** [the buyer skill](https://agents.machina.gg/zcj/zb25mu6s8anp/SKILL.md)

## Read the final group tables

1. Send an empty body:

   ```bash
   curl -i -X POST https://agents.machina.gg/zcj/zb25mu6s8anp/world-cup/v1/get-standings \
     -H 'Content-Type: application/json' -d '{}'
   ```

   The storefront returns a 402 quoting $0.01. [The buyer skill](https://agents.machina.gg/zcj/zb25mu6s8anp/SKILL.md) covers paying it, and the same applies to the squads and injuries calls below.

2. Read `data.standings.groups`. It lists 12 groups, and each group has a four-row `table`. A row looks like this:

   ```json
   {"group": "Group A", "table": [{"rank": 1, "team": "Mexico", "team_id": 16, "played": 3, "win": 3, "draw": 0, "lose": 0, "goals_for": 6, "goals_against": 0, "goal_diff": 6, "points": 9, "crest": "https://media.api-sports.io/[path]"}]}
   ```

   The same response carries `third_place_ranking`, a separate 12-entry list with the same row fields, and `team_count` of 48. This example request paid $0.01.

## Read both squads for a match

1. Send a fixture:

   ```bash
   curl -i -X POST https://agents.machina.gg/zcj/zb25mu6s8anp/world-cup/v1/get-squads \
     -H 'Content-Type: application/json' -d '{"event": "Brazil vs Morocco"}'
   ```

   The 402 quotes $0.01.

2. Read `data.squads.teams`. It has one entry per side, and each entry has `side`, `team`, `team_urn`, `team_identity`, `source`, `count` and `players`. Each player carries its identity:

   ```json
   {"name": "<player name>", "position": "<position>", "player_urn": "<player_urn>", "provider_ids": {"espn": "<espn id>", "api_football": "<api_football player id>"}, "source_timestamp": "<timestamp>"}
   ```

3. Read `data.squads.official_registration_snapshot` for FIFA's final published squad lists. It lists 26 players per team. Each player there has `canonical_urn`, `provider_ids`, `jersey_number`, `position_code` and `identity_mapping_status` of `official_reconciled`. This example request paid $0.01.

## Read a match's injury report

1. Send the same fixture:

   ```bash
   curl -i -X POST https://agents.machina.gg/zcj/zb25mu6s8anp/world-cup/v1/get-injuries \
     -H 'Content-Type: application/json' -d '{"event": "Brazil vs Morocco"}'
   ```

   The 402 quotes $0.01.

2. Read `data.injuries.teams`. It has one entry per side, and each entry has `side`, `team`, `source`, `count` and `missing`. A `missing` entry has this shape:

   ```json
   {"name": "<player name>", "type": "<absence type>", "reason": "<reason>", "player_id": "<api_football player id>", "fixture_id": "<fixture id>", "fixture_date": "<date>"}
   ```

3. Check `evidence_status` (`recorded_absences`, `confirmed_none` or `unavailable`), `observed_record_count` and `historical_completeness_verified` before you treat the list as complete. This example request paid $0.01.

## Boundaries

- The archive covers the completed FIFA World Cup 2026 only.
- The standings are the final group tables. The response is not a final 1 to 48 ranking (`is_final_1_to_48_ranking` is `false`).
- The squads response pairs an archived identity snapshot of the observed player pool with FIFA's final published lists. The observed pool does not prove a complete FIFA squad registration. Neither part is a match-day lineup, an eligibility record or a replacement history, and neither certifies injury status.
- The injury feed is evidence from a provider. An empty `missing` list does not prove a complete injury record unless `coverage_complete` is explicitly true. The archive lists `verified_complete_injury_coverage` as a missing capability.
- Each call is one fixture or one set of tables. There are no batch calls.
- An unpaid 402 charges nothing, so you can stop there safely.

## Errors

| Status | Meaning | Action |
| --- | --- | --- |
| `402` | The price quote. Nothing is charged yet. | Pay and retry the same request, or stop |
| `400 selector_required` | No fixture was sent to squads or injuries | Add `event`, `event_urn`, `provider_event_id`, or `team` with `opponent` or `date` |
| `400 selector_ambiguous` | The fixture matched more than one match. `candidates` lists them. | Resend with one candidate's `event_urn`, or add `opponent` or `date` |
| `404 not_found` | No archived fixture matched | Correct the selector, using `accepted_fields` in the error |
| `503 archive_row_missing` | The archive holds no row for a valid selector | Retry later |
| `502 archive_error` | Archive integrity error. Nothing was served. | Retry later |

The 400, 404, 502 and 503 answers carry `billed: false`.

## Frequently asked questions

### Are the World Cup 2026 group standings final?

Yes. The response carries `standings_scope` of `final_group_standings` and comes from the final archive, which marks the competition `completed` and `live` as `false`. It covers the 12 group tables and the third-place ranking. It is not a final 1 to 48 ranking.

### Is the squad list the official FIFA registration?

It has two parts. `squads.teams` is an archived snapshot of the players observed in the tournament, which does not prove complete FIFA registration. `official_registration_snapshot` comes from FIFA's final published squad lists, with 26 players per team across 48 teams. Neither part is a match-day lineup.

### Does an empty injury list mean no player was missing?

No. The injury feed records the absences its provider reported. An empty list is not proof of a complete record unless `coverage_complete` is explicitly true. Read `evidence_status` and `historical_completeness_verified` alongside the list.

### What identifiers does the squads response give each player?

Each player carries a canonical `player_urn` and `provider_ids` keyed by provider, such as `espn` and `api_football`. The `event_urn` from `candidates` identifies the same match in squads and injuries calls.

### Can I pay for these calls by card?

A single call costs less than the card rail's floor of $0.50, so pay-as-you-go calls are paid over x402 or MPP. To pay by card, buy prepaid Credits (minimum $0.50 by card) with `POST https://agents.machina.gg/zcj/zb25mu6s8anp/plans/{planId}/purchase`. The plan id is in the manifest, and the purchase needs an agent identity. Calls then draw down the balance.

## Keep reading

- [Buyer skill](https://agents.machina.gg/zcj/zb25mu6s8anp/SKILL.md): the full purchase flow
- [How to pay](https://agents.machina.gg/zcj/zb25mu6s8anp/payment.md): x402, MPP, card and Credits
- [Error reference](https://agents.machina.gg/zcj/zb25mu6s8anp/errors.md): payment and access errors
- [Match Context API reference](https://agents.machina.gg/zcj/zb25mu6s8anp/services/match-context/openapi.json): request and response schemas

---

Updated 2026-10-20. All Machina Sports guides: https://agents.machina.gg/guides.md. Storefront: https://agents.machina.gg/zcj/zb25mu6s8anp/llms.txt.
