Express Entry Predictor API

Access Express Entry draw data and predictions programmatically through our REST API.

Base URL
https://expressentry.xeradb.com/api/
✨ Features
  • Real-time Express Entry draw data
  • AI-powered predictions with confidence intervals
  • Historical trends and statistics
  • Category-specific filtering
  • JSON responses for easy integration
🚀 Quick Start
curl https://expressentry.xeradb.com/api/predict/

🔐 Authentication

Currently, all API endpoints are publicly accessible and do not require authentication. For production use, consider implementing API keys.

Note: This API is provided for educational and research purposes. Please use responsibly and respect rate limits.

💪 Health Check

Check if the API is running and accessible. This endpoint provides system status and basic statistics.

API Health Status

GET
/api/health/

Returns API health status, database connectivity, and basic system information.

Response:
{
  "status": "healthy",
  "timestamp": "2025-08-02T12:08:32+00:00",
  "version": "1.0",
  "database": {
    "connected": true,
    "draws_count": 358,
    "categories_count": 14,
    "predictions_count": 37
  },
  "endpoints": {
    "predictions": "/api/predict/",
    "categories": "/api/categories/",
    "draws": "/api/draws/",
    "statistics": "/api/stats/",
    "documentation": "/api-docs/"
  }
}

🔮 Predictions API

Get AI-powered predictions for upcoming Express Entry draws with 95% confidence intervals.

Understanding Confidence Intervals

95% Confidence Intervals: Each prediction includes a range showing where we're 95% confident the actual CRS score will fall.

Display Format: 517 (420–613) means the predicted score is 517, with 95% confidence it will be between 420-613.

Interpretation: Wider intervals indicate higher uncertainty, typically for categories with limited historical data.

Get All Predictions

GET
/api/predict/

Retrieve predictions for all active categories with available data.

{
  "success": true,
  "total_categories": 7,
  "generated_at": "2025-08-02T12:08:32+00:00",
  "data": [
    {
      "category_id": 3,
      "category_name": "Canadian Experience Class",
      "category_description": null,
      "last_updated": "2025-08-02T12:05:32+00:00",
      "recent_draws": [
        {
          "date": "2025-07-08",
          "crs_score": 518,
          "invitations": 3000
        }
      ],
      "predictions": [
        {
          "rank": 1,
          "predicted_date": "2025-08-16",
          "predicted_crs_score": 517,
          "predicted_invitations": 2800,
          "confidence_score": 75.2,
          "model_used": "Bayesian Regression",
          "uncertainty_range": {
            "min": 420,
            "max": 613,
            "confidence_level": 95,
            "margin_of_error": 96.5
          }
        }
      ]
    }
  ]
}
# Python example
import requests

response = requests.get('https://expressentry.xeradb.com/api/predict/')
data = response.json()

if data['success']:
    for category in data['data']:
        print(f"Category: {category['category_name']}")
        for pred in category['predictions'][:3]:  # First 3 predictions
            print(f"  {pred['predicted_date']}: CRS {pred['predicted_crs_score']} (±{pred['confidence_score']:.1f}%)")

# JavaScript example
fetch('https://expressentry.xeradb.com/api/predict/')
  .then(response => response.json())
  .then(data => {
    if (data.success) {
      data.data.forEach(category => {
        console.log(`${category.category_name}: ${category.predictions[0].predicted_crs_score}`);
      });
    }
  });

Get Category-Specific Predictions

GET
/api/predict/{category_id}/

Get predictions for a specific category.

Parameter Type Description
category_id integer ID of the Express Entry category

📂 Categories API

Manage and retrieve Express Entry draw categories.

List All Categories

GET
/api/categories/

Retrieve all active Express Entry categories.

Response:
[
  {
    "id": 3,
    "name": "Canadian Experience Class",
    "description": null,
    "is_active": true,
    "created_at": "2024-01-01T00:00:00Z",
    "total_draws": 45,
    "avg_crs_score": 519.2,
    "latest_draw_date": "2025-07-08"
  }
]

