


Transfer lineups and match data as a Universal Link from association software directly into the app – simple, fast, secure
With the Lineup Link API, associations, leagues, and clubs can generate a short link from their existing systems. When tapped, this link opens the referee app What's the Score, Bro? Reffing on the iPhone and automatically passes in the full lineup.
Integration is free, secure, and straightforward. Your system only needs to send a small JSON message (approx. 2–6 KB) to the API and will receive back a short Universal Link. There are no security risks for existing IT infrastructures: no inbound connections, no webhooks, no user accounts. Everything stays as it is – you simply make one outgoing API call.
Install the app, unlock the Pro version, and try it directly on your iPhone:
U7 Youth Match
4 × 15 minutes
7 field players + substitutes
Women’s Cup Match
2 × 45 minutes
2 × 15 minutes extra time
11 field players + substitutes
Men’s Indoor Tournament Match
15 minutes
Direct penalty shootout
6 field players + substitutes
The value for referees using Apple Watch and the app What's the Score, Bro? Reffing

Instantly ready: Tap – app opens – lineup is there. No manual typing, no transfer errors.

Game logic included: Halftime length, number of halves, knockout mode with extra time or direct penalty shootout are automatically embedded.

Less stress on match day: Captains & goalkeepers are marked, substitutes are complete, player numbers validated (0–99).

Data-minimal: Only numbers and roles are transmitted – no names or personal data.
Lineup Link API – Reference
Base URL: https://lineup.whatsthescorebro.com
Version: v1
Format: application/json
Auth: not required (rate limits apply)
Submit a lineup
Creates a server-side payload and returns:
lid – the short link ID
link – the Universal Link
expiresAt – expiration date of the link
Request Body (JSON)
| Field | Type | Required | Values | Description |
|---|---|---|---|---|
| v | integer | ✔ | = 1 | Schema version |
| players | array | ✔ | min 1 entry | All players of both teams, including substitutes |
| halvesMinutes | integer | ✔ | 1–45 | Minutes per half |
| halvesNumber | integer | ✔ | 1–4 | Number of halves |
| elimination | boolean | ✔ | true/false | Knockout match |
| onlyPenalties | boolean | true/false | Penalty shootout only, no extra time (e.g. for tournaments/indoor matches) | |
| extraTime | integer | 1–15 | Extra time in minutes per half | |
| ttlSeconds | integer | 60–31,536,000 | Validity of the link (max. 1 year). Higher values will be capped. |
Player (Object in players[])
| Field | Type | Required | Values/Constraints | Description |
|---|---|---|---|---|
| n | integer | ✔ | 0–99 | Jersey number |
| t | enum | ✔ | "home" | "guest" | Team assignment |
| p | enum | ✔ | "on" | "off" | Starting lineup (on) or bench (off) |
| c | boolean | ✔ | Captain | |
| g | boolean | ✔ | Goalkeeper |
Example
Response (200)
Error Codes
| Code | Body | Meaning |
|---|---|---|
| 422 | {"error":"invalid_payload","details":[...]} | Validation failed (e.g. number > 99, missing fields) |
| 429 | {"error":"rate_limited"} | Too many requests |
| 5xx | {"error":"server_error"} | Unexpected error |
Sample Implementations
Node.js
Python
PHP
C#
Java
Ruby
