Manual Setup
Envoyez vos logs HTTP bruts — nous détectons automatiquement les bots IA. Pas besoin de filtrer côté client.
Envoyez simplement tous vos logs HTTP. Robot Speed identifie automatiquement les bots IA (ChatGPT, Perplexity, Claude, etc.), filtre le bruit (feeds RSS, fichiers statiques, bots de training), et ne stocke que les vraies citations. Aucun filtrage côté client requis.
Endpoint
POST https://www.robot-speed.com/api/ai-bot-visitsAuthentification
X-API-Key: rs_your_api_key_hereTrouvez votre clé API dans votre dashboard : Settings → API
Format du payload
Envoyez un tableau JSON de logs HTTP. Taille max : 50 MB par requête. Vous pouvez envoyer des lots de plusieurs événements.
Champs par événement
| Field | Type | Description |
|---|---|---|
| timestamp | string | ISO 8601 format |
| status_code | number | HTTP status code (200, 301, etc.) |
| request_method | string | GET, POST, etc. |
| request_path | string | URI path (e.g. /blog/my-article) |
| query_string | string | null | Paramètres de requête (nullable) |
| content_type | string | MIME type (text/html) |
| client_ip | string | IP du visiteur (hashé côté serveur) |
| hostname | string | Nom de domaine |
| user_agent | string | User-agent du visiteur |
| referrer | string | null | HTTP referer (nullable) |
Ce qu'on fait avec vos logs
- 1.On détecte les bots IA par le user-agent (ChatGPT, Perplexity, Claude, Gemini, Mistral, Grok, etc.)
- 2.On filtre les bots de training (GPTBot, Bytespider, etc.) — seuls les bots de citation sont gardés
- 3.On filtre le bruit (feeds RSS, fichiers statiques, pages de tags)
- 4.On déduplique (même bot + même page = 1 seule entrée par heure)
- 5.On hash les IPs pour la confidentialité — aucune donnée personnelle stockée
- 6.Les résultats apparaissent dans votre dashboard
Réponse
{
"ok": true,
"processed": 150, // total logs received
"stored": 3, // AI bot visits stored
"filtered": {
"non_bot": 142, // regular visitors (ignored)
"noise": 2, // feeds, static files (ignored)
"training": 2, // training bots like GPTBot (ignored)
"dedup": 1 // duplicates within 1 hour (ignored)
}
}cURL
curl -X POST https://www.robot-speed.com/api/ai-bot-visits \
-H "Content-Type: application/json" \
-H "X-API-Key: rs_your_api_key_here" \
-d '[
{
"timestamp": "2026-04-03T14:30:00.000Z",
"status_code": 200,
"request_method": "GET",
"request_path": "/blog/my-article",
"query_string": null,
"content_type": "text/html",
"client_ip": "192.168.0.10",
"hostname": "mysite.com",
"user_agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko)...",
"referrer": "https://www.google.com"
}
]'Node.js / Express
// Express/Node.js middleware — send ALL requests, we filter
app.use((req, res, next) => {
// Fire-and-forget: send raw log to Robot Speed
fetch('https://www.robot-speed.com/api/ai-bot-visits', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.RS_API_KEY,
},
body: JSON.stringify({
timestamp: new Date().toISOString(),
status_code: res.statusCode || 200,
request_method: req.method,
request_path: req.path,
query_string: req.url.includes('?') ? req.url.split('?')[1] : null,
content_type: res.getHeader('content-type') || 'text/html',
client_ip: req.ip || req.headers['x-forwarded-for'],
hostname: req.hostname,
user_agent: req.headers['user-agent'] || '',
referrer: req.headers['referer'] || null,
}),
}).catch(() => {});
next();
});PHP
// PHP — add to your index.php or functions.php
// Sends ALL requests, Robot Speed filters AI bots server-side
$data = json_encode([
'timestamp' => date('c'),
'status_code' => http_response_code(),
'request_method' => $_SERVER['REQUEST_METHOD'],
'request_path' => strtok($_SERVER['REQUEST_URI'], '?'),
'query_string' => $_SERVER['QUERY_STRING'] ?? null,
'content_type' => 'text/html',
'client_ip' => $_SERVER['REMOTE_ADDR'] ?? '',
'hostname' => $_SERVER['HTTP_HOST'] ?? '',
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
'referrer' => $_SERVER['HTTP_REFERER'] ?? null,
]);
$ch = curl_init('https://www.robot-speed.com/api/ai-bot-visits');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . getenv('RS_API_KEY'),
],
CURLOPT_TIMEOUT => 2,
CURLOPT_RETURNTRANSFER => true,
]);
curl_exec($ch);
curl_close($ch);Python
# Python / Django / Flask middleware
# Sends ALL requests, Robot Speed filters AI bots server-side
import requests, datetime
def log_request(request, response):
try:
requests.post(
'https://www.robot-speed.com/api/ai-bot-visits',
json={
'timestamp': datetime.datetime.utcnow().isoformat() + 'Z',
'status_code': response.status_code,
'request_method': request.method,
'request_path': request.path,
'query_string': request.META.get('QUERY_STRING'),
'content_type': response.get('Content-Type', 'text/html'),
'client_ip': request.META.get('REMOTE_ADDR', ''),
'hostname': request.get_host(),
'user_agent': request.META.get('HTTP_USER_AGENT', ''),
'referrer': request.META.get('HTTP_REFERER'),
},
headers={'X-API-Key': os.environ['RS_API_KEY']},
timeout=2,
)
except:
pass