Detailed view of colorful programming code on a computer screen.

Athlemetrics Football API: Complete Guide

Athlemetrics API – Complete Tutorial

Athlemetrics API Tutorial

Complete Guide to Football Analytics Integration

The Athlemetrics API provides access to advanced football player performance scores powered by machine learning models trained on data from over 30,000 professional players. This API enables developers to integrate sophisticated player analytics into their applications, research projects, or commercial platforms.

Getting Started

Prerequisites

  • RapidAPI account and API key
  • Basic understanding of REST APIs
  • Familiarity with JSON data format
Base URL:
https://athlemetrics-player-score-predictor.p.rapidapi.com

Authentication

All requests require RapidAPI authentication headers. You can get your API key and test endpoints on the RapidAPI playground.

X-RapidAPI-Key: YOUR_API_KEY
X-RapidAPI-Host: athlemetrics-player-score-predictor.p.rapidapi.com

Key Features

  • Player performance predictions using ML models
  • Role clustering and player similarity analysis
  • Customizable feature inputs with per-90-minute normalization
  • Multiple model types (Gradient Boosting, Ridge Regression)
  • Comprehensive player search functionality

1. Prediction Endpoints

GET /base-score/kits

Retrieve all available input kits and their expected fields.

Example Request:

curl -X GET "https://athlemetrics-player-score-predictor.p.rapidapi.com/base-score/kits" \
  -H "X-RapidAPI-Key: YOUR_API_KEY" \
  -H "X-RapidAPI-Host: athlemetrics-player-score-predictor.p.rapidapi.com"

Example Response:

{
  "kits": [
    {
      "name": "attacker_core",
      "description": "Core features for attacking players",
      "fields": ["goals_per90", "assists_per90", "shots_per90", "xG_per90"]
    },
    {
      "name": "midfielder_core",
      "description": "Core features for midfield players",
      "fields": ["passes_per90", "tackles_per90", "interceptions_per90"]
    }
  ]
}

Get Slider Parameters

GET /base-score/slider-params

Retrieve dynamic min/max/default values for feature inputs.

Parameters:

  • kit_name (required): Kit identifier (e.g., “attacker_core”)
  • alias (required): Feature alias name
curl -X GET "https://athlemetrics-player-score-predictor.p.rapidapi.com/base-score/slider-params?kit_name=attacker_core&alias=goals_per90" \
  -H "X-RapidAPI-Key: YOUR_API_KEY" \
  -H "X-RapidAPI-Host: athlemetrics-player-score-predictor.p.rapidapi.com"

Predict Player Score

POST /base-score/predict

Generate performance predictions based on custom feature inputs.

Request Body:

{
  "kit_name": "attacker_core",
  "payload": {
    "goals_per90": 0.65,
    "assists_per90": 0.35,
    "shots_per90": 3.2,
    "xG_per90": 0.55,
    "key_passes_per90": 1.8
  },
  "model_type": "gb",
  "name": "Custom Player",
  "team": "Example FC",
  "league": "Premier League",
  "season": 2024,
  "show_features": true,
  "score_scale": "0-10",
  "module_filter": "All"
}

Example Response:

{
  "player_name": "Test Player",
  "team": "Example FC",
  "league": "Premier League",
  "overall_score": 8.2,
  "score_scale": "0-10",
  "model_type": "gb",
  "features_breakdown": {
    "attacking": {
      "score": 8.5,
      "features": {
        "goals_per90": 0.65,
        "assists_per90": 0.35
      }
    },
    "shooting": {
      "score": 7.8,
      "features": {
        "shots_per90": 3.2
      }
    }
  }
}

List Available Models

GET /base-score/models

Get information about available prediction models.


2. Player Role Clustering

Search Players

GET /role-cluster/search

Search for players with fuzzy matching on name, squad, or position.

Parameters:

  • query (optional): Search text (default: “”)
  • label_source (optional): Role clustering model source
  • limit (optional): Max results (1-200, default: 30)
