API Platform
Analyses algorithmiques temps réel pour LuckyJet et RocketQueen. Analysez le marché, récupérez les signaux et intégrez dans votre application en quelques lignes.
Developer quickstart
Obtenez votre première analyse en moins de 2 minutes. Créez votre compte, générez une clé et faites votre premier appel.
Commencer →const market = await fetch(
'https://allpredictor.com/api/v1/luckyjet/market',
{ headers: { 'X-API-Key': process.env.ALLPREDICTOR_KEY } }
).then(r => r.json());
if (market.level !== 'danger') {
const pred = await fetch(
'https://allpredictor.com/api/v1/luckyjet/predict',
{ headers: { 'X-API-Key': process.env.ALLPREDICTOR_KEY } }
).then(r => r.json());
console.log(`✅ Cible : ${pred.predicted_coef}x`);
}
Démarrage rapide
Trois étapes pour votre première analyse.
X-API-Key. Commencez par
/market pour vérifier les conditions avant /predict.
# 1. Vérifier le marché
curl https://allpredictor.com/api/v1/luckyjet/market \
-H "X-API-Key: ap_votre_clé"
# 2. Récupérer la analyse si marché safe/warn
curl https://allpredictor.com/api/v1/luckyjet/predict \
-H "X-API-Key: ap_votre_clé"
const BASE = 'https://allpredictor.com/api/v1';
const HEADERS = { 'X-API-Key': process.env.ALLPREDICTOR_KEY };
const market = await fetch(`${BASE}/luckyjet/market`,
{ headers: HEADERS }).then(r => r.json());
if (market.level !== 'danger') {
const pred = await fetch(`${BASE}/luckyjet/predict`,
{ headers: HEADERS }).then(r => r.json());
console.log(`✅ Cible : ${pred.predicted_coef}x à ${pred.bet_time}`);
}
import axios from 'axios';
const api = axios.create({
baseURL: 'https://allpredictor.com/api/v1',
headers: { 'X-API-Key': process.env.ALLPREDICTOR_KEY },
timeout: 5000,
});
const { data: market } = await api.get('/luckyjet/market');
if (market.level !== 'danger') {
const { data: pred } = await api.get('/luckyjet/predict');
console.log(pred.predicted_coef, pred.signal);
}
function apGet($path) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://allpredictor.com/api/v1{$path}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: ap_votre_clé'],
CURLOPT_TIMEOUT => 5,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
return $data;
}
$market = apGet('/luckyjet/market');
if ($market['level'] !== 'danger') {
$pred = apGet('/luckyjet/predict');
echo "Cible : {$pred['predicted_coef']}x\n";
}
import requests
BASE = "https://allpredictor.com/api/v1"
HDR = {"X-API-Key": "ap_votre_clé"}
market = requests.get(f"{BASE}/luckyjet/market",
headers=HDR, timeout=5).json()
if market["level"] != "danger":
pred = requests.get(f"{BASE}/luckyjet/predict",
headers=HDR, timeout=5).json()
print(f"Cible : {pred['predicted_coef']}x")
import 'package:dio/dio.dart';
final dio = Dio(BaseOptions(
baseUrl: 'https://allpredictor.com/api/v1',
headers: {'X-API-Key': 'ap_votre_clé'},
connectTimeout: const Duration(seconds: 5),
));
final market = (await dio.get('/luckyjet/market')).data;
if (market['level'] != 'danger') {
final pred = (await dio.get('/luckyjet/predict')).data;
print('Cible : \${pred["predicted_coef"]}x');
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final headers = {'X-API-Key': 'ap_votre_clé'};
final base = 'https://allpredictor.com/api/v1';
final mRes = await http.get(Uri.parse('$base/luckyjet/market'), headers: headers);
final market = jsonDecode(mRes.body);
if (market['level'] != 'danger') {
final pRes = await http.get(Uri.parse('$base/luckyjet/predict'), headers: headers);
final pred = jsonDecode(pRes.body);
print('Cible : \${pred["predicted_coef"]}x');
}
require 'net/http'
require 'json'
def ap_get(path)
uri = URI("https://allpredictor.com/api/v1#{path}")
req = Net::HTTP::Get.new(uri)
req['X-API-Key'] = 'ap_votre_clé'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
JSON.parse(res.body)
end
market = ap_get('/luckyjet/market')
if market['level'] != 'danger'
pred = ap_get('/luckyjet/predict')
puts "Cible : #{pred['predicted_coef']}x"
end
package main
import (
"encoding/json"; "fmt"; "io"; "net/http"; "time"
)
var client = &http.Client{Timeout: 5 * time.Second}
func apGet(path string) map[string]any {
req, _ := http.NewRequest("GET",
"https://allpredictor.com/api/v1"+path, nil)
req.Header.Set("X-API-Key", "ap_votre_clé")
res, _ := client.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
var d map[string]any
json.Unmarshal(b, &d)
return d
}
func main() {
m := apGet("/luckyjet/market")
if m["level"] != "danger" {
p := apGet("/luckyjet/predict")
fmt.Println("Cible :", p["predicted_coef"])
}
}
import okhttp3.*
import org.json.JSONObject
val client = OkHttpClient.Builder()
.callTimeout(5, java.util.concurrent.TimeUnit.SECONDS).build()
fun apGet(path: String): JSONObject {
val req = Request.Builder()
.url("https://allpredictor.com/api/v1$path")
.addHeader("X-API-Key", "ap_votre_clé").build()
return JSONObject(client.newCall(req).execute().body?.string()!!)
}
fun main() {
val market = apGet("/luckyjet/market")
if (market.getString("level") != "danger") {
val pred = apGet("/luckyjet/predict")
println("Cible : ${pred.getDouble("predicted_coef")}x")
}
}
import Foundation
func apGet(_ path: String) async throws -> [String: Any] {
var req = URLRequest(url: URL(string:
"https://allpredictor.com/api/v1\(path)")!)
req.setValue("ap_votre_clé", forHTTPHeaderField: "X-API-Key")
req.timeoutInterval = 5
let (data, _) = try await URLSession.shared.data(for: req)
return try JSONSerialization.jsonObject(with: data) as! [String: Any]
}
let market = try await apGet("/luckyjet/market")
if market["level"] as? String != "danger" {
let pred = try await apGet("/luckyjet/predict")
print("Cible : \(pred["predicted_coef"]!)x")
}
const https = require('https');
function apGet(path) {
return new Promise((resolve, reject) => {
const req = https.request({
hostname: 'allpredictor.com',
path: `/api/v1${path}`,
headers: { 'X-API-Key': process.env.ALLPREDICTOR_KEY },
}, res => {
let body = '';
res.on('data', d => body += d);
res.on('end', () => resolve(JSON.parse(body)));
});
req.on('error', reject);
req.end();
});
}
const market = await apGet('/luckyjet/market');
if (market.level !== 'danger') {
const pred = await apGet('/luckyjet/predict');
console.log(`Cible : ${pred.predicted_coef}x`);
}
Clé API — X-API-Key
Toutes les requêtes nécessitent votre clé API dans le header HTTP
X-API-Key. Sans clé valide, l'API retourne immédiatement un 401 Unauthorized.
| Propriété | Valeur |
|---|---|
| Header | X-API-Key |
| Préfixe | ap_ |
| Longueur | 50 caractères |
| Exemple | ap_a3f8b2c1d4e5f607891a2b3c4d5e6f7a8b9c0d1 |
process.env.ALLPREDICTOR_KEY). Une clé par environnement (dev/staging/prod)
pour permettre la révocation ciblée.curl https://allpredictor.com/api/v1/luckyjet/predict \
-H "X-API-Key: ap_votre_clé"
const headers = { 'X-API-Key': process.env.ALLPREDICTOR_KEY };
const res = await fetch(url, { headers });
if (res.status === 401)
throw new Error('Clé invalide — vérifiez votre dashboard');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-API-Key: ap_votre_clé']);
headers = {"X-API-Key": "ap_votre_clé"}
response = requests.get(url, headers=headers, timeout=5)
response.raise_for_status()
Options(headers: {'X-API-Key': 'ap_votre_clé'})
req.Header.Set("X-API-Key", "ap_votre_clé")
Analyse en temps réel
Retourne la analyse courante générée par le moteur algorithmique. Mettez en cache 30–60
s côté client via generated_at.
Champs de la réponse
| Champ | Type | Plage | Description |
|---|---|---|---|
| predicted_coef | float | ≥ 1.01 | Encaissez avant que le jeu atteigne ce multiplicateur. |
| confidence | integer | 0–100 | Score de confiance. <60 = peu fiable. |
| signal | enum | — | safe / warn / danger |
| bet_time | string | HH:MM | Heure locale optimale. |
| market_score | integer | 0–100 | Score synthétique du marché. |
| avg_recent_coef | float | — | Moyenne des 8 derniers rounds. |
| generated_at | datetime | ISO 8601 UTC | Timestamp de génération — base du cache. |
Signaux de marché
curl -X GET "https://allpredictor.com/api/v1/luckyjet/predict" \
-H "X-API-Key: ap_votre_clé"
const res = await fetch('https://allpredictor.com/api/v1/luckyjet/predict',
{ headers: { 'X-API-Key': process.env.ALLPREDICTOR_KEY } });
const data = await res.json();
if (data.signal === 'safe' && data.confidence >= 70)
console.log(`✅ Cible : ${data.predicted_coef}x à ${data.bet_time}`);
const { data } = await axios.get('/luckyjet/predict');
console.log(data.predicted_coef, data.signal);
$data = apGet('/luckyjet/predict');
echo "Signal: {$data['signal']} | Cible: {$data['predicted_coef']}x\n";
data = requests.get(
"https://allpredictor.com/api/v1/luckyjet/predict",
headers={"X-API-Key": "ap_votre_clé"}, timeout=5
).json()
print(f"Signal: {data['signal']} | Cible: {data['predicted_coef']}x")
final res = (await dio.get('/luckyjet/predict')).data;
print('Cible : \${res["predicted_coef"]}x');
final res = await http.get(
Uri.parse('https://allpredictor.com/api/v1/luckyjet/predict'),
headers: {'X-API-Key': 'ap_votre_clé'},
);
final data = jsonDecode(res.body);
data = ap_get('/luckyjet/predict')
puts "Cible : #{data['predicted_coef']}x"
p := apGet("/luckyjet/predict")
fmt.Println(p["predicted_coef"], p["signal"])
val pred = apGet("/luckyjet/predict")
println(pred.getString("signal"))
let pred = try await apGet("/luckyjet/predict")
print(pred["predicted_coef"]!, pred["signal"]!)
const pred = await apGet('/luckyjet/predict');
console.log(pred.predicted_coef, pred.signal);
{
"success": true,
"predicted_coef": 2.45,
"confidence": 87,
"bet_time": "14:32",
"market_score": 82,
"signal": "safe",
"avg_recent_coef": 2.31,
"generated_at": "2025-03-15T14:30:00.000Z"
}
Analyse du marché
État courant du marché. À appeler avant /predict.
| Champ | Type | Description |
|---|---|---|
| score | integer 0–100 | Score synthétique. Hausse sur tendance positive, chute sur pertes consécutives. |
| level | enum | safe ≥70 · warn 30–69 · danger <30 |
| reason | string | Explication naturelle affichable à l'utilisateur. |
| consecutive_losses | integer | Pertes consécutives. ≥2 = pause recommandée. |
| avg_coef | float | Coefficient moyen des derniers rounds. |
| trend | float | Tendance : positif = haussier, négatif = baissier. |
curl https://allpredictor.com/api/v1/luckyjet/market -H "X-API-Key: ap_votre_clé"
const m = await fetch('https://allpredictor.com/api/v1/luckyjet/market',{headers:{'X-API-Key':process.env.ALLPREDICTOR_KEY}}).then(r=>r.json());
$m = apGet('/luckyjet/market');
m = requests.get("https://allpredictor.com/api/v1/luckyjet/market",headers={"X-API-Key":"ap_votre_clé"}).json()
final m = (await dio.get('/luckyjet/market')).data;
m := apGet("/luckyjet/market")
{ "success":true, "score":82, "level":"safe", "reason":"Tendance haussière sur les 5 derniers rounds", "consecutive_losses":0, "avg_coef":2.87, "trend":0.42 }
Historique des analyses
Analyses passées avec coefficient réel constaté et taux de précision global.
| Paramètre | Type | Requis | Défaut | Max |
|---|---|---|---|---|
| limit | integer | optionnel | 50 | 200 |
curl "https://allpredictor.com/api/v1/luckyjet/history?limit=20" -H "X-API-Key: ap_votre_clé"
const { data, accuracy_percent } = await fetch('https://allpredictor.com/api/v1/luckyjet/history?limit=20',{headers:{'X-API-Key':process.env.ALLPREDICTOR_KEY}}).then(r=>r.json());
console.log(`Précision: ${accuracy_percent}%`);
$h=apGet('/luckyjet/history?limit=20'); echo "Précision: {$h['accuracy_percent']}%\n";
h = requests.get("https://allpredictor.com/api/v1/luckyjet/history",params={"limit":20},headers={"X-API-Key":"ap_votre_clé"}).json()
final h = (await dio.get('/luckyjet/history',queryParameters:{'limit':20})).data;
{ "success":true, "total":10, "accuracy_percent":87, "data":[{ "predicted_coef":3.20, "real_coef":3.86, "status":"ok", "timestamp":"2025-03-15T14:32:00Z" }] }
Coefficients en temps réel
Flux des vrais coefficients des derniers rounds avec statistiques agrégées. Paramètre
limit (défaut 20, max 100).
curl "https://allpredictor.com/api/v1/luckyjet/coefficients?limit=20" -H "X-API-Key: ap_votre_clé"
const{stats,data}=await fetch('https://allpredictor.com/api/v1/luckyjet/coefficients?limit=20',{headers:{'X-API-Key':process.env.ALLPREDICTOR_KEY}}).then(r=>r.json());
c=requests.get("https://allpredictor.com/api/v1/luckyjet/coefficients",params={"limit":20},headers={"X-API-Key":"ap_votre_clé"}).json()
$c=apGet('/luckyjet/coefficients?limit=20');
final c=(await dio.get('/luckyjet/coefficients',queryParameters:{'limit':20})).data;
RocketQueen — 4 endpoints
luckyjet par rocketqueen dans toutes les URLs. Schémas, paramètres et codes
d'erreur strictement identiques.
curl https://allpredictor.com/api/v1/rocketqueen/predict -H "X-API-Key: ap_votre_clé"
curl https://allpredictor.com/api/v1/rocketqueen/market -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/rocketqueen/history?limit=50" -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/rocketqueen/coefficients?limit=20" -H "X-API-Key: ap_votre_clé"
const BASE = 'https://allpredictor.com/api/v1';
const HDR = {'X-API-Key': process.env.ALLPREDICTOR_KEY};
const pred = await fetch(`${BASE}/rocketqueen/predict`,{headers:HDR}).then(r=>r.json());
$pred=apGet('/rocketqueen/predict');
$market=apGet('/rocketqueen/market');
pred=requests.get("https://allpredictor.com/api/v1/rocketqueen/predict",headers={"X-API-Key":"ap_votre_clé"}).json()
final pred=(await dio.get('/rocketqueen/predict')).data;
pred := apGet("/rocketqueen/predict")
Crash — 4 endpoints
luckyjet par crash dans toutes les URLs. Schémas, paramètres et codes
d'erreur strictement identiques.
curl https://allpredictor.com/api/v1/crash/predict -H "X-API-Key: ap_votre_clé"
curl https://allpredictor.com/api/v1/crash/market -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/crash/history?limit=50" -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/crash/coefficients?limit=20" -H "X-API-Key: ap_votre_clé"
const BASE = 'https://allpredictor.com/api/v1';
const HDR = {'X-API-Key': process.env.ALLPREDICTOR_KEY};
const pred = await fetch(`${BASE}/crash/predict`,{headers:HDR}).then(r=>r.json());
$pred=apGet('/crash/predict');
$market=apGet('/crash/market');
pred=requests.get("https://allpredictor.com/api/v1/crash/predict",headers={"X-API-Key":"ap_votre_clé"}).json()
final pred=(await dio.get('/crash/predict')).data;
pred := apGet("/crash/predict")
Astronaut — 4 endpoints
luckyjet par astronaut dans toutes les URLs. Schémas, paramètres et codes
d'erreur strictement identiques.
curl https://allpredictor.com/api/v1/astronaut/predict -H "X-API-Key: ap_votre_clé"
curl https://allpredictor.com/api/v1/astronaut/market -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/astronaut/history?limit=50" -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/astronaut/coefficients?limit=20" -H "X-API-Key: ap_votre_clé"
const BASE = 'https://allpredictor.com/api/v1';
const HDR = {'X-API-Key': process.env.ALLPREDICTOR_KEY};
const pred = await fetch(`${BASE}/astronaut/predict`,{headers:HDR}).then(r=>r.json());
$pred=apGet('/astronaut/predict');
$market=apGet('/astronaut/market');
pred=requests.get("https://allpredictor.com/api/v1/astronaut/predict",headers={"X-API-Key":"ap_votre_clé"}).json()
final pred=(await dio.get('/astronaut/predict')).data;
pred := apGet("/astronaut/predict")
Meta Crash — 4 endpoints
luckyjet par meta dans toutes les URLs. Schémas, paramètres et codes
d'erreur strictement identiques.
curl https://allpredictor.com/api/v1/meta/predict -H "X-API-Key: ap_votre_clé"
curl https://allpredictor.com/api/v1/meta/market -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/meta/history?limit=50" -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/meta/coefficients?limit=20" -H "X-API-Key: ap_votre_clé"
const BASE = 'https://allpredictor.com/api/v1';
const HDR = {'X-API-Key': process.env.ALLPREDICTOR_KEY};
const pred = await fetch(`${BASE}/meta/predict`,{headers:HDR}).then(r=>r.json());
$pred=apGet('/meta/predict');
$market=apGet('/meta/market');
pred=requests.get("https://allpredictor.com/api/v1/meta/predict",headers={"X-API-Key":"ap_votre_clé"}).json()
final pred=(await dio.get('/meta/predict')).data;
pred := apGet("/meta/predict")
Tropicana — 4 endpoints
luckyjet par tropicana dans toutes les URLs. Schémas, paramètres et codes
d'erreur strictement identiques.
curl https://allpredictor.com/api/v1/tropicana/predict -H "X-API-Key: ap_votre_clé"
curl https://allpredictor.com/api/v1/tropicana/market -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/tropicana/history?limit=50" -H "X-API-Key: ap_votre_clé"
curl "https://allpredictor.com/api/v1/tropicana/coefficients?limit=20" -H "X-API-Key: ap_votre_clé"
const BASE = 'https://allpredictor.com/api/v1';
const HDR = {'X-API-Key': process.env.ALLPREDICTOR_KEY};
const pred = await fetch(`${BASE}/tropicana/predict`,{headers:HDR}).then(r=>r.json());
$pred=apGet('/tropicana/predict');
$market=apGet('/tropicana/market');
pred=requests.get("https://allpredictor.com/api/v1/tropicana/predict",headers={"X-API-Key":"ap_votre_clé"}).json()
final pred=(await dio.get('/tropicana/predict')).data;
pred := apGet("/tropicana/predict")
Valider une clé API
Vérifie si une clé est active et retourne plan et quota restant. À appeler au démarrage de votre bot.
curl -X POST https://allpredictor.com/api/v1/validate-key -H "X-API-Key: ap_votre_clé"
const{valid,plan,requests_remaining}=await fetch('https://allpredictor.com/api/v1/validate-key',{method:'POST',headers:{'X-API-Key':process.env.ALLPREDICTOR_KEY}}).then(r=>r.json());
if(!valid)throw new Error('Clé invalide');
console.log(`Plan ${plan} — ${requests_remaining??'∞'} req`);
$ch=curl_init();curl_setopt_array($ch,[CURLOPT_URL=>"https://allpredictor.com/api/v1/validate-key",CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_HTTPHEADER=>["X-API-Key: ap_votre_clé"]]);
$r=json_decode(curl_exec($ch),true);curl_close($ch);
if(!$r['valid'])die("Clé invalide\n");echo"Plan {$r['plan']}\n";
r=requests.post("https://allpredictor.com/api/v1/validate-key",headers={"X-API-Key":"ap_votre_clé"}).json()
if not r["valid"]:raise ValueError("Clé invalide")
print(f"Plan {r['plan']}")
final r=(await dio.post('/validate-key')).data;
if(!r['valid'])throw Exception('Clé invalide');
uri=URI('https://allpredictor.com/api/v1/validate-key');req=Net::HTTP::Post.new(uri);req['X-API-Key']='ap_votre_clé'
r=JSON.parse(Net::HTTP.start(uri.hostname,uri.port,use_ssl:true){|h|h.request(req)}.body)
raise "Clé invalide" unless r['valid']
req,_:=http.NewRequest("POST","https://allpredictor.com/api/v1/validate-key",nil);req.Header.Set("X-API-Key","ap_votre_clé")
val r=JSONObject(OkHttpClient().newCall(Request.Builder().url("https://allpredictor.com/api/v1/validate-key").post(RequestBody.create(null,ByteArray(0))).addHeader("X-API-Key","ap_votre_clé").build()).execute().body?.string()?:"")
var req=URLRequest(url:URL(string:"https://allpredictor.com/api/v1/validate-key")!);req.httpMethod="POST";req.setValue("ap_votre_clé",forHTTPHeaderField:"X-API-Key")
{ "valid":true, "plan":"free", "requests_used":153, "requests_remaining":47, "key_name":"Mon Bot Telegram" }
{ "valid":true, "plan":"pro", "requests_used":4821, "requests_remaining":null, "key_name":"Production API" }
Codes d'erreur
Erreurs HTTP standards avec corps JSON structuré.
limit hors plage). Vérifiez les types et
plages.X-API-Key absent, mal formé ou clé révoquée. Régénérez depuis le
dashboard.{ "success":false, "error":"Clé API invalide ou expirée." }
Rate limiting & quotas
Quotas mensuels par clé API, remis à zéro le 1er de chaque mois à minuit UTC.
POST /validate-key → requests_remaining pour connaître votre solde.
Spécification OpenAPI
La spécification complète de l'API est disponible au format OpenAPI 3.0. Importez-la directement dans Postman, Insomnia, Swagger UI ou tout autre client REST compatible.
| Format | URL | Usage |
|---|---|---|
| OpenAPI 3.0 YAML | /openapi-enriched.yaml |
Postman, Insomnia, génération de SDK |
| OpenAPI 3.0 JSON | /openapi.json |
Intégrations programmatiques |
| Swagger UI | /api/v1/docs |
Exploration interactive en navigateur |
Sandbox & clés de test
Testez votre intégration sans consommer votre quota mensuel. L'environnement sandbox retourne des données simulées réalistes avec les mêmes schémas de réponse que la production.
ap_test_ pour
générer une clé sandbox depuis votre dashboard. Les requêtes sandbox ne sont jamais comptabilisées dans
votre quota.| Environnement | Base URL | Quota |
|---|---|---|
| Production | https://allpredictor.com/api/v1 |
Selon votre plan |
| Sandbox | https://sandbox.allpredictor.com/api/v1 |
Illimité — données simulées |
# Sandbox — utiliser la base URL sandbox avec votre clé test
curl https://sandbox.allpredictor.com/api/v1/luckyjet/predict -H "X-API-Key: ap_test_votre_clé_sandbox"
const BASE = process.env.NODE_ENV === 'production'
? 'https://allpredictor.com/api/v1'
: 'https://sandbox.allpredictor.com/api/v1';
const KEY = process.env.NODE_ENV === 'production'
? process.env.ALLPREDICTOR_KEY
: process.env.ALLPREDICTOR_TEST_KEY;
const data = await fetch(`${BASE}/luckyjet/predict`,
{ headers: { 'X-API-Key': KEY } }).then(r => r.json());
import os, requests
BASE = ("https://allpredictor.com/api/v1"
if os.getenv("ENV") == "production"
else "https://sandbox.allpredictor.com/api/v1")
KEY = (os.getenv("ALLPREDICTOR_KEY")
if os.getenv("ENV") == "production"
else os.getenv("ALLPREDICTOR_TEST_KEY"))
data = requests.get(f"{BASE}/luckyjet/predict",
headers={"X-API-Key": KEY}).json()
SDKs officiels
Des packages officiels sont disponibles pour les principales plateformes. Ils gèrent automatiquement l'authentification, les retries et la désérialisation des réponses.
npm install allpredictor-js
# Utilisation
import { AllPredictor } from 'allpredictor-js';
const client = new AllPredictor({ apiKey: process.env.ALLPREDICTOR_KEY });
const pred = await client.luckyjet.predict();
console.log(pred.predicted_coef, pred.signal);
pip install allpredictor-python
# Utilisation
from allpredictor import AllPredictor
client = AllPredictor(api_key="ap_votre_clé")
pred = client.luckyjet.predict()
print(pred.predicted_coef, pred.signal)
flutter pub add allpredictor_dart
// Utilisation
import 'package:allpredictor_dart/allpredictor_dart.dart';
final client = AllPredictor(apiKey: 'ap_votre_clé');
final pred = await client.luckyjet.predict();
print(pred.predictedCoef);
composer require allpredictor/php-sdk
// Utilisation
use AllPredictor\Client;
$client = new Client('ap_votre_clé');
$pred = $client->luckyjet()->predict();
echo $pred->predictedCoef;
WebSocket & Server-Sent Events
Pour éviter le polling HTTP intensif, l'API propose deux modes de connexion persistante : WebSocket (bidirectionnel) et SSE (flux unidirectionnel, compatible navigateur).
| Protocole | URL | Usage recommandé |
|---|---|---|
| WebSocket | wss://allpredictor.com/ws/v1 |
Bots, apps mobiles, intégrations serveur |
| SSE | https://allpredictor.com/api/v1/stream |
Navigateur, dashboards React/Vue |
const ws = new WebSocket(
`wss://allpredictor.com/ws/v1?api_key=${process.env.ALLPREDICTOR_KEY}`
);
ws.addEventListener('open', () => {
// S'abonner aux signaux LuckyJet
ws.send(JSON.stringify({ subscribe: ['luckyjet.signal'] }));
});
ws.addEventListener('message', (event) => {
const { type, data } = JSON.parse(event.data);
if (type === 'luckyjet.signal') {
console.log(`Signal: ${data.signal} | Cible: ${data.predicted_coef}x`);
}
});
// Server-Sent Events — compatible navigateur sans lib
const url = `https://allpredictor.com/api/v1/stream/luckyjet`
+ `?api_key=${API_KEY}`;
const es = new EventSource(url);
es.addEventListener('signal', (e) => {
const data = JSON.parse(e.data);
console.log(data.signal, data.predicted_coef);
});
es.addEventListener('error', () => es.close());
import asyncio, websockets, json, os
async def listen():
uri = (f"wss://allpredictor.com/ws/v1"
f"?api_key={os.getenv('ALLPREDICTOR_KEY')}")
async with websockets.connect(uri) as ws:
await ws.send(json.dumps({"subscribe": ["luckyjet.signal"]}))
async for msg in ws:
data = json.loads(msg)
print(data["data"]["signal"], data["data"]["predicted_coef"])
asyncio.run(listen())
import 'dart:convert';
import 'package:web_socket_channel/web_socket_channel.dart';
final channel = WebSocketChannel.connect(
Uri.parse('wss://allpredictor.com/ws/v1?api_key=ap_votre_clé'),
);
channel.sink.add(jsonEncode({'subscribe': ['luckyjet.signal']}));
channel.stream.listen((msg) {
final data = jsonDecode(msg)['data'];
print('\${data["signal"]} | \${data["predicted_coef"]}x');
});
Webhooks
Configurez une URL de webhook pour être notifié passivement sans maintenir de connexion
ouverte. AllPredictor envoie une requête POST vers votre endpoint à chaque changement de signal
important.
| Événement | Déclencheur |
|---|---|
| signal.changed | Le signal passe de safe → warn, warn → danger,
etc. |
| market.danger | Le marché bascule soudainement en danger. |
| analyse.ready | Une nouvelle analyse est disponible après chaque round. |
// POST vers votre URL — header X-AllPredictor-Signature inclus
{
"event": "market.danger",
"game": "luckyjet",
"timestamp": "2025-03-15T14:55:00Z",
"data": {
"previous_level": "warn",
"current_level": "danger",
"score": 18,
"reason": "3 pertes consécutives"
}
}
// Express.js — recevoir le webhook
app.post('/webhook/allpredictor', (req, res) => {
const sig = req.headers['x-allpredictor-signature'];
// Vérifier la signature HMAC-SHA256
const expected = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(JSON.stringify(req.body))
.digest('hex');
if (sig !== expected)
return res.status(401).send('Invalid signature');
const { event, data } = req.body;
if (event === 'market.danger')
console.log('⛔ Danger détecté !', data.reason);
res.sendStatus(200);
});
$payload = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_ALLPREDICTOR_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $payload,
getenv('WEBHOOK_SECRET'));
if (!hash_equals($expected, $sig))
http_response_code(401) and exit('Invalid');
$data = json_decode($payload, true);
echo "Événement: {$data['event']}
";
import hmac, hashlib
from flask import Flask, request, abort
app = Flask(__name__)
@app.route('/webhook/allpredictor', methods=['POST'])
def webhook():
sig = request.headers.get('X-AllPredictor-Signature', '')
expected = hmac.new(
os.getenv('WEBHOOK_SECRET').encode(),
request.data, hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected, sig):
abort(401)
data = request.json
print(f"Événement: {data['event']}")
return '', 200
Pagination
Les endpoints /history et /coefficients supportent la
pagination par curseur pour parcourir de grands volumes de données sans surcharger la réponse.
| Paramètre | Type | Description |
|---|---|---|
| limit | integer | Nombre de résultats par page (défaut 50, max 200). |
| cursor | string | Curseur opaque retourné par la réponse précédente. Passez-le tel quel pour la page suivante. |
| offset | integer | Alternative au curseur — décalage en nombre de résultats. Non recommandé pour les grands volumes. |
{
"success": true,
"total": 200,
"cursor": "eyJpZCI6MTIzNH0",
"has_more": true,
"data": [ /* ... */ ]
}
async function fetchAll(game) {
const BASE = 'https://allpredictor.com/api/v1';
const HDR = { 'X-API-Key': process.env.ALLPREDICTOR_KEY };
let cursor = null, all = [];
do {
const qs = cursor ? `?cursor=${cursor}&limit=50` : '?limit=50';
const page = await fetch(`${BASE}/${game}/history${qs}`,
{ headers: HDR }).then(r => r.json());
all.push(...page.data);
cursor = page.has_more ? page.cursor : null;
} while (cursor);
return all;
}
def fetch_all(game, headers):
base = f"https://allpredictor.com/api/v1/{game}/history"
cursor, all_data = None, []
while True:
params = {"limit": 50}
if cursor: params["cursor"] = cursor
page = requests.get(base, params=params,
headers=headers).json()
all_data.extend(page["data"])
if not page.get("has_more"): break
cursor = page["cursor"]
return all_data
Nullabilité & CORS
Champs nullables
Certains champs peuvent retourner null dans des
conditions spécifiques. Traitez-les toujours comme null-safe dans votre code.
| Champ | Endpoint | Nullable si… |
|---|---|---|
| bet_time | /predict |
Aucune heure optimale calculable (marché instable). |
| requests_remaining | /validate-key |
Plan Pro — quota illimité. |
| cursor | /history |
Dernière page — plus de résultats disponibles. |
| avg_recent_coef | /predict |
Moins de 3 rounds historiques disponibles. |
Politique CORS
Origin sont acceptés depuis n'importe quel domaine.
Cependant, pour des raisons de sécurité, il est fortement déconseillé d'exposer votre clé API côté client —
utilisez un proxy serveur.| Header CORS | Valeur |
|---|---|
| Access-Control-Allow-Origin | * |
| Access-Control-Allow-Methods | GET, POST, OPTIONS |
| Access-Control-Allow-Headers | X-API-Key, Content-Type, Accept |
Statut & Uptime
Consultez la page de statut en temps réel pour connaître l'état de l'API, les incidents en cours et l'historique de disponibilité.
| Composant | Statut actuel | Uptime 30j |
|---|---|---|
| API REST | Opérationnel | 98.7% |
| WebSocket | Opérationnel | 97.9% |
| Sandbox | Opérationnel | 99.1% |
Changelog
Historique des mises à jour et évolutions de l'API AllPredictor.