# Get World Cup 2026 fixtures and match context from Machina's API

Machina Sports' World Cup 2026 API returns the completed tournament's fixtures and final results in one call and the full context of any match in the next. A schedule call costs $0.01 and a match's context costs $0.01. Each call is paid on its own through a 402 price quote, with no account or API key. Send `POST https://agents.machina.gg/zcj/smo5pq0ek5j3/world-cup/v1/get-schedule` with a team, then pass a fixture's `event_urn` to `POST https://agents.machina.gg/zcj/smo5pq0ek5j3/world-cup/v1/get-event-context`.

## At a glance

- **Endpoints:** `POST https://agents.machina.gg/zcj/smo5pq0ek5j3/world-cup/v1/get-schedule` and `POST https://agents.machina.gg/zcj/smo5pq0ek5j3/world-cup/v1/get-event-context`, both synchronous JSON
- **Schedule body:** all fields optional: `team`, `opponent`, `status`, `date_from`, `date_to`, `limit`, `offset`. An empty body returns all 104 fixtures.
- **Event context body:** at least one of `event`, `team`, `event_urn` or `provider_event_id`, plus `opponent` and `date` to narrow the match
- **Price:** schedule $0.01, event context $0.01
- **Payment:** each call answers with a 402 price quote that you pay and retry. No account or API key.
- **Response:** `archive` and `coverage` blocks on every answer, plus `schedule.events` or `event_context`, each carrying the canonical `event_urn`
- **Scope:** FIFA World Cup 2026 only, served from the completed tournament's archive
- **Full purchase flow:** [the buyer skill](https://agents.machina.gg/zcj/smo5pq0ek5j3/SKILL.md)

## Get fixtures, then one match

1. Request a team's fixtures:

   ```bash
   curl -s -X POST https://agents.machina.gg/zcj/smo5pq0ek5j3/world-cup/v1/get-schedule \
     -H 'Content-Type: application/json' \
     -d '{"team": "Brazil", "limit": 3}'
   ```

   The first answer is a 402 quoting $0.01. Pay it and retry the same request; [the buyer skill](https://agents.machina.gg/zcj/smo5pq0ek5j3/SKILL.md) has the steps. This example request paid $0.01 and returned three of Brazil's five fixtures, with `has_more` set to true. Here is an excerpt:

   ```json
   {"status": "success", "data": {
     "archive": {"mode": "final_archive", "live": false, "status": "hit", "capability_status": "complete"},
     "coverage": {"status": "complete", "included_count": 104, "reason": "All canonical tournament fixtures and verified result details are included."},
     "schedule": {"count": 3, "total_count": 5, "offset": 0, "limit": 3, "has_more": true,
       "events": [{"name": "Brazil vs Morocco - FIFA World Cup 2026",
         "event_urn": "urn:machina:sport:soccer:event:brazil-vs-morocco:20260613:wor",
         "fixture_id": "1489371", "stage": "Group Stage - 1",
         "start_date": "2026-06-13T22:00:00+00:00", "venue": "MetLife Stadium",
         "score": {"home": 1, "away": 1, "elapsed": 90},
         "result_details": {"status": "FT", "regulation_time_score": {"home": 1, "away": 1}, "winner": null}}]}}}
   ```

2. Keep each fixture's `event_urn`. When `has_more` is true, send the same body with `"offset": 3` to get the next page. Each page is a separate call.

3. Request one match's context by its plain label, or by the `event_urn` you kept:

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

   The 402 quotes $0.01. This example request paid $0.01. Its response resolved the label to the same `event_urn` and returned `resolved_fixture` and `event_context`. The `event_context` object holds `event` with `provider_ids` for api_football, sportradar, opta and entain, `result_details` with its provider `source_url`, and `sports_context`.

4. Read the coverage before you trust a field. In the example, `archive.capability_status` and `coverage.status` were both `partial`. The `context_coverage` field marked `sports_context` as `available`, and `prematch_research` and `social_pulse` as `unavailable`. The archive note stated that the archived event truth is complete independently of optional enrichment.

## Filter the schedule

| To get | Send |
| --- | --- |
| One team's matches | `team` |
| A head-to-head | `team` and `opponent` |
| Matches by final status | `status`: `FT`, `AET` or `PEN` |
| A date window | `date_from` and `date_to` (YYYY-MM-DD, inclusive) |
| A page | `limit` (1 to 500, default 104) and `offset` (default 0) |

## Pick a match selector

| You have | Send |
| --- | --- |
| A plain label | `event`, such as `"Brazil vs Morocco"` |
| Team names and a day | `team`, `opponent` and `date` |
| An id from an earlier response | `event_urn` |
| An API-Football fixture id | `provider_event_id` |

When you send more than one selector, the match must satisfy all of them. A selector that fits several matches returns `candidates`, each with its `event_urn`. The API does not guess a match.

## Read the archive and coverage blocks

| Field | Meaning |
| --- | --- |
| `archive.live` | Always `false`. The data comes from the completed tournament. |
| `archive.status` | `hit` means an archived row was served. `unavailable` or `error` means nothing was served. |
| `archive.missing_capabilities` | The parts this answer does not include |
| `coverage.status` | `complete`, `partial`, `unavailable` or `error` |
| `coverage.unsupported_fields` | The fields this answer does not cover |
| `archive.provenance`, `result_details.provenance` | Where the data came from, for citation |

## Other operations and services

Find each path with `GET https://agents.machina.gg/zcj/smo5pq0ek5j3/openapi.json?q=<task>`. Squads and injuries accept the same fixture selectors, including `event_urn`, and player performance takes them with a player selector.

| Service | Operation | Price |
| --- | --- | --- |
| Match Context | `resolve` (entity ids across providers) | $0.01 |
| Match Context | `standings` (final group standings) | $0.01 |
| Match Context | `squads` (`/world-cup/v1/get-squads`) | $0.01 |
| Match Context | `injuries` (`/world-cup/v1/get-injuries`) | $0.01 |
| Match Context | `player_performance` (`/world-cup/v1/get-player-performance-context`) | $0.01 |
| Forecasts | `match_forecast` (Dixon-Coles match probabilities) | $0.12 |
| Forecasts | `backtest` (`/world-cup/v1/backtest-forecasts`) | $0.12 |
| Finished Content | `match_recap` | $0.40 |
| Finished Content | `player_spotlight` | $0.40 |

Forecasts are informational research output. They select, rank and recommend no wagers.

## Limits

- The API covers the FIFA World Cup 2026 only, from the archive of the completed tournament.
- Each event context call resolves one fixture.
- An unpaid 402 charges nothing, so you can stop there safely.
- Answers the API cannot serve (400, 404, 502, 503) carry `"billed": false` and are not charged.

## Errors

| Status and code | Meaning | Action |
| --- | --- | --- |
| `402` | The price quote. Nothing is charged yet. | Pay it and retry the same request, or stop. |
| `400 fixture_selector_required` | No selector was sent | Add `event`, `team`, `event_urn` or `provider_event_id`. |
| `400 fixture_ambiguous` | More than one match fits | Add `opponent` or `date`, or resend with one candidate's `event_urn`. |
| `400 unsupported_parameter` | A field or value is outside the archive | Correct the request using `accepted_fields`. |
| `404 fixture_not_found` | No archived match fits | Check the team names or the id. |
| `503 archive_row_missing` | The selector is valid but the archive has no row for it | Retry later. |
| `502 archive_error` | Archive integrity error | Retry later. |

## Frequently asked questions

### Does the World Cup 2026 API need an account or API key?

No. Each call is paid on its own through a 402 price quote over x402 or MPP. Only Credits purchases need an agent identity.

### Does it return live or upcoming matches?

No. Every answer comes from the archive of the completed FIFA World Cup 2026, and `archive.live` is always `false`.

### How much does it cost to get every fixture?

A schedule call with an empty body returns all 104 fixtures for $0.01. The schedule plus the context of ten matches costs $0.11.

### What happens when a match label is ambiguous?

The API returns a 400 with `candidates` instead of picking a match. The 400 is not billed. Resend the request with one candidate's `event_urn`.

### Can the data be cited?

Yes. Each answer carries `archive.provenance`, and each result carries `result_details.provenance` with its provider and `source_url`.

## Keep reading

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

---

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