A PHP live-fixtures and statistics connector plus an experimental xG projection model. A provider key is required. Automatic SportyBet booking-code generation is not implemented. Do not mistake the upload package for a verified end-to-end betting integration.
v3.football.api-sports.io.No database, Node.js, Composer or cron job is required. Refresh runs only while your browser tab is open and visible.
Extract the ZIP in cPanel File Manager outside public_html first. Then move the files as described below. Show hidden files so that .htaccess is included.
public_html folder into a new, empty folder or subdomain document root. Keep your other website's files intact. The app works from a subfolder such as public_html/touchline/.touchline-private outside the domain's public document root. For a standard main domain, this is normally /home/YOUR_CPANEL_USER/touchline-private/.Example for a standard main domain:
/home/YOUR_CPANEL_USER/
touchline-private/
config.php
cache/ (created automatically)
public_html/
touchline/
index.html
live.js
live-model.js
model.js
style.css
live.css
.htaccess
api/
index.php
football.php
.htaccessFor a subdomain, find its exact document root in cPanel → Domains. By default, the app looks for touchline-private/config.php in the parent of that document root. If that folder is still publicly accessible, choose a location outside all web roots and set the environment variable TOUCHLINE_CONFIG_FILE, or edit the single $configPath assignment in api/index.php to an absolute private path. Do not put keys in JavaScript.
In cPanel → Directory Privacy, password-protect the app folder. Use a separate app password. This protects both the page and its API routes. Keep touchline-private outside every public web root. Its included deny rule is a backup; it is not a replacement for private placement.
touchline-private/config.example.php to config.php.api_football_key in that private file. Enter the key directly in cPanel; it is never needed in a chat message.daily_request_budget to your actual allowance or lower. It starts at 100. Leave the server cache settings at their defaults for initial testing.<?php
return [
'api_football_key' => 'ENTER_YOUR_DIRECT_API_SPORTS_KEY',
'daily_request_budget' => 100,
'cache_dir' => __DIR__ . '/cache',
'fixtures_cache_seconds' => 15,
'statistics_cache_seconds' => 60,
];Provider pricing checked on 19 October 2026: the free tier is 100 requests/day with season limits; Pro is listed at $19/month with 7,500 requests/day. Confirm current pricing and coverage before purchasing anything.
Watching one selected match in one active browser uses approximately 180 provider requests per hour: a live list every 30 seconds and statistics every 60 seconds, with server caching. Switching matches and changes in score/phase add requests. Multiple users can also increase consumption. A free key is for testing this connection, not continuous monitoring. The package enforces a local daily cap; API errors also count as attempted calls.
Source: provider pricing. The provider's official guide describes 15-second fixture updates and minute-level statistics updates.
The SportyBet Nigeria interface showed Book Bet after a live selection was added. No wager was placed during testing, and no working code was obtained. This package therefore has no enabled automatic booking adapter.
To finish this feature, a supported or otherwise permitted code-creation route must be established and tested. It must fetch current SportyBet live markets, match the exact event and selection, recheck that the market is active, create a reservation code, then load that code back to verify its contents. A football statistics key alone cannot do this. Your SportyBet password is not needed for the package.
Local model and PHP fixture-normalization checks are included. No live provider key or cPanel server was available for an authenticated end-to-end test. Browser visual QA and automatic SportyBet code creation remain unverified.