FWZ

Partner API Integration Guide

EventConnecta Play 2026
API versionv1
Document1.0 · October 2026

1Getting started

Base URL

https://api.fwzesports.com/api/v1

Authentication

Send your API key on every request in the X-Api-Key header.

X-Api-Key: ak_••••••••••••••••••••••••

Your event

Every request names the event with the event parameter. Your event's identifier is:

event=connecta-play-2026

Example request

curl "https://api.fwzesports.com/api/v1/partner/ticket-holders?event=connecta-play-2026&limit=20" \
  -H "X-Api-Key: ak_••••••••••••••••••••••••"

A successful call returns HTTP 200 with the response envelope described in the next section.

2Conventions

Response envelope

Every response, success or error, has the same outer shape. Records are in data and paging information is in meta.

{
  "success": true,
  "message": "Ticket holders retrieved successfully",
  "data": [ … ],
  "meta": {
    "page": 1,
    "limit": 100,
    "total": 742,
    "totalPages": 8,
    "hasNextPage": true,
    "hasPrevPage": false
  },
  "path": "/api/v1/partner/ticket-holders?event=connecta-play-2026",
  "timestamp": "2026-10-23T09:12:44.118Z",
  "requestId": "a3f1c0e2-…"
}

Pagination

ParameterTypeDescription
pageoptionalinteger ≥ 1Page number. Default 1.
limitoptionalinteger 1–500Records per page. Default 100.

Dates and times

All timestamps are ISO 8601 in UTC, for example 2026-10-23T09:12:44.118Z.

Identifiers

Record id values are stable UUIDs and can be used to de-duplicate imports. username is the common key across all three resources.

Rate limit

The API is intended for periodic synchronisation rather than continuous polling. Requests above the limit receive HTTP 429. Wait a few seconds and retry. A full sync every few minutes is well within limits.

3Endpoints

3.1Ticket holders

GET/partner/ticket-holders
Everyone who currently holds a valid ticket for the event, with the tickets they hold. One record per person, even if they hold several tickets.

Query parameters

ParameterTypeDescription
eventrequiredstringEvent identifier: connecta-play-2026.
searchoptionalstringCase-insensitive match on username, email, phone or display name.
page, limitSee Pagination.

Response fields

FieldTypeDescription
usernamestringThe holder's unique username on FWZ.
displayNamestring · nullThe name the holder chose to display. null when not set.
emailstringThe holder's email address.
phonestringThe holder's phone number, international format.
emailVerifiedbooleantrue when the holder has confirmed this email address. A message to an unverified address may not reach them.
phoneVerifiedbooleantrue when the holder has confirmed this phone number. A WhatsApp message to an unverified number may not reach them.
ticketsarrayThe tickets this holder currently holds for the event, oldest first.
tickets[].ticketNamestringName of the ticket, e.g. VIP - Day 1.
tickets[].ticketTypestringCategory of the ticket, e.g. VIP.
tickets[].claimedAttimestampWhen this ticket was issued to the holder.
Example request
GET https://api.fwzesports.com/api/v1/partner/ticket-holders?event=connecta-play-2026&search=ahmed&limit=2
X-Api-Key: ak_••••••••••••••••••••••••
Example response
{
  "success": true,
  "message": "Ticket holders retrieved successfully",
  "data": [
    {
      "username": "ahmed_ali",
      "displayName": "Ahmed Ali",
      "email": "ahmed@example.com",
      "phone": "+201000000000",
      "emailVerified": true,
      "phoneVerified": true,
      "tickets": [
        {
          "ticketName": "VIP - Day 1",
          "ticketType": "VIP",
          "claimedAt": "2026-10-20T09:00:00.000Z"
        }
      ]
    },
    {
      "username": "ahmed.s",
      "displayName": null,
      "email": "a.samir@example.com",
      "phone": "+201111111111",
      "emailVerified": false,
      "phoneVerified": true,
      "tickets": [
        {
          "ticketName": "Standard - Day 1",
          "ticketType": "Standard",
          "claimedAt": "2026-10-21T14:32:10.000Z"
        }
      ]
    }
  ],
  "meta": {
    "page": 1,
    "limit": 2,
    "total": 37,
    "totalPages": 19,
    "hasNextPage": true,
    "hasPrevPage": false
  },
  "path": "/api/v1/partner/ticket-holders?event=connecta-play-2026&search=ahmed&limit=2",
  "timestamp": "2026-10-23T09:12:44.118Z",
  "requestId": "a3f1c0e2-7b1d-4c3a-9e2f-0d5b6a7c8d9e"
}

3.2Entry scans

GET/partner/entry-scans
Every successful entry at the gate, newest first. A person who enters on two days appears twice. Failed or rejected scans are not included.

Query parameters

ParameterTypeDescription
eventrequiredstringEvent identifier: connecta-play-2026.
page, limitSee Pagination.

Response fields

