API InvestigUser
Lancez toutes les recherches disponibles sur le site depuis vos propres scripts. L'API repose sur deux appels : POST pour créer la recherche, GET pour récupérer le résultat quand il est prêt.
Authentification
Chaque requête doit transporter votre clé API dans l'en-tête HTTP suivant :
Authorization: Bearer VOTRE_CLÉ_API
Alternative acceptée : X-API-Key: VOTRE_CLÉ_API
Quotas
Le quota est partagé entre le site web et l'API. Chaque recherche — quelle que soit son origine — est décomptée du même plafond journalier. La réponse de POST /search contient le champ quota_remaining (ou null si illimité).
POST Lancer une recherche
Crée une recherche et retourne immédiatement un request_id. Le backend traite la demande de manière asynchrone (jusqu'à 1–2 min selon la plateforme). Réponse HTTP 202.
Corps de la requête — JSON ou form-data
| Paramètre | Type | Description | |
|---|---|---|---|
| searchType | string | requis | Type de recherche (voir Types de recherche) |
| searchValue | string | requis | La valeur à rechercher (pseudo, email, numéro…) |
| platforms | array | requis | Liste des plateformes à interroger (voir Plateformes) |
| maxPosts | integer | optionnel | Nombre max de posts à récupérer (X.com, TikTok…) |
| country_code | string | optionnel | Code pays ISO 2 lettres (ex: FR) — utilisé pour certaines recherches téléphoniques |
| facebook_url | string | optionnel | URL du profil Facebook (si connue, améliore la précision) |
| facebook_id | string | optionnel | ID numérique Facebook |
| urlsToScan | array | optionnel | URLs supplémentaires à inclure dans le scan (Wayback, domaine…) |
Cas spécial : recherche societe
Pour searchType = "societe", searchValue peut être un objet JSON avec les champs suivants :
{ "searchType": "societe", "searchValue": { "name": "Acme Corp", // requis "city": "Paris", // optionnel "department": "75", // optionnel "country": "FR" // optionnel }, "platforms": ["linkedin_societe"] }
Réponse 202
{ "success": true, "request_id": 4821, "status": "pending", "quota_remaining": 4, // null si illimité "result_url": "https://investiguser.com/dashboard_web/investiguser_online/api/v1/result.php?request_id=4821", "message": "Recherche acceptée. Interrogez result_url jusqu'à status=completed." }
GET Récupérer le résultat
| Paramètre | Type | Description | |
|---|---|---|---|
| request_id | integer | requis | L'identifiant retourné par POST /search |
| wait | integer | optionnel | Durée de long-poll en secondes (0–25). Recommandé : 25. Le serveur maintient la connexion ouverte jusqu'à ce que le résultat soit prêt ou que le délai soit atteint. Évite de répéter les appels. |
Statuts possibles
La recherche est en file d'attente, le worker ne l'a pas encore traitée.
Le worker traite activement la recherche.
Résultats disponibles dans le champ results[].
La recherche a échoué côté backend. Réessayez ou signalez-le.
Réponse completed
{ "success": true, "request_id": 4821, "status": "completed", "search_type": "username", "platforms": ["twitter", "instagram"], "created_at": "2025-06-14 18:30:00", "results": [ { "platform": "twitter", "data": { ... }, // objet JSON spécifique à chaque plateforme "created_at": "2025-06-14 18:31:12" } ] }
pending ou processing, la réponse contient "retry_after": 5 — relancez l'appel après ce délai. Avec wait=25, vous n'aurez en général que 1–2 appels à faire.Types de recherche
Valeur à passer dans searchType. La valeur passée dans searchValue doit correspondre au type choisi.
username Pseudo / Login
- Nom d'utilisateur exact sur les réseaux
- Exemple :
"elonmusk"
twitter instagram tiktok snapchat telegram userscan marketplace userweb AllInOne_loginemail Adresse email
- Email complet avec domaine
- Exemple :
"[email protected]"
emailscan googlescan linkedinscan waybackscan AllInOne_emailphone Téléphone
- Format international recommandé
- Exemple :
"33612345678" - Optionnel :
country_code="FR"
telegram whatsapp AllInOne_phoneidentity Nom & Prénom
- Prénom Nom séparés par un espace
- Exemple :
"Jean Claude Dupont"
linkedin linkedin_people facebook identityscan AllInOne_identityip Adresse IP
- IPv4 ou IPv6
- Exemple :
"90.84.12.34"
ipscandomain Nom de domaine
- Sans
https://ni slash final - Exemple :
"exemple.com"
domainscan waybackscanbtc Adresse Bitcoin
- Adresse wallet BTC
- Exemple :
"1A1zP1eP5QGefi2..."
btcsociete Société / Entreprise
- Nom de l'entreprise (+ ville, département, pays en optionnel)
- Passer un objet JSON dans
searchValue
linkedin_societe linkedin_soc_ppl AllInOne_societePlateformes
Valeurs à passer dans le tableau platforms[]. Vous pouvez en passer plusieurs à la fois pour une même recherche.
Réseaux sociaux
Moteurs de recherche & web
Technique
X.com avancé
All in One GOV / Donateur uniquement
telegram et whatsapp utilisent leurs API officielles. Toutes les autres fonctionnent par scripts directs — sans API tierce.Codes d'erreur
| HTTP | error | Cause & solution |
|---|---|---|
| 200 | — | Succès. |
| 202 | — | Recherche acceptée, résultat à venir. |
| 401 | missing_api_key / invalid_api_key | Clé absente ou incorrecte. Vérifiez l'en-tête Authorization: Bearer … |
| 403 | api_disabled | L'API n'est pas activée sur votre compte → MonCompte. |
| 403 | premium_required | Vous avez demandé une plateforme All in One réservée aux GOV/Donateurs. |
| 403 | forbidden | Le request_id ne vous appartient pas. |
| 404 | not_found | request_id inexistant (ou purgé après 8 h). |
| 405 | method_not_allowed | Mauvaise méthode HTTP. |
| 422 | invalid_params / unknown_platform | Paramètre manquant ou plateforme inconnue. |
| 429 | quota_exceeded | Limite de 5 recherches/jour atteinte. Revient à minuit (heure serveur). |
| 500 | db_unavailable | Erreur interne. Réessayez dans quelques secondes. |
Format de toutes les erreurs
{ "success": false, "error": "quota_exceeded", "message": "Limite de 5 recherches…" }
Exemples complets
Python — recherche pseudo multi-plateformes
import time, requests BASE = "https://investiguser.com/dashboard_web/investiguser_online/api/v1" API_KEY = "VOTRE_CLÉ_API" H = {"Authorization": f"Bearer {API_KEY}"} # 1. Lancer la recherche r = requests.post(f"{BASE}/search.php", json={ "searchType": "username", "searchValue": "elonmusk", "platforms": ["twitter", "instagram", "tiktok"], }, headers=H, timeout=30) r.raise_for_status() data = r.json() request_id = data["request_id"] print(f"Recherche lancée — id={request_id}, quota restant={data['quota_remaining']}") # 2. Attendre le résultat (long-poll 25 s) while True: r = requests.get(f"{BASE}/result.php", params={"request_id": request_id, "wait": 25}, headers=H, timeout=40) data = r.json() if data["status"] == "completed": break elif data["status"] == "error": raise RuntimeError("Erreur backend") # 3. Traiter les résultats for res in data["results"]: print(res["platform"], "→", res["data"])
Python — recherche email
requests.post(f"{BASE}/search.php", json={ "searchType": "email", "searchValue": "[email protected]", "platforms": ["emailscan", "googlescan", "linkedinscan"], }, headers=H)
Python — recherche société
requests.post(f"{BASE}/search.php", json={ "searchType": "societe", "searchValue": { "name": "Acme Corp", "city": "Paris", "department": "75", "country": "FR", }, "platforms": ["linkedin_societe", "linkedin_soc_ppl"], }, headers=H)
curl — recherche IP
# Lancer curl -s -X POST "https://investiguser.com/dashboard_web/investiguser_online/api/v1/search.php" \ -H "Authorization: Bearer VOTRE_CLÉ_API" \ -H "Content-Type: application/json" \ -d '{"searchType":"ip","searchValue":"90.84.12.34","platforms":["ipscan"]}' # Récupérer (remplacer 4821 par votre request_id) curl -s "https://investiguser.com/dashboard_web/investiguser_online/api/v1/result.php?request_id=4821&wait=25" \ -H "Authorization: Bearer VOTRE_CLÉ_API"
JavaScript (fetch)
const BASE = "https://investiguser.com/dashboard_web/investiguser_online/api/v1"; const API_KEY = "VOTRE_CLÉ_API"; const H = { Authorization: `Bearer ${API_KEY}` }; // 1. Lancer const res = await fetch(`${BASE}/search.php`, { method: "POST", headers: { ...H, "Content-Type": "application/json" }, body: JSON.stringify({ searchType: "phone", searchValue: "33612345678", platforms: ["telegram", "whatsapp"], country_code: "FR", }), }); const { request_id } = await res.json(); // 2. Attendre (long-poll) let done = false; while (!done) { const r = await fetch(`${BASE}/result.php?request_id=${request_id}&wait=25`, { headers: H }); const data = await r.json(); if (data.status === "completed") { console.log(data.results); done = true; } else if (data.status === "error") throw new Error("Backend error"); }