curl -X GET "https://athlemetrics-player-score-predictor.p.rapidapi.com/role-cluster/search?query=Salah&limit=10" \
  -H "X-RapidAPI-Key: YOUR_API_KEY" \
  -H "X-RapidAPI-Host: athlemetrics-player-score-predictor.p.rapidapi.com"

Example Response:

{
  "results": [
    {
      "record_id": 12345,
      "player_name": "Mohamed Salah",
      "squad": "Liverpool",
      "position": "RW",
      "season": 2024,
      "cluster_id": 3,
      "role_description": "Advanced Forward"
    }
  ],
  "total": 1,
  "limit": 10
}

Get Role Legend

GET /role-cluster/legend

Retrieve cluster ID to role description mapping.

{
  "legends": {
    "0": {
      "role": "Defensive Midfielder",
      "sample_count": 2450,
      "characteristics": ["High tackles", "Positional discipline"]
    },
    "1": {
      "role": "Box-to-Box Midfielder",
      "sample_count": 3200,
      "characteristics": ["Balanced stats", "High stamina"]
    }
  }
}

Predict Role by Record ID

GET /role-cluster/predict/record/{record_id}

Get role prediction for an existing player record.

Predict Role with Custom Features

POST /role-cluster/predict/custom

Classify player role based on custom feature inputs.

{
  "label_source": null,
  "feature_payload": {
    "goals_per90": 0.7,
    "assists_per90": 0.4,
    "shots_per90": 3.5,
    "dribbles_per90": 2.8,
    "passes_per90": 45.0,
    "tackles_per90": 0.8
  }
}

3. Advanced Usage Examples

Example 1: Complete Player Analysis Workflow

This Python example demonstrates how to search for a player, get their role prediction, and calculate a custom performance score. For more examples and starter code, check out our GitHub repository.

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://athlemetrics-player-score-predictor.p.rapidapi.com"
HEADERS = {
    "X-RapidAPI-Key": API_KEY,
    "X-RapidAPI-Host": "athlemetrics-player-score-predictor.p.rapidapi.com"
}

# Step 1: Search for a player
search_response = requests.get(
    f"{BASE_URL}/role-cluster/search",
    headers=HEADERS,
    params={"query": "Haaland", "limit": 5}
)
players = search_response.json()

# Step 2: Get role prediction
if players["results"]:
    record_id = players["results"][0]["record_id"]
    role_response = requests.get(
        f"{BASE_URL}/role-cluster/predict/record/{record_id}",
        headers=HEADERS
    )
    role_data = role_response.json()
    print(f"Player Role: {role_data['role_description']}")

# Step 3: Predict custom score
payload = {
    "kit_name": "attacker_core",
    "payload": {
        "goals_per90": 0.95,
        "assists_per90": 0.25,
        "shots_per90": 4.2
    },
    "model_type": "gb",
    "name": "Erling Haaland",
    "score_scale": "0-10"
}

score_response = requests.post(
    f"{BASE_URL}/base-score/predict",
    headers=HEADERS,
    json=payload
)
score_data = score_response.json()
print(f"Predicted Score: {score_data['overall_score']}/10")

Example 2: Batch Player Comparison

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://athlemetrics-player-score-predictor.p.rapidapi.com';
const headers = {
  'X-RapidAPI-Key': API_KEY,
  'X-RapidAPI-Host': 'athlemetrics-player-score-predictor.p.rapidapi.com'
};

async function compareForwards(playerNames) {
  const results = [];
  
  for (const name of playerNames) {
    const searchRes = await axios.get(
      `${BASE_URL}/role-cluster/search`,
      { headers, params: { query: name, limit: 1 } }
    );
    
    if (searchRes.data.results.length > 0) {
      const player = searchRes.data.results[0];
      
      const roleRes = await axios.get(
        `${BASE_URL}/role-cluster/predict/record/${player.record_id}`,
        { headers }
      );
      
      results.push({
        name: player.player_name,
        team: player.squad,
        role: roleRes.data.role_description,
        confidence: roleRes.data.confidence
      });
    }
  }
  
  return results;
}