FieldTypeDescription
iduuidUnique identifier of the scan.
scannedAttimestampWhen the entry was recorded.
checkpointLabelstring · nullThe gate or checkpoint, as labelled by FWZ staff. null when not recorded.
userobject · nullThe person who entered. null if the account no longer exists.
user.usernamestringTheir username. Matches username in Ticket holders.
user.displayNamestring · nullTheir display name, if set.
Example request
GET https://api.fwzesports.com/api/v1/partner/entry-scans?event=connecta-play-2026&limit=2
X-Api-Key: ak_••••••••••••••••••••••••
Example response
{
  "success": true,
  "message": "Entry scans retrieved successfully",
  "data": [
    {
      "id": "019a0c8e-5a1f-7c3e-8b2d-1f4e6a7b8c9d",
      "scannedAt": "2026-10-23T08:41:07.233Z",
      "checkpointLabel": "Main Entrance",
      "user": { "username": "ahmed_ali", "displayName": "Ahmed Ali" }
    },
    {
      "id": "019a0c8e-59e2-7f10-9a4c-2e5f7b8c9d0e",
      "scannedAt": "2026-10-23T08:40:52.901Z",
      "checkpointLabel": "Main Entrance",
      "user": { "username": "sara.m", "displayName": null }
    }
  ],
  "meta": {
    "page": 1,
    "limit": 2,
    "total": 512,
    "totalPages": 256,
    "hasNextPage": true,
    "hasPrevPage": false
  },
  "path": "/api/v1/partner/entry-scans?event=connecta-play-2026&limit=2",
  "timestamp": "2026-10-23T09:12:44.118Z",
  "requestId": "b7c2d1f3-8e4a-4d5b-a1c6-2f7e8d9c0b1a"
}

3.3Participations

GET/partner/participations
Every time an attendee joined an activity's queue, newest first. One record per join, so a person who plays the same activity three times appears three times.

Query parameters

ParameterTypeDescription
eventrequiredstringEvent identifier: connecta-play-2026.
page, limitSee Pagination.

Response fields

FieldTypeDescription
iduuidUnique identifier of the participation.
activationstringName of the activity, e.g. Tekken 8.
statusenumWhere the participation stands. See the table below.
resultenum · nullWIN, LOSE or DRAW once the session is completed, otherwise null.
joinedAttimestampWhen the attendee joined the queue.
playedAttimestamp · nullWhen play started. null if it has not started.
resolvedAttimestamp · nullWhen the participation ended, for any reason. null while it is still open.
userobject · nullThe attendee, in the same shape as in Entry scans. null if the account no longer exists.

Status values

StatusMeaning
QUEUEDWaiting in the queue.
WAITING_AREACalled to the activity and about to play.
PLAYINGCurrently playing.
COMPLETEDPlayed to the end. result is set.
LEFTThe attendee left the queue themselves.
CANCELLEDCancelled before playing.
REMOVEDRemoved from the queue by staff.
REPORTEDEnded by staff due to a reported issue.
FLUSHEDQueue was cleared by staff, for example at the end of the day.
Example request
GET https://api.fwzesports.com/api/v1/partner/participations?event=connecta-play-2026&limit=2
X-Api-Key: ak_••••••••••••••••••••••••
Example response
{
  "success": true,
  "message": "Participations retrieved successfully",
  "data": [
    {
      "id": "019a0c8e-6b2a-7d4f-9c3e-2a5b7c8d9e0f",
      "activation": "Tekken 8",
      "status": "COMPLETED",
      "result": "WIN",
      "joinedAt": "2026-10-23T10:02:15.000Z",
      "playedAt": "2026-10-23T10:21:40.000Z",
      "resolvedAt": "2026-10-23T10:27:03.000Z",
      "user": { "username": "ahmed_ali", "displayName": "Ahmed Ali" }
    },
    {
      "id": "019a0c8e-6a9c-7e01-8d4f-3b6c8d9e0f1a",
      "activation": "VR Arena",
      "status": "QUEUED",
      "result": null,
      "joinedAt": "2026-10-23T10:01:58.000Z",
      "playedAt": null,
      "resolvedAt": null,
      "user": { "username": "sara.m", "displayName": null }
    }
  ],
  "meta": {
    "page": 1,
    "limit": 2,
    "total": 1184,
    "totalPages": 592,
    "hasNextPage": true,
    "hasPrevPage": false
  },
  "path": "/api/v1/partner/participations?event=connecta-play-2026&limit=2",
  "timestamp": "2026-10-23T09:12:44.118Z",
  "requestId": "c9d3e2a4-1f5b-4e6c-b2d7-3a8f9e0d1c2b"
}

4Errors

Errors use the same envelope with success: false and an error object. error.code is a stable, machine-readable string. message is a readable description.

{
  "success": false,
  "message": "You cannot access this event's data",
  "error": { "code": "FORBIDDEN", "details": {} },
  "path": "/api/v1/partner/entry-scans?event=other-event",
  "timestamp": "2026-10-23T09:12:44.118Z",
  "requestId": "d1e4f3b5-2a6c-4f7d-c3e8-4b9a0f1e2d3c"
}
StatusWhenWhat to do
400A parameter is missing or malformed.Check error.details and correct the request before retrying.
401Missing, invalid or revoked API key.Check the X-Api-Key header. Contact FWZ if the key was revoked.
403The key cannot access this route or this event.Use event=connecta-play-2026. Contact FWZ if you believe access is wrong.
429Too many requests.Wait a few seconds, then retry.
5xxTemporary problem on FWZ's side.Retry with a short back-off. Include requestId if you report it.