Get Category Statistics

GET
/api/categories/{id}/statistics/

Get detailed statistics for a specific category.

Get Category Predictions

GET
/api/categories/{id}/predictions/

Get all predictions for a specific category.

📊 Draws API

Access historical Express Entry draw data.

List All Draws

GET
/api/draws/

Retrieve Express Entry draws with optional filtering.

Parameter Type Description
category integer Filter by category ID
start_date date Filter draws after this date (YYYY-MM-DD)
end_date date Filter draws before this date (YYYY-MM-DD)
Example Request:
GET /api/draws/?category=3&start_date=2024-01-01

Get Recent Draws

GET
/api/draws/recent/

Get draws from the last 30 days.

📈 Statistics API

Get comprehensive statistics and dashboard data.

Get Dashboard Statistics

GET
/api/stats/

Retrieve overall system statistics including totals, averages, and recent activity.

Response:
{
  "total_draws": 358,
  "categories_count": 14,
  "total_predictions": 37,
  "avg_crs_score": 529.6,
  "avg_invitations": 2247,
  "min_crs_score": 75,
  "max_crs_score": 818,
  "recent_draws": [...],
  "next_predictions": [...],
  "last_updated": "2025-08-02T12:05:35+00:00"
}

🤖 Models API

Information about the AI prediction models used in the system.

List Prediction Models

GET
/api/models/

Get information about available prediction models and their performance.

💻 Code Examples

Python (requests)

import requests
import json

# Base URL
base_url = "https://expressentry.xeradb.com/api"

# Get all predictions
def get_predictions():
    response = requests.get(f"{base_url}/predict/")
    return response.json()

# Get category statistics
def get_category_stats(category_id):
    response = requests.get(f"{base_url}/categories/{category_id}/statistics/")
    return response.json()

# Get recent draws
def get_recent_draws():
    response = requests.get(f"{base_url}/draws/recent/")
    return response.json()

# Example usage
predictions = get_predictions()
if predictions['success']:
    for category in predictions['data']:
        print(f"{category['category_name']}: {category['predictions'][0]['predicted_crs_score']}")

JavaScript (fetch)

const BASE_URL = "https://expressentry.xeradb.com/api";

// Get all predictions
async function getPredictions() {
    const response = await fetch(`${BASE_URL}/predict/`);
    return await response.json();
}

// Get category statistics
async function getCategoryStats(categoryId) {
    const response = await fetch(`${BASE_URL}/categories/${categoryId}/statistics/`);
    return await response.json();
}

// Get recent draws
async function getRecentDraws() {
    const response = await fetch(`${BASE_URL}/draws/recent/`);
    return await response.json();
}

// Example usage
getPredictions().then(data => {
    if (data.success) {
        data.data.forEach(category => {
            console.log(`${category.category_name}: ${category.predictions[0].predicted_crs_score}`);
        });
    }
});

cURL Commands

# Get all predictions
curl -X GET "https://expressentry.xeradb.com/api/predict/"

# Get predictions for specific category
curl -X GET "https://expressentry.xeradb.com/api/predict/3/"

# Get dashboard statistics
curl -X GET "https://expressentry.xeradb.com/api/stats/"

# Get draws with filters
curl -X GET "https://expressentry.xeradb.com/api/draws/?category=3&start_date=2024-01-01"

# Get category statistics
curl -X GET "https://expressentry.xeradb.com/api/categories/3/statistics/"

⚡ Rate Limits & Best Practices

Current Limits
  • No rate limiting currently implemented
  • Cached responses for better performance
  • Please use responsibly

Best Practices

  • Cache responses: Data updates daily, so cache for at least 1 hour
  • Use filters: Filter by date range and category to reduce response size
  • Error handling: Always check the `success` field in responses
  • Respect the system: Don't make excessive requests

Error Responses

{
  "success": false,
  "error": "Error description",
  "data": []
}