// Usage
compareForwards(['Haaland', 'Mbappe', 'Kane'])
  .then(data => console.log(data));

Example 3: Dynamic Feature Input UI

# Get slider parameters for building a form
def get_kit_parameters(kit_name):
    params_data = {}
    
    # Get available fields for kit
    kits_response = requests.get(
        f"{BASE_URL}/base-score/kits",
        headers=HEADERS
    )
    
    kit_info = next(
        (k for k in kits_response.json()["kits"] if k["name"] == kit_name),
        None
    )
    
    if kit_info:
        for field in kit_info["fields"]:
            slider_response = requests.get(
                f"{BASE_URL}/base-score/slider-params",
                headers=HEADERS,
                params={"kit_name": kit_name, "alias": field}
            )
            params_data[field] = slider_response.json()
    
    return params_data

# Example usage
attacker_params = get_kit_parameters("attacker_core")
for field, params in attacker_params.items():
    print(f"{field}: min={params['min']}, max={params['max']}, default={params['default']}")

4. Best Practices

Rate Limiting

  • Monitor your API usage to stay within RapidAPI limits
  • Implement exponential backoff for retry logic
  • Cache responses when appropriate (especially for static data like kits and legends)

Error Handling

Always implement comprehensive error handling:

try:
    response = requests.post(
        f"{BASE_URL}/base-score/predict",
        headers=HEADERS,
        json=payload,
        timeout=10
    )
    response.raise_for_status()
    data = response.json()
except requests.exceptions.Timeout:
    print("Request timed out")
except requests.exceptions.HTTPError as e:
    print(f"HTTP error occurred: {e}")
except requests.exceptions.RequestException as e:
    print(f"Error occurred: {e}")

Data Validation

Validate inputs before sending requests:

def validate_per90_stat(value, stat_name):
    if value < 0:
        raise ValueError(f"{stat_name} cannot be negative")
    if value > 10:  # Sanity check
        print(f"Warning: {stat_name}={value} seems unusually high")
    return value

Optimize Payload Size

Good: Only include necessary fields in requests
payload = {
    "kit_name": "attacker_core",
    "payload": {"goals_per90": 0.65},
    "model_type": "gb"
}
Avoid: Including unnecessary fields
payload = {
    "kit_name": "attacker_core",
    "payload": {"goals_per90": 0.65},
    "model_type": "gb",
    "show_features": True,  # Only if needed
    "module_filter": "All"  # Use default when possible
}

5. Common Use Cases

🔍 Player Scouting

Combine search, role prediction, and score prediction to build a comprehensive scouting tool

📊 Performance Tracking

Monitor player development by comparing scores across multiple seasons

👥 Team Analysis

Aggregate player scores and roles to analyze team composition and balance

🧪 Custom Analytics

Use feature engineering to understand how raw stats translate to model features

💡 “What-If” Scenarios

Test hypothetical player improvements by adjusting feature inputs

🔬 Research Projects

Access sample datasets on Kaggle for academic research


6. Troubleshooting

Common Issues

Issue Solution
422 Validation Error Check that all required parameters are included and properly formatted
Empty search results Try broader search queries or check player name spelling
Unexpected score values Verify that per-90 statistics are normalized correctly and fall within reasonable ranges
Model not found Use /base-score/models to verify available model types

Additional Resources

🚀 API Playground

Test all endpoints interactively with RapidAPI’s built-in testing interface

Try it now →

💻 Code Examples

Python and JavaScript starter code, notebooks, and integration examples

View on GitHub →

📊 Sample Data

Explore real player stats and model predictions for research and testing

Download on Kaggle →

⚡ Web Platform

Access the full analytics platform with visualization tools and dashboards

Launch platform →

📖 Full Documentation

Complete technical documentation on rating models and role clustering

Read the docs →

🏠 Main Website

Learn more about Athlemetrics and explore our football analytics solutions

Visit site →

Leave a Comment

Your email address will not be published. Required fields are marked *

0

Subtotal