Base URL: {{ url('/v1') }}
All endpoints (except /v1/health) require the x-api-key header.
GET {{ url('/v1/providers') }}
x-api-key: YOUR_API_KEY
Invalid or missing key returns 401:
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid API key."
}
}
Version prefix in URL (e.g., /v1). Future versions may alter payloads.
List endpoints accept page and page_size (default 1 and 50; max 200). Laravel Resource collections return pagination links and meta.
GET {{ url('/v1/providers?page=2&page_size=20') }}
x-api-key: YOUR_API_KEY
Example response (truncated):
{
"data": [ { "code": "netent", "name": "NetEnt", "website_url": "https://www.netent.com" } ],
"links": { "first": "...", "last": "...", "prev": "...", "next": "..." },
"meta": { "current_page": 2, "from": 21, "last_page": 4, "path": "{{ url('/v1/providers') }}", "per_page": 20, "to": 40, "total": 80 }
}
Standardized error shape:
{
"error": {
"code": "STRING_CODE",
"message": "Human readable explanation.",
"details": {"optional": "context"}
}
}
No authentication required.
{
"status": "ok",
"uptime_seconds": 123456,
"version": "v1"
}
List providers (paginated).
curl -H "x-api-key: YOUR_API_KEY" "{{ url('/v1/providers?page=1&page_size=50') }}"
{
"data": [
{ "code": "netent", "name": "NetEnt", "website_url": "https://www.netent.com" }
],
"links": { ... },
"meta": { ... }
}
curl -H "x-api-key: YOUR_API_KEY" "{{ url('/v1/providers/netent') }}"
{
"data": { "code": "netent", "name": "NetEnt", "website_url": "https://www.netent.com" }
}
Filters: provider, type, q, rtp_min, rtp_max, volatility, max_win_min, reels/rows/lines min/max, has_free_spins, has_bonus_buy, has_jackpot, mechanic[], theme, tag[], market; sort by name|rtp|max_win|release_date asc/desc.
curl -H "x-api-key: YOUR_API_KEY" "{{ url('/v1/games?provider=netent&rtp_min=96&sort=rtp_desc&page=1&page_size=20') }}"
{
"data": [
{
"id": 123,
"provider": { "code": "netent", "name": "NetEnt" },
"type": "slot",
"name": "Starburst",
"slug": "starburst",
"rtp_default": 96.09,
"volatility": "LOW",
"max_win_x": 600.0,
"reels": 5,
"rows": 3,
"lines_or_ways": 10,
"has_free_spins": false,
"has_bonus_buy": false,
"has_jackpot": false,
"theme": { "code": "space", "name": "Space" },
"mechanics": [ { "code": "EXPANDING_WILDS", "name": "Expanding Wilds" } ],
"tags": [ { "code": "classic", "name": "Classic" } ],
"release_date_global": "2013-01-01",
"thumbnail_url": "https://cdn.example.com/starburst-thumb.png",
"demo_url": "https://demo.example.com/starburst"
}
],
"links": { ... },
"meta": { ... }
}
curl -H "x-api-key: YOUR_API_KEY" "{{ url('/v1/games/123') }}"
{
"data": {
"id": 123,
"provider": { "code": "netent", "name": "NetEnt", "website_url": "https://www.netent.com" },
"type": "slot",
"name": "Starburst",
"slug": "starburst",
"code": "starburst_code",
"rtp_default": 96.09,
"rtp_configs": [ { "name": "default", "rtp": 96.09 } ],
"volatility": "LOW",
"original_volatility_text": "Low",
"max_win_x": 600.0,
"reels": 5,
"rows": 3,
"lines_or_ways": 10,
"min_bet": 0.1,
"max_bet": 100.0,
"has_free_spins": false,
"has_bonus_buy": false,
"has_jackpot": false,
"theme": { "code": "space", "name": "Space" },
"subtheme": "Gems in space",
"mechanics": [ { "code": "RESPINS", "name": "Respins" } ],
"tags": [ { "code": "classic", "name": "Classic" } ],
"markets": [ { "code": "MGA", "name": "Malta Gaming Authority", "availability": "AVAILABLE" } ],
"release_date_global": "2013-01-01",
"thumbnail_url": "https://cdn.example.com/starburst-thumb.png",
"background_url": null,
"demo_url": "https://demo.example.com/starburst",
"short_description": "A classic low-volatility slot...",
"long_description": "Starburst is a classic NetEnt slot...",
"created_at": "2025-01-01T12:00:00Z",
"updated_at": "2025-01-01T12:00:00Z"
}
}
curl -H "x-api-key: YOUR_API_KEY" "{{ url('/v1/providers/netent/games/starburst') }}"
Returns same payload as /v1/games/{id}.
Same filters as /v1/games. Intended for fuzzy/semantic search of q.
{
"data": [ { "code": "AVALANCHE", "name": "Avalanche", "description": "Symbols fall into place..." } ],
"links": { ... },
"meta": { ... }
}
{
"data": [ { "code": "space", "name": "Space" } ],
"links": { ... },
"meta": { ... }
}
{
"data": [ { "code": "classic", "name": "Classic" } ],
"links": { ... },
"meta": { ... }
}
{
"data": [ { "code": "MGA", "name": "Malta Gaming Authority", "region": "EU" } ],
"links": { ... },
"meta": { ... }
}
{
"client_id": "cl_123",
"name": "Example Affiliate",
"plan": { "code": "PRO", "name": "Pro", "daily_request_limit": 10000, "monthly_request_limit": 300000 }
}
{
"period": { "from": "2025-01-01", "to": "2025-01-07" },
"daily": [ { "date": "2025-01-01", "total_requests": 1234 } ]
}
On breach, API responds with 429:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded for plan PRO: 10000 requests per day."
}
}
| Status | When | Body |
|---|---|---|
| 400 / 422 | Validation | |
| 401 | Missing/invalid key | |
| 403 | Forbidden | |
| 404 | Not found | |
| 429 | Rate limit | |
| 500 | Server error | |
© {{ date('Y') }} Game Metadata API • Version v1