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.
[Deprecated] Retrieve leaks for the current user/organization for a given query GET
**Deprecated**: For leak details, use `GET /leaks/details` which provides pagination, deduplication, search, and sorting. For keyword search, use `GET /leaks/keyword/search`. Retrieve leak statistics for the current organization. Each call returns a single statistic based on the `query` parameter. Both `query` and `identifier_column` are **required**. If `start_date` and `end_date` are not provided, defaults to **the last 14 days**. **Required Parameters:** - `query`: The statistic to retrieve (see query types below) - `identifier_column`: `root_domain`, `email_domain`, or `username` **Available Query Types:** **Generic Queries (counts and aggregates):** - `generic_total_leaks_count`: Total leaks count - `generic_uniq_username_count`: Unique usernames detected - `generic_uniq_source_count`: Unique sources with at least one detection - `generic_uniq_password_count`: Unique passwords detected - `generic_uniq_domain_count`: Unique domains detected - `generic_uniq_leaks_count`: Unique leaks (by hash) - `generic_latest_leak_date`: Date of the latest leak - `generic_reused_password_count`: Passwords reused across multiple domains - `generic_password_strength`: Average password length **Generic Queries (detailed data):** - `generic_leaks_type_by_identifier`: Leaks grouped by type (combo/stealer) - `generic_leaks_by_day`: Leaks per day - `generic_password_per_length_per_identifier`: Password distribution by length - `generic_most_recent_leaks_by_identifier`: Most recent leaks **Organization Queries:** - `org_uniq_priv_account_count`: Privileged accounts leaked (admin, root, etc.) - `org_detailed_uniq_admin_account_count`: Detailed list of admin accounts - `org_uniq_ext_account_count`: External accounts count - `org_detailed_uniq_ext_account_count`: Detailed list of external accounts - `org_detailed_uniq_username_count`: Detailed list of all usernames - `org_total_leaks_count_group_by_identifier`: Leaks grouped by identifier - `org_total_leaks_count_group_by_domain`: Leaks grouped by domain - `org_total_leaks_count_group_by_email_domain`: Leaks grouped by email domain - `org_total_leaks_count_group_by_root_domain`: Leaks grouped by root domain - `org_top_domain_leaks_by_identifier`: Top domains by leak count - `org_top_user_leaks_by_identifier`: Top users by leak count - `org_leaks_detail_per_identifier`: Full leak details per identifier **Examples:** ```bash # Total leaks count GET /leaks/me?query=generic_total_leaks_count&identifier_column=root_domain # Unique usernames GET /leaks/me?query=generic_uniq_username_count&identifier_column=root_domain # Stealer leaks only GET /leaks/me?query=generic_total_leaks_count&identifier_column=root_domain&type=Stealer # Leaks per day with date range GET /leaks/me?query=generic_leaks_by_day&identifier_column=root_domain&start_date=2025-01-01&end_date=2025-01-31 # Leaks grouped by domain, limited to 100 GET /leaks/me?query=org_total_leaks_count_group_by_domain&identifier_column=root_domain&limit=100 # Multiple domain filter GET /leaks/me?query=org_total_leaks_count_group_by_domain&identifier_column=root_domain&domain=test.example.com&domain=monitoring.example.com ```