---
title: "A match by its 4-character code"
method: GET
path: "/api/v1/matches/{code}"
tags: ["matches"]
---

# A match by its 4-character code

`GET /api/v1/matches/{code}`

## Request

- Base URL: `https://kicksma.sh`
- URL: `https://kicksma.sh/api/v1/matches/{code}`
- Auth: none declared

## Path parameters

- `code` string, required

## Response `200`

The match

- Match: Exactly what the public match page shows. First names and levels only; never emails, phones, tokens or manage links.
  - `code` string, required
  - `url` string, required
  - `type` 'match' | 'tournament', required
  - `format` 'americano' | 'mexicano' | 'king' | 'null', nullable: Tournaments only.
  - `fixedPairs` boolean, nullable: Tournaments only: two partners play every round together instead of rotating.
  - `pairs` object[], nullable: A fixed-pairs tournament's list as pairs, in order: two first names each, or one name that needs a partner. Null otherwise.
    - `names` string[]
    - `partnerNeeded` boolean
  - `title` string, nullable
  - `status` 'open' | 'full' | 'cancelled' | 'past', required
  - `startsAt` string, date-time, required
  - `endsAt` string, date-time: startsAt plus durationMinutes.
  - `durationMinutes` 60 | 90 | 120: How long the organiser booked the court, in minutes. The calendar invitation ends here too.
  - `tz` string, required
  - `venue` object, nullable
    - `name` string
    - `slug` string, nullable
    - `mapUrl` string, nullable
    - `court` string, nullable
    - `boardUrl` string, nullable
  - `capacity` integer, required
  - `players` object[], required
    - `name` string
    - `level` number, nullable
    - `organizer` boolean
    - `status` 'joined' | 'confirmed' | 'invited'
  - `spotsLeft` integer, required
  - `waitlist` integer
  - `whenFull` 'waitlist' | 'closed'
  - `level` object, nullable
    - `min` number, nullable
    - `max` number, nullable
    - `preset` string, nullable: bronze, silver, gold, platinum or custom
    - `verifiedOnly` boolean: Only levels confirmed by an organizer, a coach or the club walk in; declared levels inside the range ask to join.
  - `category` 'men' | 'women' | 'mixed' | 'null', nullable: Who the match is for; null for anyone. Information only: nobody is checked when they join.
  - `ageMin` 35 | 45 | 55 | null, nullable: An age tag, read as 35+, 45+ or 55+; null for any age. Information only.
  - `group` object, nullable
    - `code` string
    - `name` string
    - `url` string
  - `listed` boolean
  - `bookingUrl` string, nullable
  - `courtBooked` object, nullable: A player booked the court in the club's own app and said so. Null while not booked and on a cancelled match. Kicksmash never books or takes a payment.
    - `at` string, date-time
    - `by` string, nullable: The booker's first name; null when the booker no longer holds a seat or their account is gone.
  - `cost` string, nullable: What each player pays, free text.
  - `note` string, nullable
  - `result` object, nullable
    - `sets` object[]
      - `a` integer
      - `b` integer
    - `teamA` string[]
    - `teamB` string[]
    - `winner` 'a' | 'b' | 'draw': Sets can be empty when only the winner was recorded.
    - `confirmed` boolean
  - `createdAt` string, date-time

## Other responses

- `404`: No such match

---

[API](https://skmtc.dev/kicksma/apis/kicksmash-api.md) · [All operations](https://skmtc.dev/kicksma/apis/kicksmash-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kicksma/apis/kicksmash-api/revisions/8ae952aa0f19?raw)
