Référence API
Authentification de l'API REST, base URL, pagination et référence OpenAPI complète des endpoints de recherche et de vérification de fuites Stealed.
L'API publique de Stealed expose des endpoints en lecture seule pour la recherche et la vérification de fuites. Les opérations de gestion (monitors, canaux, domaines, mots-clés, membres) restent à la portée du dashboard avec une session utilisateur authentifiée.
Base URL
https://api.stealed.ioTous les endpoints sont en HTTPS uniquement. HTTP est rejeté.
Authentification
Chaque requête porte une clé API dans l'en-tête X-Api-Key.
curl -H "X-Api-Key: $STEALED_API_KEY" \
https://api.stealed.io/leaks/meCréer une clé API
Les clés API sont scopées par organisation. Pour en créer une :
- Ouvrez le dashboard sur app.stealed.io.
- Allez dans Settings → API Integration.
- Cliquez sur New API key, donnez-lui un nom descriptif (par exemple "splunk ingestion") et cliquez sur Create.
- Copiez la clé immédiatement. Le secret complet n'est affiché qu'une seule fois. Ensuite vous pouvez voir le préfixe dans le dashboard mais pas la valeur complète.

Permissions
Une clé donne accès à :
GET /leaks/*: recherche de fuites, statistiques, recherche par mot-clé.POST /api-keys/verify: valider une clé et lire les métadonnées de l'organisation.
Les endpoints de gestion (monitors, canaux, domaines, mots-clés, équipe, CRUD des clés API) ne sont PAS dans la surface API publique. Ils nécessitent une session utilisateur dans le dashboard.
Faire tourner une clé
Pour faire une rotation, créez une nouvelle clé, déployez-la dans votre intégration, puis supprimez l'ancienne depuis le dashboard. Les clés prennent effet immédiatement à la création et sont invalidées immédiatement à la suppression.
Révoquer une clé compromise
Vous suspectez qu'une clé a fuité ? Supprimez-la depuis Settings → API Integration. La suppression est effective immédiatement pour les nouvelles requêtes. Les requêtes déjà en cours avec cette clé se terminent normalement.
Pagination
L'endpoint /leaks/details retourne des résultats paginés :
{
"data": [...],
"total": 12345,
"page": 1,
"page_size": 50,
"total_pages": 247
}page_sizepar défaut : 50page_sizemaximum : 200- La pagination est offset-based, pas cursor-based : pour de très
gros exports, bornez vos requêtes avec
start_dateetend_dateplutôt que de paginer sur des millions de lignes.
Fenêtre temporelle
Les endpoints /leaks/* ciblent par défaut les 14 derniers jours
quand ni start_date ni end_date n'est fourni. Format :
YYYY-MM-DD. Les deux paramètres peuvent être spécifiés
indépendamment.
Limites de débit
Par clé API :
- 60 requêtes / minute (burst toléré jusqu'à 100)
- 5 000 requêtes / heure
- 100 000 requêtes / jour
Quand vous atteignez une limite, l'API retourne 429 Too Many Requests avec un en-tête Retry-After (en secondes). Faites du
backoff et retentez.
Erreurs
Les erreurs suivent le RFC 9457 Problem Details :
{
"type": "https://api.stealed.io/errors/invalid-domain",
"title": "Invalid domain",
"status": 400,
"detail": "The domain 'acme' is not in your watchlist.",
"instance": "/leaks/details"
}Statuts HTTP courants :
| Statut | Signification |
|---|---|
| 200 | Succès |
| 400 | Erreur de validation (voir detail) |
| 401 | Clé API manquante ou invalide |
| 403 | Clé valide mais n'autorise pas cette opération |
| 404 | Ressource non trouvée |
| 429 | Limite de débit dépassée |
| 500 | Erreur interne, retentez avec backoff exponentiel |
Référence des endpoints
La référence OpenAPI complète (avec les schémas, paramètres et try-it-now) est générée plus bas depuis la spec en direct. Chaque opération a sa propre page.
- Leaks : recherche, détail, statistiques, recherche par mot-clé.
- API Keys : endpoint de vérification.
La spec OpenAPI est aussi disponible sur api.stealed.io/openapi.json pour la génération de code et de SDK.
Mettre un monitor en sourdine
Silencer un monitor pendant une fenêtre définie sans perdre son état. Utile pour les fenêtres de maintenance ou le triage actif.
Retrieve all leak statistics in a single request GET
Retrieve all leak statistics for the current organization in a single request. This endpoint fetches all leak data once and calculates multiple statistics server-side, reducing the number of queries needed. If `start_date` and `end_date` are not provided, defaults to **the last 14 days**. Includes trend data comparing the current period to the previous period of the same length (e.g. if querying 30 days, trends compare to the 30 days before that). **Returns a dictionary with the following statistics:** - `total_leaks`: Total number of leaks - `unique_usernames`: Number of unique usernames - `unique_domains`: Number of unique domains - `unique_passwords`: Number of unique passwords - `unique_leaks`: Number of unique leak hashes - `leaks_by_type`: Number of leaks grouped by type (combo/stealer) - `leaks_by_day`: Number of leaks grouped by day and identifier (limited globally to 10 top identifiers + other) - `leaks_by_domain`: Number of leaks grouped by domain (limited globally to 10 top domains + other) - `leaks_by_domain_all`: Number of leaks grouped by domain (all domains, no limit) - `leaks_by_inverse_identifier`: Number of leaks grouped by the inverse identifier (email_domain if root_domain, or vice-versa) (limited globally to 10 top + other) - `top_domains`: Top domains with most leaks (limited globally to 10) - `top_users`: Top users with most leaks (all users, no limit) - `password_strength`: Average password length - `password_reuse`: Number of reused passwords - `password_length_distribution`: Distribution of passwords by length - `external_accounts`: Detailed list of external accounts (username, masked password, type, domain, upload_stealed; capped at 50, most recent first) - `external_accounts_count`: Total count of external accounts - `admin_accounts`: Detailed list of admin/privileged accounts (same shape as `external_accounts`; capped at 50, most recent first) - `admin_accounts_count`: Total count of admin accounts - `unique_sources`: Total number of unique sources (opaque count, channel identity not exposed) - `sources`: List of sources with leak counts (all sources, no limit) - `latest_leak_date`: Date of the latest leak - `leak_details`: All leak details (same as org_leaks_detail_per_identifier, limited to 20000) - `leaks_by_country`: Top 50 countries by leak count (non-empty only) - `leaks_by_stealer_name`: Top 50 stealer families by leak count (non-empty only) - `leaks_by_software`: Top 50 software/browsers by leak count (non-empty only) - `leaks_by_computer_name`: Top 30 computer names by leak count (non-empty only) **Trend Fields** (percentage change vs previous period of same length): - `total_leaks_trend`, `unique_usernames_trend`, `unique_domains_trend` - `unique_sources_trend`, `admin_accounts_count_trend`, `external_accounts_count_trend` **Examples:** ```bash # All stats for the last 14 days (default) GET /leaks/stats?identifier_column=root_domain # With custom date range GET /leaks/stats?identifier_column=root_domain&start_date=2024-01-01&end_date=2024-12-31 # With filters GET /leaks/stats?identifier_column=root_domain&type=Stealer&country=FR ```