---
title: "Look up multiple IDs in one request"
method: POST
path: "/batch/lookup"
deprecated: true
---

# Look up multiple IDs in one request

`POST /batch/lookup`

> **Deprecated.**

**Deprecated.** Prefer `POST /batch/resolve` for all bulk lookups — it is
provider-aware, supports the `targets` parameter for response narrowing,
and echoes each input back in the `from` field for easy correlation.

Batch lookup by Reep IDs or Wikidata QIDs. Accepts a mix of both.
A single QID may return multiple records if the person is both a player and coach.
Results are flattened into a single array, so the response `count` may exceed
the number of `ids` in the request. Maximum 100 IDs per request.

## Request body

- object
  - `ids` string[], required — Array of Reep IDs or Wikidata QIDs

## Response `200`

Batch lookup results

- BatchLookupResponse
  - `results` union[] — Flattened list. A single QID input may expand to multiple entities (e.g. dual-role player/coach), so `count` can exceed the number of input ids.
    - union
      - Entity
        - `reep_id` string — Universal Reep ID (reep_<type_prefix><8hex>). This is the canonical identifier.
        - `qid` string, nullable — Wikidata QID (convenience field, null for entities not in Wikidata)
        - `type` 'player' | 'team' | 'coach' | 'competition' | 'season' | 'match'
        - `name_en` string
        - `aliases_en` string, nullable
        - `full_name` string, nullable
        - `date_of_birth` string, nullable
        - `nationality` string, nullable
        - `position` string, nullable — Coarse position (forward, midfielder, defender, goalkeeper). Players only.
        - `position_detail` string, nullable — Granular position from Transfermarkt (e.g. Centre-Back, Attacking Midfield, Right Winger). Players only.
        - `current_team_reep_id` string, nullable — Reep ID of current team (players only)
        - `height_cm` number, nullable
        - `country` string, nullable — For teams only
        - `founded` string, nullable — For teams only
        - `stadium` string, nullable — For teams only
        - `competition_reep_id` string, nullable — For seasons only — Reep ID of the parent competition
        - `match_date` string, nullable — For matches only — ISO date of the fixture
        - `kickoff_utc` string, nullable — For matches only — ISO kickoff timestamp when known
        - `home_team_reep_id` string, nullable — For matches only — Reep ID of the home team
        - `away_team_reep_id` string, nullable — For matches only — Reep ID of the away team
        - `home_score` integer, nullable — For matches only — final home score when known
        - `away_score` integer, nullable — For matches only — final away score when known
        - `round_label` string, nullable — For matches only — provider round label
        - `referee` string, nullable — For matches only
        - `attendance` integer, nullable — For matches only
        - `season_label` string, nullable — For matches only — provider-native season label when no canonical season mapping exists
        - `source` string — Provenance (wikidata, opta, etc.)
        - `external_ids` object — Map of provider name to external ID (includes wikidata QID)
        - `_deprecated` boolean — Present and `true` when the client asked for a `reep_id` that has been retired. The body carries the canonical entity's fields; the `_canonical_id` meta tells the client the underlying `reep_id` has moved. Provider-id paths (e.g. `?id=Q42`) redirect silently and do NOT set this field.
        - `_canonical_id` string, nullable — When `_deprecated=true`, the canonical successor `reep_id`. Null on a retirement (entity removed with no successor — a 410 Gone body).
        - `_deprecated_at` string — ISO timestamp when the retired `reep_id` was soft-deleted.
        - `_deprecated_reason` 'retired' | 'chain_depth_exceeded' | 'canonical_missing' — Present on error-shape deprecation responses (410 Gone body). `retired` = no successor. The other two are defensive fallbacks that should not surface in normal operation.
      - object — Error for a reep_id that was not found
        - `id` string, required
        - `error` 'not_found', required
      - object — Gone marker for a reep_id that was retired without a canonical successor. Mirrors the /lookup 410 body shape but lives inline in the batch results array.
        - `id` string, required
        - `error` 'gone', required
        - `_deprecated` true, required
        - `_canonical_id` 'null', nullable, required
        - `_deprecated_at` string, required
        - `_deprecated_reason` 'retired' | 'chain_depth_exceeded' | 'canonical_missing', required
      - object — Error for a Wikidata QID that was not found
        - `qid` string, required
        - `error` 'not_found', required
  - `count` integer

## Other responses

- `400` — Invalid body, empty ids array, or exceeds 100 ID limit

---

[API](https://skmtc.net/withqwerty/apis/the-reep-register.md) · [All operations](https://skmtc.net/withqwerty/apis/the-reep-register/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/withqwerty/the-reep-register/revisions/82844e1c9405/schema)
