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.io

Tous 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/me

Créer une clé API

Les clés API sont scopées par organisation. Pour en créer une :

  1. Ouvrez le dashboard sur app.stealed.io.
  2. Allez dans Settings → API Integration.
  3. Cliquez sur New API key, donnez-lui un nom descriptif (par exemple "splunk ingestion") et cliquez sur Create.
  4. 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.

Page Settings → API Integration avec la liste des clés et le flux de création

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_size par défaut : 50
  • page_size maximum : 200
  • La pagination est offset-based, pas cursor-based : pour de très gros exports, bornez vos requêtes avec start_date et end_date plutô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 :

StatutSignification
200Succès
400Erreur de validation (voir detail)
401Clé API manquante ou invalide
403Clé valide mais n'autorise pas cette opération
404Ressource non trouvée
429Limite de débit dépassée
500Erreur 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 ```

On this page