{"openapi":"3.1.0","info":{"title":"LeakRadar.io API","description":"Easily interact with the LeakRadar.io platform via its public API.\n\n- **Endpoint**: `https://api.leakradar.io`\n- **Python 3 wrapper**: [leakradar-wrapper](https://github.com/LeakRadar/leakradar-wrapper)\n- **API key**: generate yours from the [dashboard](https://members.leakradar.io/settings?tab=api-key) (paid plan required)\n\n---\n\n## Rate limits\n\nLeakRadar enforces **three layers** of rate limiting per account owner (team members share the same buckets):\n\n1. **Burst (per-second)** — anti-DDoS, fixed across all plans.\n2. **Daily request cap** — commercial quota, scaled per plan.\n3. **Concurrent heavy searches** — protects the search backend, scaled per plan.\n\nExceeding any layer returns HTTP **429** with a `Retry-After` header.\n\n> ⚠️ **Repeatedly ignoring 429 responses** (hammering the API instead of honoring `Retry-After`) triggers an automatic **1-hour IP ban** at the Cloudflare edge. While banned, every request is blocked before reaching the API (Cloudflare error page, no JSON response). Back off as soon as you receive a 429.\n\n### Burst (per-second)\n\n| Context | Limit |\n|---------|-------|\n| Search (free user) | 5 req/sec |\n| Search (paid subscriber) | 30 req/sec |\n| Advanced search | 5 req/sec |\n| Raw search | 5 req/sec |\n| Unlock operations | 10 req/sec |\n\n### Daily request cap\n\nTotal searches (all types combined: email, domain, advanced, raw, dark web) per **rolling 24-hour window** per account. The counter is shared across team members and rolls over hour by hour (no fixed midnight reset).\n\n| Plan | Daily searches |\n|------|----------------|\n| Free (authenticated) | 500 |\n| Starter | 10 000 |\n| Enterprise | 50 000 |\n| Platinum | 200 000 |\n| Unlimited | unlimited |\n\nWhen exceeded: HTTP **429** with `X-RateLimit-Daily-Limit`, `X-RateLimit-Daily-Remaining` (=0), `X-RateLimit-Daily-Reset` (epoch of the next hourly rollover) and `Retry-After` (seconds).\n\n### Concurrent heavy searches\n\nMax **in-flight** heavy searches per account at any given time. Light searches (email, domain, dark web) are not bound by this cap.\n\n| Plan | Concurrent raw | Concurrent advanced |\n|------|----------------|---------------------|\n| Free (authenticated) | 1 | 1 |\n| Starter | 1 | 1 |\n| Enterprise | 2 | 2 |\n| Platinum | 3 | 3 |\n| Unlimited | 8 | 8 |\n\nWhen exceeded: HTTP **429** with `X-RateLimit-Inflight-Kind` (`raw` or `advanced`), `X-RateLimit-Inflight-Limit` (the cap), and `Retry-After` (typically 5 seconds, retry once the previous search completes).\n\n### Response headers\n\nEvery search response includes standard rate limit headers so clients can adapt programmatically:\n\n| Header | Description |\n|--------|-------------|\n| `X-RateLimit-Limit` | Maximum requests allowed in the current per-second window |\n| `X-RateLimit-Remaining` | Requests remaining in the current per-second window |\n| `X-RateLimit-Reset` | Seconds until the per-second window resets |\n| `X-RateLimit-Daily-Limit` | Daily request cap for your plan (absent on the Unlimited tier) |\n| `X-RateLimit-Daily-Remaining` | Daily requests remaining in the current rolling 24-hour window |\n| `X-RateLimit-Daily-Reset` | Unix epoch (seconds, UTC) of the next hourly rollover |\n| `X-RateLimit-Inflight-Kind` | (on 429 inflight only) `raw` or `advanced` |\n| `X-RateLimit-Inflight-Limit` | (on 429 inflight only) max concurrent searches for that kind |\n| `Retry-After` | (on 429 only) seconds to wait before retrying |\n\nMost HTTP libraries (httpx, requests, axios, fetch) honor `Retry-After` automatically.\n\n### Concurrent exports\n\nMax export jobs with status `PENDING` or `IN_PROGRESS` per account:\n\n| Export endpoint | Max |\n|-----------------|-----|\n| Email / Domain / Advanced / Raw | 5 |\n| Advanced URLs | 1 |\n\nExceeding the concurrent export limit returns HTTP **400**.\n\n### Concurrent unlock tasks\n\nMax unlock tasks with status `QUEUED` or `RUNNING` per account:\n\n| Scope | Max |\n|-------|-----|\n| Email / Domain | 5 |\n| Advanced / Raw | 2 |\n\nExceeding the concurrent unlock task limit returns HTTP **429**.\n\n---\n\n## Points system\n\nEvery unlock consumes **points** from your account balance (subscription + extra points).  \nWhen `auto_unlock=true` is passed, items on the current page are automatically unlocked and points are deducted. If your balance is insufficient, a partial unlock is performed.  \nThe response field `auto_unlock_points_consumed` indicates how many points were used.\n\n---\n\n## Pagination\n\n| Endpoint | `page_size` range | Default |\n|----------|-------------------|---------|\n| Email search | 1 – 100 | 10 |\n| Advanced search | 1 – 1 000 | 100 |\n| Raw search | 1 – 100 | 10 |\n| Raw parts | 1 – 1 000 | 100 |\n\n`page` starts at **1**.\n\n### Deep pagination cap\n\nInteractive paging is capped at `page * page_size <= 1,000,000`. Above this offset, requests return **400** with a hint to the bulk export endpoint.\n\nFor large datasets, use the matching `/export` endpoint (returns up to 5M rows asynchronously). Affected endpoints:\n\n- `GET /search/domain/{domain}/all`\n- `GET /search/domain/{domain}/customers`\n- `GET /search/domain/{domain}/employees`\n- `GET /search/domain/{domain}/third_parties`\n- `POST /search/advanced`\n\n---\n\n## Date format\n\nAll datetime parameters must be **ISO 8601 with a timezone** (e.g. `2025-01-15T00:00:00Z`). Providing a naive datetime returns HTTP **400**.\n\n---\n\n## Password strength\n\nLeaked passwords are scored on an integer scale (0+). The API groups them into four categories:\n\n| Category | Score range |\n|----------|------------|\n| `too_weak` | 0 – 2 |\n| `weak` | 3 – 4 |\n| `medium` | 5 – 7 |\n| `strong` | 8+ |\n\nResponse fields return the raw integer score. Filter parameters accept the category name.\n","version":"1.0.0"},"paths":{"/password-range":{"get":{"tags":["Password Range"],"summary":"Search password hashes by prefix","description":"Search leaked password hashes (SHA-1) by prefix or full hash and get the distinct matches with their occurrence counts.","operationId":"password_range_password_range_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"prefix","in":"query","required":true,"schema":{"type":"string","minLength":5,"maxLength":40,"description":"SHA-1 prefix or full hash to search for.","title":"Prefix"},"description":"SHA-1 prefix or full hash to search for."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of matching hashes to return.","default":1000,"title":"Limit"},"description":"Maximum number of matching hashes to return."},{"name":"suffix_only","in":"query","required":false,"schema":{"type":"boolean","description":"If true, return only hash suffixes (after the first 5 chars) instead of full hashes.","default":false,"title":"Suffix Only"},"description":"If true, return only hash suffixes (after the first 5 chars) instead of full hashes."}],"responses":{"200":{"description":"Matching hashes returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordRangeResponse"}}}},"400":{"description":"Prefix must be hexadecimal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/advanced":{"post":{"tags":["Search Advanced"],"summary":"Search leaks with advanced filters (JSON body)","description":"Search leaked credentials using any combination of fields defined in `LeakSearchFilters`.\n\n**Pagination:** `page` ≥ 1, `page_size` in [1, 1 000] (default 100).\n\n**Access:** If your plan includes `advanced_search`, full URLs and item IDs are returned; otherwise redacted.\n\n**Rate limit:** 5 requests per second per user.\n\n**Auto-unlock:**\nPass `auto_unlock=true` to automatically unlock locked items on the current page. Points are consumed per newly unlocked item. If insufficient points, partial unlock is performed. The response field `auto_unlock_points_consumed` indicates how many points were used.\n\n---\n\n**Filter limits:**\n\n| Constraint | Value |\n|------------|-------|\n| Max values per filter field | 50 |\n| Min characters per value (default) | 3 |\n| Min characters for `url_scheme`, `url_tld`, `email_tld` | 2 |\n| Min characters for `username_hash`, `password_hash` | 4 |\n| Max characters per string value | 100 |\n| Max characters for `url_scheme` | 20 |\n| Max characters for `url_tld`, `email_tld` | 10 |","operationId":"search_leaks_v2_search_advanced_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."},{"name":"auto_unlock","in":"query","required":false,"schema":{"type":"boolean","description":"Automatically unlock locked items on the current page using your points.","default":false,"title":"Auto Unlock"},"description":"Automatically unlock locked items on the current page using your points."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeakSearchFilters","description":"Advanced search filters."}}}},"responses":{"200":{"description":"Search results returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLeaksResponse"}}}},"400":{"description":"Pagination too deep (offset > 1,000,000 — use `/search/advanced/export`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error in filter parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Rate limit exceeded (5 req/sec). Response includes `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Advanced search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"/search/advanced/unlock":{"post":{"tags":["Search Advanced"],"summary":"Unlock leaks for advanced search","description":"Unlock leaks returned by the same advanced search filters as `/search/advanced`. Provide filters in the JSON body. Optional query parameter `max` limits how many new leaks to unlock.\n\n**Behavior**\n- If `max` is omitted, the service unlocks as many as your available points allow (subscription + extra).\n- Only previously locked items are unlocked. Already unlocked items remain unchanged.\n- Only newly unlocked items consume points.\n- **Hard cap**: synchronous unlocks are limited to 10,000. Use `/search/advanced/unlock/task` for higher volumes.\n\n**Plan requirement**\nRequires a paid plan with `advanced_search` enabled.\n\n**Errors**\n- 400 Insufficient points, no matching data, all items already unlocked, more than 10,000 unlocks (use /search/advanced/unlock/task), unlock not needed on your plan.\n- 401 Authentication required, or invalid/expired API key.\n- 403 Advanced search not available on your plan, this search is blocked, account banned, or pending email verification.\n- 404 The provided list_id does not exist or is not yours.\n- 422 Request validation error.\n- 429 Rate limit exceeded.\n- 503 Advanced search under maintenance, or public API temporarily disabled.","operationId":"unlock_all_advanced_leaks_search_advanced_unlock_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"0 or omitted = use all your points","title":"Max"},"description":"0 or omitted = use all your points"},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Assign this list id to new unlocks.","title":"List Id"},"description":"Assign this list id to new unlocks."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeakSearchFilters"}}}},"responses":{"200":{"description":"Unlocked leaks returned successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeakDetails"},"title":"Response Unlock All Advanced Leaks Search Advanced Unlock Post"}}}},"400":{"description":"Insufficient points, no matching data, all items already unlocked, more than 10,000 unlocks (use the /unlock/task endpoint), unlock not needed on your plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Advanced search not available on your plan, this search is blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"The provided list_id does not exist or is not yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded (10 req/sec). See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Advanced search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/advanced/unlock/task":{"post":{"tags":["Search Advanced"],"summary":"Queue an async mass unlock task for advanced search","description":"Creates an asynchronous unlock **Task** for the given advanced filters. Returns a `task_id` you can poll with the task-status endpoint.\n\n**Concurrency limit**\n- advanced / raw: max 2 concurrent tasks per user.\n- email / domain: max 5 concurrent tasks per user.\n- Returns 429 if limit exceeded.","operationId":"queue_advanced_unlock_task_search_advanced_unlock_task_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Optional cap of new unlocks.","title":"Max"},"description":"Optional cap of new unlocks."},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Assign this list id to new unlocks.","title":"List Id"},"description":"Assign this list id to new unlocks."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeakSearchFilters","description":"Filters to apply to the advanced search."}}}},"responses":{"200":{"description":"Unlock task queued; returns a task_id to poll.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Queue Advanced Unlock Task Search Advanced Unlock Task Post"}}}},"400":{"description":"Insufficient points, or unlock not needed on your plan (all data already accessible).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Advanced search not available on your plan, this search is blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"The provided list_id does not exist or is not yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded, or too many concurrent unlock tasks (max 2 for advanced).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Advanced search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/advanced/export":{"post":{"tags":["Search Advanced"],"summary":"Export leaks to CSV/TXT/JSON","description":"Queue an export of all leaks that match the provided advanced search filters. At least one filter is required.\n\nRequest body\n- JSON payload following the `LeakSearchFilters` schema.\n\nQuery parameters\n- `format` optional output format: `csv` (default), `txt`, or `json`.\n\nLimits and plan requirement\n- You can have at most 5 exports with status PENDING or IN_PROGRESS per account.\n- Requires a paid plan with `advanced_search` enabled.\n\nResponse\n`ExportResponse` with `status`, `message`, and `export_id`.","operationId":"create_advanced_export_search_advanced_export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeakSearchFilters"}}}},"responses":{"200":{"description":"Export queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"No filters provided, maximum concurrent exports reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Advanced search not available on your plan, search blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"An identical export is already queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Advanced search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/advanced/export_urls":{"post":{"tags":["Search Advanced"],"summary":"Export distinct URLs to CSV/TXT/JSON","description":"Queue an export of the distinct URLs from leaks that match the provided advanced search filters. Provide the filters in the JSON request body.\n\nRequest body\n- `filters` payload following `LeakSearchFilters` fields.\n\nQuery parameters\n- `format` optional output format: `csv` (default), `txt`, or `json`.\n\nLimits and plan requirement\n- At least one filter is required.\n- Capped at 5,000,000 distinct URLs. When a filter matches more, the file holds the alphabetically first 5,000,000 and the export is flagged as limited.\n- You can have at most 1 export with status PENDING or IN_PROGRESS per account.\n- Requires a paid plan with `advanced_search` enabled.\n\nResponse\n`ExportResponse` with `status`, `message`, and `export_id`.","operationId":"export_advanced_search_urls_search_advanced_export_urls_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeakSearchFilters"}}}},"responses":{"200":{"description":"Export queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"No filters provided, maximum concurrent exports reached (max 1 for URL exports).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Advanced search not available on your plan, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"An identical export is already queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Advanced search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/dark-web/sources":{"get":{"tags":["Dark Web Search"],"summary":"Get available dark web sources","description":"Returns a list of all scraped forum sources with their post counts.","operationId":"get_dark_web_sources_search_dark_web_sources_get","responses":{"200":{"description":"List of sources (names censored on free plans).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DarkWebSourcesResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Dark web index unavailable, under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/search/dark-web/stats":{"get":{"tags":["Dark Web Search"],"summary":"Get dark web statistics","description":"Returns overall statistics about the dark web index.","operationId":"get_dark_web_stats_search_dark_web_stats_get","responses":{"200":{"description":"Dark web statistics.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DarkWebStatsResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Dark web index unavailable, under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/search/dark-web/post/{post_id}":{"get":{"tags":["Dark Web Search"],"summary":"Get a single dark web post by ID","description":"Returns the full content of a dark web post without truncation.","operationId":"get_dark_web_post_search_dark_web_post__post_id__get","security":[{"BearerAuth":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","description":"The post ID (document _id)","title":"Post Id"},"description":"The post ID (document _id)"}],"responses":{"200":{"description":"Post content (censored on free plans).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DarkWebItem"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Post not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Dark web index unavailable, under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/dark-web":{"post":{"tags":["Dark Web Search"],"summary":"Search dark web mentions","description":"Look for mentions of a company, domain, IP, or email across scraped dark web/forum posts.\n\n**Simple mode**: Use `query` to search across title + content.\n\n**Advanced mode**: Use specific fields (`title`, `content`, `author`, `source_url`) with AND/OR logic.\n\n- Pagination: `page` starts at 1, `page_size` max 100.\n- Fields: title, content, author, source, source_ref, target, published_at, ingested_at.","operationId":"search_dark_web_search_dark_web_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page (1–100, default 25).","default":25,"title":"Page Size"},"description":"Items per page (1–100, default 25)."},{"name":"sources","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of sources to filter by","title":"Sources"},"description":"Comma-separated list of sources to filter by"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter posts published after this date","title":"Date From"},"description":"Filter posts published after this date"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter posts published before this date","title":"Date To"},"description":"Filter posts published before this date"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort field: ingested_at or published_at","default":"ingested_at","title":"Sort By"},"description":"Sort field: ingested_at or published_at"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Sort Order"},"description":"Sort order: asc or desc"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DarkWebSearchRequest"}}}},"responses":{"200":{"description":"Search results (censored on free plans).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DarkWebSearchResponse"}}}},"400":{"description":"Pagination limit exceeded (offset + page_size > 10,000).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Source filtering or source_url search requires a paid plan with dark web access; account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error in search parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Dark web index unavailable, under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"/search/domain/{domain}/all":{"get":{"tags":["Search Domain"],"summary":"List all leaks for a domain (employees + customers + third parties)","description":"Return a paginated list of **all** leaks linked to a domain, regardless of\ncategory (employees, customers, third parties).\n\nEach item includes a `category` field indicating whether the leak belongs\nto employees, customers, or third parties.\n\n**Query parameters**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n- `search` optional term to narrow results.\n- `is_email` optional boolean to filter emails (true), usernames (false), or both (null).\n\n**Access and visibility**\n- If your plan includes `domain_search`, full URLs and item IDs are returned.\n- Otherwise URLs are redacted except for the first 10 items per page and IDs are omitted.\n- Credentials are included only for items with `unlocked=true` and if your plan includes `domain_search`.\n\n**Response**\n`PaginatedAllLeaksResponse` with `items`, `total`, `total_unlocked`, `page`, `page_size`.\n\n**Auto-unlock**\nPass `auto_unlock=true` to automatically unlock locked items on the current page. Points are consumed per newly unlocked item. If insufficient points, partial unlock is performed. The response field `auto_unlock_points_consumed` indicates how many points were used.","operationId":"get_all_domain_leaks_search_domain__domain__all_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to list leaks for, e.g. `example.com`.","title":"Domain"},"description":"Domain to list leaks for, e.g. `example.com`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional search term to filter results.","title":"Search"},"description":"Optional search term to filter results."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by identifier type: true=emails only, false=usernames only, null=both.","title":"Is Email"},"description":"Filter by identifier type: true=emails only, false=usernames only, null=both."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."},{"name":"auto_unlock","in":"query","required":false,"schema":{"type":"boolean","description":"Automatically unlock locked items on the current page using your points.","default":false,"title":"Auto Unlock"},"description":"Automatically unlock locked items on the current page using your points."}],"responses":{"200":{"description":"Leaks returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAllLeaksResponse"}}}},"400":{"description":"Pagination too deep (offset > 1,000,000 — use the matching `/export` endpoint).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. Response includes `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/customers":{"get":{"tags":["Search Domain"],"summary":"List leaks for customers of a domain","description":"Return a paginated list of leaks linked to customers of the given domain.\n\n**Query parameters**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n- `search` optional term to narrow results.\n- `is_email` optional boolean to filter emails (true), usernames (false), or both (null).\n\n**Access and visibility**\n- If your plan includes `domain_search`, full URLs and item IDs are returned.\n- Otherwise URLs are redacted except for the first 10 items per page and IDs are omitted.\n- Credentials are included only for items with `unlocked=true` and if your plan includes `domain_search`.\n\n**Response**\n`PaginatedLeaksResponse` with `items`, `total`, `total_unlocked`, `page`, `page_size`.\n\n**Auto-unlock**\nPass `auto_unlock=true` to automatically unlock locked items on the current page. Points are consumed per newly unlocked item. If insufficient points, partial unlock is performed. The response field `auto_unlock_points_consumed` indicates how many points were used.","operationId":"get_customer_leaks_search_domain__domain__customers_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain whose customers' leaks to list, e.g. `example.com`.","title":"Domain"},"description":"Domain whose customers' leaks to list, e.g. `example.com`."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional search term to filter results.","title":"Search"},"description":"Optional search term to filter results."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by identifier type: true=emails only, false=usernames only, null=both.","title":"Is Email"},"description":"Filter by identifier type: true=emails only, false=usernames only, null=both."},{"name":"auto_unlock","in":"query","required":false,"schema":{"type":"boolean","description":"Automatically unlock locked items on the current page using your points.","default":false,"title":"Auto Unlock"},"description":"Automatically unlock locked items on the current page using your points."}],"responses":{"200":{"description":"Results returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLeaksResponse"}}}},"400":{"description":"Pagination too deep (offset > 1,000,000 — use the matching `/export` endpoint).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. Response includes `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/employees":{"get":{"tags":["Search Domain"],"summary":"List leaks for employees of a domain","description":"Return a paginated list of leaks linked to employees of the given domain.\n\n**Query parameters**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n- `search` optional term to narrow results.\n- `is_email` optional boolean to filter emails (true), usernames (false), or both (null).\n\n**Access and visibility**\n- If your plan includes `domain_search`, full URLs and item IDs are returned.\n- Otherwise URLs are redacted except for the first 10 items per page and IDs are omitted.\n- Credentials are included only for items with `unlocked=true` and if your plan includes `domain_search`.\n\n**Response**\n`PaginatedLeaksResponse` with `items`, `total`, `total_unlocked`, `page`, `page_size`.\n\n**Auto-unlock**\nPass `auto_unlock=true` to automatically unlock locked items on the current page. Points are consumed per newly unlocked item. If insufficient points, partial unlock is performed. The response field `auto_unlock_points_consumed` indicates how many points were used.","operationId":"get_employee_leaks_search_domain__domain__employees_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain whose employees' leaks to list, e.g. `example.com`.","title":"Domain"},"description":"Domain whose employees' leaks to list, e.g. `example.com`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional search term to filter results.","title":"Search"},"description":"Optional search term to filter results."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by identifier type: true=emails only, false=usernames only, null=both.","title":"Is Email"},"description":"Filter by identifier type: true=emails only, false=usernames only, null=both."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."},{"name":"auto_unlock","in":"query","required":false,"schema":{"type":"boolean","description":"Automatically unlock locked items on the current page using your points.","default":false,"title":"Auto Unlock"},"description":"Automatically unlock locked items on the current page using your points."}],"responses":{"200":{"description":"Results returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLeaksResponse"}}}},"400":{"description":"Pagination too deep (offset > 1,000,000 — use the matching `/export` endpoint).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. Response includes `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/third_parties":{"get":{"tags":["Search Domain"],"summary":"List leaks for third parties of a domain","description":"Return a paginated list of leaks linked to third parties of the given domain.\n\n**Query parameters**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n- `search` optional term to narrow results.\n- `is_email` optional boolean to filter emails (true), usernames (false), or both (null).\n\n**Access and visibility**\n- If your plan includes `domain_search`, full URLs and item IDs are returned.\n- Otherwise URLs are redacted except for the first 10 items per page and IDs are omitted.\n- Credentials are included only for items with `unlocked=true` and if your plan includes `domain_search`.\n\n**Response**\n`PaginatedLeaksResponse` with `items`, `total`, `total_unlocked`, `page`, `page_size`.\n\n**Auto-unlock**\nPass `auto_unlock=true` to automatically unlock locked items on the current page. Points are consumed per newly unlocked item. If insufficient points, partial unlock is performed. The response field `auto_unlock_points_consumed` indicates how many points were used.","operationId":"get_third_parties_leaks_search_domain__domain__third_parties_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain whose third-party leaks to list, e.g. `example.com`.","title":"Domain"},"description":"Domain whose third-party leaks to list, e.g. `example.com`."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional search term to filter results.","title":"Search"},"description":"Optional search term to filter results."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by identifier type: true=emails only, false=usernames only, null=both.","title":"Is Email"},"description":"Filter by identifier type: true=emails only, false=usernames only, null=both."},{"name":"auto_unlock","in":"query","required":false,"schema":{"type":"boolean","description":"Automatically unlock locked items on the current page using your points.","default":false,"title":"Auto Unlock"},"description":"Automatically unlock locked items on the current page using your points."}],"responses":{"200":{"description":"Results returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLeaksResponse"}}}},"400":{"description":"Pagination too deep (offset > 1,000,000 — use the matching `/export` endpoint).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. Response includes `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}":{"get":{"tags":["Search Domain"],"summary":"Get leak report for a domain","description":"Return a domain leak report. If unauthenticated, `light=true` is forced.\n\n**Modes**\n- `light=true`: returns sampled counts only.\n- `light=false` (authenticated): returns exact counts plus password stats per group.\n\n**Parameters**\n- `include_search_count=true`: include the number of distinct users who searched this domain in the last 7 days (`searched_by_count`). Disabled by default to avoid an expensive SQL query.\n\n**Caching**\n- Light up to 24 hours, full up to 1 hour.","operationId":"search_domain_leaks_search_domain__domain__get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to report on, e.g. `example.com`.","title":"Domain"},"description":"Domain to report on, e.g. `example.com`."},{"name":"light","in":"query","required":false,"schema":{"type":"boolean","description":"Force light mode (sampled counts only). Always forced when unauthenticated.","default":false,"title":"Light"},"description":"Force light mode (sampled counts only). Always forced when unauthenticated."},{"name":"include_search_count","in":"query","required":false,"schema":{"type":"boolean","description":"Include `searched_by_count` (distinct users who searched this domain in the last 7 days). Full mode only; adds an SQL query.","default":false,"title":"Include Search Count"},"description":"Include `searched_by_count` (distinct users who searched this domain in the last 7 days). Full mode only; adds an SQL query."}],"responses":{"200":{"description":"Domain leak report returned successfully.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DomainSearchLightResponse"},{"$ref":"#/components/schemas/DomainSearchResponse"}],"title":"Response Search Domain Leaks Search Domain  Domain  Get"}}}},"400":{"description":"Empty domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/report/pdf":{"get":{"tags":["Search Domain"],"summary":"Download domain report as PDF","description":"Generate and download a PDF report for the given domain.\n\n**Content**\n- Aggregated counts for compromised employees, third parties, and customers.\n- Aggregated password statistics per group when available.\n\n**Errors**\n- 400 Empty domain.\n- 401 Authentication required, or invalid/expired API key.\n- 403 Account banned, or pending email verification.\n- 422 Request validation error.\n- 429 Rate limit exceeded.\n- 503 Domain search under maintenance, or public API temporarily disabled.","operationId":"download_domain_report_pdf_search_domain__domain__report_pdf_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to generate the PDF report for, e.g. `example.com`.","title":"Domain"},"description":"Domain to generate the PDF report for, e.g. `example.com`."}],"responses":{"200":{"description":"PDF report for the requested domain.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}},"headers":{"Content-Disposition":{"description":"Attachment filename for the PDF report.","schema":{"type":"string"}}}},"400":{"description":"Empty domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/subdomains":{"get":{"tags":["Search Domain"],"summary":"List subdomains for a domain","description":"Return a paginated list of distinct subdomains for the given domain with their occurrence counts.\n\n**Query parameters**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n- `search` optional wildcard filter on subdomain.\n\n**Access and visibility**\n- If your plan includes `domain_search`, full subdomains are returned.\n- Otherwise subdomains are redacted except for the first 10 items per page. If `search` is provided and you are not entitled, results are redacted.","operationId":"get_domain_subdomains_search_domain__domain__subdomains_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Parent domain to list subdomains for, e.g. `example.com`.","title":"Domain"},"description":"Parent domain to list subdomains for, e.g. `example.com`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional wildcard filter on subdomain.","title":"Search"},"description":"Optional wildcard filter on subdomain."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."}],"responses":{"200":{"description":"Results returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_SubdomainOccurrences_"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/subdomains/export":{"post":{"tags":["Search Domain"],"summary":"Export all subdomains for a domain as CSV/TXT/JSON","description":"Generate an on-demand export of all distinct subdomains for the given domain. The export contains a single `Subdomain` column.\n\n**Plan requirement**\nRequires a paid plan with `domain_search` enabled.\n\n**Parameters**\n- You can provide `search` either as a query parameter or in the JSON body. If both are provided, the JSON body value takes precedence.","operationId":"export_domain_subdomains_search_domain__domain__subdomains_export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Parent domain to export subdomains for, e.g. `example.com`.","title":"Domain"},"description":"Parent domain to export subdomains for, e.g. `example.com`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional wildcard filter on subdomain when using query parameters. If also provided in the JSON body, the body value takes precedence.","title":"Search"},"description":"Optional wildcard filter on subdomain when using query parameters. If also provided in the JSON body, the body value takes precedence."},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DomainSubdomainsExportBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Subdomains file (CSV/TXT/JSON) streamed successfully."},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Domain search not available on your plan, domain blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/urls":{"get":{"tags":["Search Domain"],"summary":"List URLs for a domain","description":"Return a paginated list of distinct URLs for the given domain with their occurrence counts.\n\n**Query parameters**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n- `search` optional wildcard filter on URL.\n\n**Access and visibility**\n- If your plan includes `domain_search`, full URLs are returned.\n- Otherwise URLs are redacted except for the first 10 items per page. If `search` is provided and you are not entitled, results are redacted.","operationId":"get_domain_urls_search_domain__domain__urls_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to list URLs for, e.g. `example.com`.","title":"Domain"},"description":"Domain to list URLs for, e.g. `example.com`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional wildcard filter on url.","title":"Search"},"description":"Optional wildcard filter on url."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."}],"responses":{"200":{"description":"Results returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_URLOccurrences_"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/urls/export":{"post":{"tags":["Search Domain"],"summary":"Export all URLs for a domain as CSV/TXT/JSON","description":"Generate an on-demand export of all distinct URLs for the given domain. The export contains a single `URL` column and is capped at 100,000 rows.\n\n**Plan requirement**\nRequires a paid plan with `domain_search` enabled.\n\n**Parameters**\n- You can provide `search` either as a query parameter or in the JSON body. If both are provided, the JSON body value takes precedence.","operationId":"export_domain_urls_search_domain__domain__urls_export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to export URLs for, e.g. `example.com`.","title":"Domain"},"description":"Domain to export URLs for, e.g. `example.com`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional search term to filter results when using query parameters. If also provided in the JSON body, the body value takes precedence.","title":"Search"},"description":"Optional search term to filter results when using query parameters. If also provided in the JSON body, the body value takes precedence."},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DomainURLsExportBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"URLs file (CSV/TXT/JSON) streamed successfully."},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Domain search not available on your plan, domain blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/{leak_type}/export":{"post":{"tags":["Search Domain"],"summary":"Export domain leaks to CSV/TXT/JSON","description":"Queue an export of all leaks for the given domain and leak type (valid values: `employees`, `customers`, `third_parties`, `all`). The job runs asynchronously and the file will appear in the Exports section when ready.\n\n**Parameters**\n- You can provide `search`, `is_email`, and `format` either as query parameters or in the JSON body. If both are provided, the JSON body values take precedence.\n\n**Query parameters**\n- `search` optional term to narrow results.\n- `is_email` optional boolean to filter emails (true), usernames (false), or both (null).\n- `format` optional output format: `csv` (default), `txt`, or `json`.\n\n**Limits and plan requirement**\n- You can have at most 5 exports with status PENDING or IN_PROGRESS (per account).\n- Requires a paid plan with `domain_search` enabled.\n\n**Response**\n`ExportResponse` with `status`, `message`, and `export_id`.","operationId":"create_domain_export_search_domain__domain___leak_type__export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to export leaks for, e.g. `example.com`.","title":"Domain"},"description":"Domain to export leaks for, e.g. `example.com`."},{"name":"leak_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/LeakTypeEnum","description":"Which leaks to export: `employees`, `customers`, `third_parties`, or `all`."},"description":"Which leaks to export: `employees`, `customers`, `third_parties`, or `all`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional term to narrow results when using query parameters. If also provided in the JSON body, the body value takes precedence.","title":"Search"},"description":"Optional term to narrow results when using query parameters. If also provided in the JSON body, the body value takes precedence."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Optional boolean to filter emails (true), usernames (false), or both (null). If also provided in the JSON body, the body value takes precedence.","title":"Is Email"},"description":"Optional boolean to filter emails (true), usernames (false), or both (null). If also provided in the JSON body, the body value takes precedence."},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DomainExportBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Export queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"Maximum concurrent exports reached (PENDING/IN_PROGRESS limit).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Domain search not available on your plan, domain blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"An identical export is already queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/{leak_type}/unlock":{"post":{"tags":["Search Domain"],"summary":"Unlock leaks for a domain","description":"Unlock leaks for the given domain and leak type (valid values: `employees`, `customers`, `third_parties`). Use `max` to cap how many new leaks to unlock. The effective limit is capped by your available points.\n\nBehavior\n- Only previously locked items are unlocked. Already unlocked items are left unchanged.\n- Only newly unlocked items consume points.\n- **Hard cap**: synchronous unlocks are limited to 10,000. Use `/search/domain/{domain}/{leak_type}/unlock/task` for higher volumes.\n\nPlan requirement\nRequires a paid plan with `domain_search` enabled.\n\n**Errors**\n- 400 Insufficient points, no matching data, all items already unlocked, more than 10,000 unlocks (use the /unlock/task endpoint), unlock not needed on your plan.\n- 401 Authentication required, or invalid/expired API key.\n- 403 Domain search not available on your plan, this domain is blocked, account banned, or pending email verification.\n- 404 The provided list_id does not exist or is not yours.\n- 422 Request validation error.\n- 429 Rate limit exceeded.\n- 503 Domain search under maintenance, or public API temporarily disabled.","operationId":"unlock_all_leaks_endpoint_search_domain__domain___leak_type__unlock_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to unlock leaks for, e.g. `example.com`.","title":"Domain"},"description":"Domain to unlock leaks for, e.g. `example.com`."},{"name":"leak_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/LeakTypeEnum","description":"Which leaks to unlock: `employees`, `customers`, or `third_parties`."},"description":"Which leaks to unlock: `employees`, `customers`, or `third_parties`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional search term to filter results.","title":"Search"},"description":"Optional search term to filter results."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter on e-mails (`true`), usernames (`false`) or both (`null`).","title":"Is Email"},"description":"Filter on e-mails (`true`), usernames (`false`) or both (`null`)."},{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum number of leaks to unlock.","title":"Max"},"description":"Maximum number of leaks to unlock."},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Assign this list id to new unlocks.","title":"List Id"},"description":"Assign this list id to new unlocks."}],"responses":{"200":{"description":"Unlocked leaks returned successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeakDetails"},"title":"Response Unlock All Leaks Endpoint Search Domain  Domain   Leak Type  Unlock Post"}}}},"400":{"description":"Insufficient points, no matching data, all items already unlocked, more than 10,000 unlocks (use the /unlock/task endpoint), unlock not needed on your plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Domain search not available on your plan, this domain is blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"The provided list_id does not exist or is not yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domain/{domain}/{leak_type}/unlock/task":{"post":{"tags":["Search Domain"],"summary":"Queue an async mass unlock task for a domain","description":"Creates an asynchronous unlock **Task** for the given domain and leak type. Returns a `task_id` for polling.\n\n**Concurrency limit**\n- advanced / raw: max 2 concurrent tasks per user.\n- email / domain: max 5 concurrent tasks per user.\n- Returns 429 if limit exceeded.","operationId":"queue_domain_unlock_task_search_domain__domain___leak_type__unlock_task_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","description":"Domain to unlock leaks for, e.g. `example.com`.","title":"Domain"},"description":"Domain to unlock leaks for, e.g. `example.com`."},{"name":"leak_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/LeakTypeEnum","description":"Which leaks to unlock: `employees`, `customers`, or `third_parties`."},"description":"Which leaks to unlock: `employees`, `customers`, or `third_parties`."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional search term.","title":"Search"},"description":"Optional search term."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"True=email only, false=username only, null=both.","title":"Is Email"},"description":"True=email only, false=username only, null=both."},{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Optional cap for new unlocks.","title":"Max"},"description":"Optional cap for new unlocks."},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Assign this list id to new unlocks.","title":"List Id"},"description":"Assign this list id to new unlocks."}],"responses":{"200":{"description":"Unlock task queued; returns a task_id to poll.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Queue Domain Unlock Task Search Domain  Domain   Leak Type  Unlock Task Post"}}}},"400":{"description":"Insufficient points, or unlock not needed on your plan (all data already accessible).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Domain search not available on your plan, this domain is blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"The provided list_id does not exist or is not yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded, or too many concurrent unlock tasks (max 5 for domain).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/domains/locked-exists":{"post":{"tags":["Search Domain"],"summary":"Batch exists-check of still-locked leaks by domain and category (account-specific)","description":"For up to 100 domains, returns per-category booleans indicating whether there are leaks that are still locked for the current account (total minus the account's unlocked items). Use include_counts=true to also get locked/total/unlocked counts.","operationId":"domains_locked_exists_search_domains_locked_exists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainMassRequest"}}},"required":true},"responses":{"200":{"description":"Per-domain, per-category locked-exists results returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainMassResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Your plan does not allow domain mass checks, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Domain search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/search/email":{"post":{"tags":["Search Email"],"summary":"Search leaks by email or username","description":"Search for leaks associated with a specific email or username. Provide the search payload in the JSON body.\n\nPagination\n- `page` starts at 1.\n- `page_size` is 1 to 100 (default 100).\n\nAccess and visibility\n- If your plan includes `email_search`, full URLs and item IDs are returned.\n- Otherwise URLs are redacted except for the first 10 items per page and IDs are omitted.\n- Credentials are returned only when `unlocked=true` and your plan includes `email_search`.\n\nAuto-unlock\nPass `auto_unlock=true` to automatically unlock locked items on the current page. Points are consumed per newly unlocked item. If insufficient points, partial unlock is performed. The response field `auto_unlock_points_consumed` indicates how many points were used.\n\nResponse\n`EmailSearchResponse` with `items`, `total`, `total_unlocked`, `page`, `page_size`.\n\nSpecial case: if `email` is a full SHA-1 (40 hex chars, no '@'), search is done on username_hash exactly.","operationId":"search_email_leaks_search_email_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page (1–100, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–100, default 100)."},{"name":"auto_unlock","in":"query","required":false,"schema":{"type":"boolean","description":"Automatically unlock locked items on the current page using your points.","default":false,"title":"Auto Unlock"},"description":"Automatically unlock locked items on the current page using your points."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSearchRequest"}}}},"responses":{"200":{"description":"Search results successfully returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSearchResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Email search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"/search/email/unlock":{"post":{"tags":["Search Email"],"summary":"Unlock leaks for an email","description":"Unlock leaks for the given email or username. Provide the search payload in the JSON body. Use the `max` query parameter to cap how many new leaks to unlock. The effective limit is capped by your available points.\n\nRequest body\n- `email` the email or username to search.\n- `search` optional free-text filter applied to URL or username.\n- `is_email` optional boolean: `true` emails only, `false` usernames only, `null` both.\n\nBehavior\n- Only previously locked items are unlocked. Already unlocked items are left unchanged.\n- Only newly unlocked items consume points.\n- If nothing new can be unlocked but matching unlocked items exist, those unlocked items are returned.\n- **Hard cap**: synchronous unlocks are limited to 10,000. Use `/search/email/unlock/task` for higher volumes.\n\nPlan requirement\nRequires a paid plan with `email_search` enabled.","operationId":"unlock_all_email_leaks_search_email_unlock_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"0 or omitted = use all your points","title":"Max"},"description":"0 or omitted = use all your points"},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Assign this list id to new unlocks.","title":"List Id"},"description":"Assign this list id to new unlocks."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSearchRequest"}}}},"responses":{"200":{"description":"Unlocked leaks returned successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeakDetails"},"title":"Response Unlock All Email Leaks Search Email Unlock Post"}}}},"400":{"description":"Insufficient points, no matching data, all items already unlocked, more than 10,000 unlocks (use the /unlock/task endpoint), unlock not needed on your plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Email search not available on your plan, this search is blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"The provided list_id does not exist or is not yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded (10 req/sec). See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Email search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/email/unlock/task":{"post":{"tags":["Search Email"],"summary":"Queue an async mass unlock task for an email","description":"Creates an **asynchronous** unlock Task for the given email/username + optional filters. Returns a `task_id` you can poll with the task-status endpoint.\n\nmax semantics\n- Omit `max` or set `max=0` → use all your available points.\n- Positive `max` → unlock up to that number (and ≤ your points).\n\n**Concurrency limit**\n- advanced / raw: max 2 concurrent tasks per user.\n- email / domain: max 5 concurrent tasks per user.\n- Returns 429 if limit exceeded.","operationId":"queue_email_unlock_task_search_email_unlock_task_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"0 or omitted = use all your points","title":"Max"},"description":"0 or omitted = use all your points"},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Assign this list id to new unlocks.","title":"List Id"},"description":"Assign this list id to new unlocks."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSearchRequest"}}}},"responses":{"200":{"description":"Unlock task queued; returns a task_id to poll.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Queue Email Unlock Task Search Email Unlock Task Post"}}}},"400":{"description":"Insufficient points, or unlock not needed on your plan (all data already accessible).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Email search not available on your plan, this search is blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"The provided list_id does not exist or is not yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded, or too many concurrent unlock tasks (max 5 for email).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Email search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/email/export":{"post":{"tags":["Search Email"],"summary":"Export leaks for an email to CSV/TXT/JSON","description":"Queue an export of all leaks that match the given email or username and optional filters. Provide the search payload in the JSON body.\n\nRequest body\n- `email` the email or username to search.\n- `search` optional free-text filter applied to URL or username.\n- `is_email` optional boolean: `true` emails only, `false` usernames only, `null` both.\n\nQuery parameters\n- `format` optional output format: `csv` (default), `txt`, or `json`.\n\nLimits and plan requirement\n- You can have at most 5 exports with status PENDING or IN_PROGRESS (per account).\n- Requires a paid plan with `email_search` enabled.\n\nResponse\n`ExportResponse` with `status`, `message`, and `export_id`.","operationId":"create_email_export_search_email_export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSearchRequest"}}}},"responses":{"200":{"description":"Export queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"Maximum concurrent exports reached (PENDING/IN_PROGRESS limit).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Email search not available on your plan, search blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"An identical export is already queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Email search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/emails/locked-exists":{"post":{"tags":["Search Email"],"summary":"Batch exists-check of still-locked leaks by email or username (account-specific)","description":"For up to 100 emails or usernames, returns booleans and optional counts indicating whether there are leaks that are still locked for the current account. Use include_counts=true to also get locked/total/unlocked counts.","operationId":"emails_locked_exists_search_emails_locked_exists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMassRequest"}}},"required":true},"responses":{"200":{"description":"Per-email locked-exists results returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMassResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Your plan does not allow email/username mass checks, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Email search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/search/raw":{"post":{"tags":["Raw Search"],"summary":"Search raw leak blocks","description":"Perform a full-text search across raw leak blocks. Provide the search payload in the JSON body.\n\n**Request body**\n\n- `q`: Optional search string (minimum 4 characters once quotes are removed).\n- `container_id`: Optional container identifier.\n- `exts` / `exts_not`: File extensions to include / exclude.\n- `categories` / `categories_not`: Raw file categories to include / exclude.\n- `file_name` / `file_name_not`: Wildcard on `entry_name` (max 50 items, min 4 chars each).\n- `file_name_exact`: Match `file_name` values against the whole entry name instead of a substring.\n- `folder_name` / `folder_name_not`: Match on the folder holding the block (max 20 items, min 4 chars each, surrounding slashes ignored). `folder_name_not` is not a standalone selector.\n- `folder_name_exact`: Require `folder_name` values to be a whole folder at any depth (`data` matches `a/b/data`, not `a/b/database`) instead of a substring of the folder path.\n- `exclude_terms`: Content terms to exclude (substring, case-insensitive, max 20 items, min 4 chars each). Not a standalone selector.\n- `force_and`: Apply AND logic within `file_name` and within `folder_name` (default OR).\n- `ingested_at_min` / `ingested_at_max`: Datetime range filter (ISO 8601 with timezone).\n\nIf `q` is omitted, you must provide at least one filter among `container_id`, `exts`, `categories`, `file_name`, `folder_name`.\n\n**Query parameters**\n\n- `page` starts at 1.\n- `page_size` ranges from 1 to 100 (default 10).\n- `cursor`: Cursor returned in the previous response to fetch the next page of results.\n\n**Rate limit:** 5 requests per second per user.\n\n**Response:** `{ items, total, page, page_size }`\n\n---\n\n**Limits:**\n\n| Constraint | Value |\n|------------|-------|\n| Max file name filters | 50 |\n| Max folder name filters | 20 |\n| Min characters per file / folder name | 4 |\n| Max export results | 5 000 |\n| Max export files | 25 |\n| Download link retention | 7 days |","operationId":"raw_search_search_raw_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page (1–100, default 10).","default":10,"title":"Page Size"},"description":"Items per page (1–100, default 10)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor from previous response to fetch the next page","title":"Cursor"},"description":"Cursor from previous response to fetch the next page"},{"name":"dedup","in":"query","required":false,"schema":{"type":"boolean","description":"Collapse blocks with identical content (same block_fp64) into a single result. Dedup is per-page: with cursor pagination the same content may resurface on a later page.","default":false,"title":"Dedup"},"description":"Collapse blocks with identical content (same block_fp64) into a single result. Dedup is per-page: with cursor pagination the same content may resurface on a later page."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawSearchRequest"}}}},"responses":{"200":{"description":"Search executed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawSearchResponse"}}}},"400":{"description":"Invalid query (too short, too long, or empty with no filters), expired search cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded (5 req/sec). See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Upstream search error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, pagination temporarily unavailable, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/raw/count":{"post":{"tags":["Raw Search"],"summary":"Count matching raw blocks (mass-unlock cost estimate)","description":"Return how many raw blocks match the given filters, i.e. the maximum number of parts (1 point each) a mass unlock would consume. Uses the **same** payload as `/search/raw` so the count matches exactly what search and unlock traverse.\n\nThis is intended to be called on demand (e.g. when opening the mass-unlock dialog), NOT on every search: the count is heavier than a page fetch and is cached.\n\n- `exact=true`: `total` is the exact count.\n- `exact=false`: `total` is an upper bound (`q_exact` and/or `dedup` shrink the real set).\n- `capped=true`: the count hit an internal ceiling, so `total` is a lower bound.\n\n**Rate limit:** shares the raw search limit.","operationId":"raw_count_search_raw_count_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"dedup","in":"query","required":false,"schema":{"type":"boolean","description":"Mark the count as an upper bound because the deduplicated view folds identical content (block_fp64) app-side.","default":false,"title":"Dedup"},"description":"Mark the count as an upper bound because the deduplicated view folds identical content (block_fp64) app-side."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawSearchRequest"}}}},"responses":{"200":{"description":"Count computed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawCountResponse"}}}},"400":{"description":"Invalid query (too short, too long, or empty with no filters).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Raw search not available on your plan, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/raw/parts":{"get":{"tags":["Raw Search"],"summary":"List parts for a raw entry","description":"Return metadata about the blocks (parts) of a raw entry.\n\n**Query parameters**\n- `container_id`: Required container identifier.\n- `entry_path`: Path of the entry inside the container.\n- `page`/`page_size`: Pagination parameters.\n\n**Response**\nUniform shape: { items, total, page, page_size } and optional `window`.","operationId":"list_parts_search_raw_parts_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"container_id","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"Container identifier.","title":"Container Id"},"description":"Container identifier."},{"name":"entry_path","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Path of the entry inside the container.","title":"Entry Path"},"description":"Path of the entry inside the container."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."}],"responses":{"200":{"description":"Parts listed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartsResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Search query failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/raw/part":{"get":{"tags":["Raw Search"],"summary":"Retrieve a raw entry part","description":"Fetch the textual content for a specific raw entry block. If the block is not unlocked, the content is censored unless `auto_unlock=true` succeeds.\n\n**Query parameters**\n- `container_id`: Required container identifier.\n- `entry_path`: Path of the entry inside the container.\n- `seq`: Block sequence number (0-based).\n- `trim_overlap`: When true, drop the overlapping prefix shared with the previous block.\n- `overlap_chars`: Number of characters to trim when `trim_overlap=true` (default from configuration).\n- `auto_unlock`: Attempt to unlock the block using points when necessary.\n\n**Response**\nReturns `PartResponse` describing the block and its (possibly censored) content.","operationId":"get_part_search_raw_part_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"container_id","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"Container identifier.","title":"Container Id"},"description":"Container identifier."},{"name":"entry_path","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Path of the entry inside the container.","title":"Entry Path"},"description":"Path of the entry inside the container."},{"name":"seq","in":"query","required":true,"schema":{"type":"integer","minimum":0,"description":"Block sequence number (0-based).","title":"Seq"},"description":"Block sequence number (0-based)."},{"name":"trim_overlap","in":"query","required":false,"schema":{"type":"boolean","description":"Drop the overlapping prefix shared with the previous block.","default":false,"title":"Trim Overlap"},"description":"Drop the overlapping prefix shared with the previous block."},{"name":"overlap_chars","in":"query","required":false,"schema":{"type":"integer","maximum":8192,"minimum":0,"description":"Characters to trim when trim_overlap=true.","default":256,"title":"Overlap Chars"},"description":"Characters to trim when trim_overlap=true."},{"name":"auto_unlock","in":"query","required":false,"schema":{"type":"boolean","description":"Attempt to unlock the block using points when necessary.","default":false,"title":"Auto Unlock"},"description":"Attempt to unlock the block using points when necessary."}],"responses":{"200":{"description":"Block returned successfully (content censored unless unlocked).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartResponse"}}}},"400":{"description":"Insufficient points during auto-unlock.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"auto_unlock requires an active raw plan, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Block not found or unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Search query failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/container/tree":{"get":{"tags":["Raw Search"],"summary":"Browse the container tree","description":"List entries located under a given prefix within a container.\n\nPagination uses `page`/`page_size`.\n\nUniform response: { items, total, page, page_size }.","operationId":"container_tree_container_tree_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"container_id","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"Container identifier.","title":"Container Id"},"description":"Container identifier."},{"name":"prefix","in":"query","required":false,"schema":{"type":"string","description":"folder prefix, ex: 'db/users' ('' = root of container)","default":"","title":"Prefix"},"description":"folder prefix, ex: 'db/users' ('' = root of container)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 200).","default":200,"title":"Page Size"},"description":"Items per page (1–1000, default 200)."}],"responses":{"200":{"description":"Entries listed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerTreeResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Search query failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/container/subfolders":{"get":{"tags":["Raw Search"],"summary":"List immediate subfolders","description":"Aggregate the immediate subfolders located under the provided prefix.\n\nPagination is `page`/`page_size`. The server hides any cursor and handles deep paging internally.\n\nUniform response: { items, total, page, page_size } + has_more.","operationId":"container_subfolders_container_subfolders_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"container_id","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"Container identifier.","title":"Container Id"},"description":"Container identifier."},{"name":"prefix","in":"query","required":false,"schema":{"type":"string","description":"folder prefix ('' for root)","default":"","title":"Prefix"},"description":"folder prefix ('' for root)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"description":"Items per page (1–100000, default 1000).","default":1000,"title":"Page Size"},"description":"Items per page (1–100000, default 1000)."}],"responses":{"200":{"description":"Subfolders aggregated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubfoldersResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Aggregation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/container/tree/resolve_path":{"post":{"tags":["Raw Search"],"summary":"Resolve a full folder chain and prefetch its contents","description":"Resolve an entry path by hydrating every folder segment leading to it.\n\nThe resolver fetches the immediate subfolders and a page of files for each segment in the chain. It also can prefetch parts around a target sequence.","operationId":"resolve_container_tree_path_container_tree_resolve_path_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvePathRequest"}}},"required":true},"responses":{"200":{"description":"Folder chain resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvePathResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Folder or entry not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Search query failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/container/file_info":{"get":{"tags":["Raw Search"],"summary":"Fetch metadata for a raw entry","description":"Return the stored metadata for a raw entry located in the container tree.","operationId":"container_file_info_container_file_info_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"container_id","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"Container identifier.","title":"Container Id"},"description":"Container identifier."},{"name":"entry_path","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Path of the entry inside the container.","title":"Entry Path"},"description":"Path of the entry inside the container."}],"responses":{"200":{"description":"Entry metadata returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawFileInfoResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Entry not found in the index.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Search error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/raw/files":{"get":{"tags":["Raw Search"],"summary":"List indexed raw files","description":"Return raw files that are done, non-duplicate and have indexed lines.","operationId":"list_raw_files_raw_files_get","responses":{"200":{"description":"Raw files listed successfully.","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RawFileAddedSummary"},"type":"array","title":"Response List Raw Files Raw Files Get"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/raw/download":{"post":{"tags":["Raw Search"],"summary":"Generate a download URL for a raw file","description":"Return a short-lived pre-signed URL that allows downloading a raw file. Either provide the `sha256_original` hash directly or specify both `container_id` and `entry_path` so the hash can be resolved.\n\nYou can pass parameters either as query string or in the JSON body. If both are provided, the JSON body values take precedence.","operationId":"raw_download_source_raw_download_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"sha256_original","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SHA-256 of the original file (alternative to container_id + entry_path).","title":"Sha256 Original"},"description":"SHA-256 of the original file (alternative to container_id + entry_path)."},{"name":"container_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Container identifier (with entry_path, resolves the file hash).","title":"Container Id"},"description":"Container identifier (with entry_path, resolves the file hash)."},{"name":"entry_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Path of the entry inside the container.","title":"Entry Path"},"description":"Path of the entry inside the container."},{"name":"expires_in","in":"query","required":false,"schema":{"type":"integer","maximum":3600,"minimum":60,"description":"Pre-signed URL lifetime in seconds (60–3600, default 900).","default":900,"title":"Expires In"},"description":"Pre-signed URL lifetime in seconds (60–3600, default 900)."}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"description":"Optional JSON body with `sha256_original`, `container_id`, `entry_path`, `expires_in`.\nExample: {\"sha256_original\": \"...\", \"container_id\": 123, \"entry_path\": \"path/to/file\", \"expires_in\": 900}","examples":[{"container_id":123,"entry_path":"db/users.txt","expires_in":900}],"title":"Payload"}}}},"responses":{"200":{"description":"Pre-signed URL generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadSourceResponse"}}}},"400":{"description":"Missing or invalid identifier (container_id / expires_in).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"402":{"description":"Insufficient GB quota to unlock the file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Raw download requires an active raw plan, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"File not found, sha256 unknown, or raw file not registered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Storage or search error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/raw/download/preview":{"get":{"tags":["Raw Search"],"summary":"Preview unlock cost for a raw file","description":"Return the quota impact of unlocking a raw file. Either provide `sha256_original` or the tuple (`container_id`, `entry_path`).","operationId":"raw_download_preview_raw_download_preview_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"sha256_original","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SHA-256 of the original file (alternative to container_id + entry_path).","title":"Sha256 Original"},"description":"SHA-256 of the original file (alternative to container_id + entry_path)."},{"name":"container_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Container identifier (with entry_path, resolves the file hash).","title":"Container Id"},"description":"Container identifier (with entry_path, resolves the file hash)."},{"name":"entry_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Path of the entry inside the container.","title":"Entry Path"},"description":"Path of the entry inside the container."}],"responses":{"200":{"description":"Preview computed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawDownloadPreviewResponse"}}}},"400":{"description":"Missing or invalid identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"File not found, sha256 unknown, or raw file not registered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Search error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/raw/export":{"post":{"tags":["Raw Search"],"summary":"Queue a raw export job","description":"Queue an asynchronous export job for raw search results. Mode 'rows' exports a CSV of matching lines, mode 'parts' exports a text snapshot of matching parts.\n\n**Important**: This export only includes results that have been previously unlocked via Mass Unlock. No points are consumed during export. Use `/search/raw/unlock/task` to unlock results first.","operationId":"raw_export_search_raw_export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"export","in":"query","required":true,"schema":{"type":"string","pattern":"^(rows|parts)$","description":"Export mode: `rows` (CSV of matching lines) or `parts` (text snapshot of matching parts).","title":"Export"},"description":"Export mode: `rows` (CSV of matching lines) or `parts` (text snapshot of matching parts)."},{"name":"dedup","in":"query","required":false,"schema":{"type":"boolean","description":"Deduplicate the export. `rows`: drop duplicate lines (whitespace-normalized, case-insensitive). `parts`: drop blocks with identical content.","default":false,"title":"Dedup"},"description":"Deduplicate the export. `rows`: drop duplicate lines (whitespace-normalized, case-insensitive). `parts`: drop blocks with identical content."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawSearchRequest"}}}},"responses":{"200":{"description":"Export job queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"Invalid query (too short, too long, or empty with no filters), maximum concurrent exports reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Raw export requires an active raw plan, search blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"An identical export is already queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded. See Retry-After / X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Error while creating the export job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/raw/unlock/task":{"post":{"tags":["Raw Search"],"summary":"Queue an async mass unlock task for raw search","description":"Creates an asynchronous unlock **Task** for the given raw search filters. Returns a `task_id` you can poll with the task-status endpoint.\n\n**Request body**\n- `q`: Optional search string (minimum 4 characters if provided). Required if no other filter is provided.\n- `container_id`: Optional container identifier.\n- `exts`: Optional list of file extensions to keep.\n- `exts_not`: Optional list of file extensions to exclude.\n- `categories`: Optional list of raw file categories.\n- `categories_not`: Optional list of raw file categories to exclude.\n- `file_name`: Optional wildcard applied to `entry_name`.\n- `file_name_not`: Optional wildcard that must NOT match `entry_name`.\n- `folder_name`: Optional match on the folder holding the block (max 20 items, min 4 chars each).\n- `folder_name_not`: Optional folders to exclude. Not a standalone selector.\n- `folder_name_exact`: Require `folder_name` values to be a whole folder at any depth.\n- `exclude_terms`: Optional content terms to exclude (substring, case-insensitive, max 20, min 4 chars each).\n- `ingested_at_min`: Optional datetime to filter results ingested on or after.\n- `ingested_at_max`: Optional datetime to filter results ingested on or before.\n\n**Query parameters**\n- `max`: Optional cap of new unlocks. 0 or omitted = use all your points.\n\n**Plan requirement**\nRequires a paid plan with `raw_search` enabled.\n\n**Concurrency limit**\n- raw: max 1 running and 1 queued task per account.\n- identical active requests return the existing task id.\n- email / domain: max 5 concurrent tasks per user.\n- Returns 429 if limit exceeded.","operationId":"queue_raw_unlock_task_search_raw_unlock_task_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"0 or omitted = use all your points","title":"Max"},"description":"0 or omitted = use all your points"},{"name":"dedup","in":"query","required":false,"schema":{"type":"boolean","description":"Skip blocks with identical content (same block_fp64) so each unique content is unlocked once. Matches the deduplicated search/export view.","default":false,"title":"Dedup"},"description":"Skip blocks with identical content (same block_fp64) so each unique content is unlocked once. Matches the deduplicated search/export view."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawSearchRequest"}}}},"responses":{"200":{"description":"Unlock task queued; returns a task_id to poll.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Queue Raw Unlock Task Search Raw Unlock Task Post"}}}},"400":{"description":"Invalid query (too short, too long, or empty with no filters), insufficient points, unlock not needed on your plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Raw search not available on your plan, this search is blocked, account banned, or pending email verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded, or the account already has a queued raw unlock task.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"503":{"description":"Raw search under maintenance, or public API temporarily disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile":{"get":{"tags":["Profile"],"summary":"Get user profile","description":"Return the profile of the authenticated user.","operationId":"get_profile_profile_get","responses":{"200":{"description":"User profile retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBase"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error: invalid request parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Too many requests: rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["Profile"],"summary":"Update user profile","description":"Update the authenticated user's profile with fields defined by `ProfileUpdate` (name, organization, address, country, VAT number, etc.). Email is not editable here.\n\n**Behavior**\n- Only whitelisted fields from `ProfileUpdate` are applied.\n\n**Response**\nReturns the updated profile.","operationId":"update_profile_profile_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdate"}}},"required":true},"responses":{"200":{"description":"User profile updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBase"}}}},"400":{"description":"Invalid VAT number.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Unauthorized. Invalid or missing authentication token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error: invalid request parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Too many requests: rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/profile/unlocked":{"get":{"tags":["Unlocked Leaks"],"summary":"List your unlocked leaks","description":"Return a paginated list of unlocked leaks for the authenticated account.\n\nPagination\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n\nFiltering\n- `search` optional free-text filter applied to URL or username.\n- `is_email` optional boolean: `true` emails only, `false` usernames only, `null` both.\n- `list_id` optional integer: filter leaks assigned to this list.\n- `list_none` optional boolean: filter leaks with no list assignment.\n\nResponse semantics\n- When no filter is provided at all (no `search`, no `is_email`, no list filter), `total` equals your global count of unlocked items.\n- When any filter is provided (including only `is_email`), `total` equals the filtered count, while `total_unlocked` remains your global total.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 Page out of range.\n- 422 Request validation error.","operationId":"get_unlocked_leaks_profile_unlocked_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional free-text filter on URL or username.","title":"Search"},"description":"Optional free-text filter on URL or username."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true=email, false=username","title":"Is Email"},"description":"true=email, false=username"},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Filter by list id.","title":"List Id"},"description":"Filter by list id."},{"name":"list_none","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Only leaks without a list when true","title":"List None"},"description":"Only leaks without a list when true"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by remediation status: new, in_progress, fixed, accepted_risk","title":"Status"},"description":"Filter by remediation status: new, in_progress, fixed, accepted_risk"}],"responses":{"200":{"description":"Unlocked leaks returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedUnlockedLeaksResponse"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Page out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/advanced":{"get":{"tags":["Unlocked Leaks"],"summary":"List your unlocked leaks with advanced filters","description":"Return a paginated list of your unlocked leaks filtered by the same fields supported by `LeakSearchFilters`. Filters are passed as query parameters. Optional `search` can further narrow results.\n\nPagination\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n\nFiltering\n- Any combination of `LeakSearchFilters` fields.\n- `search` optional free-text filter applied to URL or username.\n- `list_id` optional integer: filter leaks assigned to this list.\n- `list_none` optional boolean: filter leaks with no list assignment.\n\nResponse semantics\n- `total` and `total_unlocked` both equal the number of unlocked items matching the filters.","operationId":"search_unlocked_advanced_profile_unlocked_advanced_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional free-text filter on URL or username.","title":"Search"},"description":"Optional free-text filter on URL or username."},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Filter by list id.","title":"List Id"},"description":"Filter by list id."},{"name":"list_none","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Only leaks without a list when true.","title":"List None"},"description":"Only leaks without a list when true."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by remediation status: new, in_progress, fixed, accepted_risk","title":"Status"},"description":"Filter by remediation status: new, in_progress, fixed, accepted_risk"},{"name":"username","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Username values to match.","title":"Username"},"description":"Username values to match."},{"name":"username_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Username values to exclude.","title":"Username Not"},"description":"Username values to exclude."},{"name":"username_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Username matching mode; default contains.","title":"Username Match Type"},"description":"Username matching mode; default contains."},{"name":"username_not_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded username matching mode; default contains.","title":"Username Not Match Type"},"description":"Excluded username matching mode; default contains."},{"name":"password","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Password values to match.","title":"Password"},"description":"Password values to match."},{"name":"password_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Password values to exclude.","title":"Password Not"},"description":"Password values to exclude."},{"name":"password_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Password matching mode; default contains.","title":"Password Match Type"},"description":"Password matching mode; default contains."},{"name":"password_not_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded password matching mode; default contains.","title":"Password Not Match Type"},"description":"Excluded password matching mode; default contains."},{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"URL values to match.","title":"Url"},"description":"URL values to match."},{"name":"url_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"URL values to exclude.","title":"Url Not"},"description":"URL values to exclude."},{"name":"url_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"URL matching mode; default contains.","title":"Url Match Type"},"description":"URL matching mode; default contains."},{"name":"url_not_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded URL matching mode; default contains.","title":"Url Not Match Type"},"description":"Excluded URL matching mode; default contains."},{"name":"url_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"URL domain values to match.","title":"Url Domain"},"description":"URL domain values to match."},{"name":"url_domain_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"URL domain values to exclude.","title":"Url Domain Not"},"description":"URL domain values to exclude."},{"name":"url_domain_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"URL domain matching mode; default contains.","title":"Url Domain Match Type"},"description":"URL domain matching mode; default contains."},{"name":"url_domain_not_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded URL domain matching mode; default contains.","title":"Url Domain Not Match Type"},"description":"Excluded URL domain matching mode; default contains."},{"name":"url_host","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"URL host values to match.","title":"Url Host"},"description":"URL host values to match."},{"name":"url_host_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"URL host values to exclude.","title":"Url Host Not"},"description":"URL host values to exclude."},{"name":"url_host_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"URL host matching mode; default contains.","title":"Url Host Match Type"},"description":"URL host matching mode; default contains."},{"name":"url_host_not_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded URL host matching mode; default contains.","title":"Url Host Not Match Type"},"description":"Excluded URL host matching mode; default contains."},{"name":"username_hash","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Username SHA-1 hash prefix (hex).","title":"Username Hash"},"description":"Username SHA-1 hash prefix (hex)."},{"name":"password_hash","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Password SHA-1 hash prefix (hex).","title":"Password Hash"},"description":"Password SHA-1 hash prefix (hex)."},{"name":"url_scheme","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":20,"strip_whitespace":true}},{"type":"null"}],"description":"URL scheme(s) to include (multi).","title":"Url Scheme"},"description":"URL scheme(s) to include (multi)."},{"name":"url_scheme_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":20,"strip_whitespace":true}},{"type":"null"}],"description":"URL scheme(s) to exclude (multi).","title":"Url Scheme Not"},"description":"URL scheme(s) to exclude (multi)."},{"name":"url_port","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"integer"}},{"type":"null"}],"description":"URL port(s) to include (multi).","title":"Url Port"},"description":"URL port(s) to include (multi)."},{"name":"url_port_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"integer"}},{"type":"null"}],"description":"URL port(s) to exclude (multi).","title":"Url Port Not"},"description":"URL port(s) to exclude (multi)."},{"name":"url_tld","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":10,"strip_whitespace":true}},{"type":"null"}],"description":"URL TLD(s) to include (multi).","title":"Url Tld"},"description":"URL TLD(s) to include (multi)."},{"name":"url_tld_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":10,"strip_whitespace":true}},{"type":"null"}],"description":"URL TLD(s) to exclude (multi).","title":"Url Tld Not"},"description":"URL TLD(s) to exclude (multi)."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Identifier type filter: true=email only, false=username only, null=both.","title":"Is Email"},"description":"Identifier type filter: true=email only, false=username only, null=both."},{"name":"email_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Email domain values to match.","title":"Email Domain"},"description":"Email domain values to match."},{"name":"email_domain_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Email domain values to exclude.","title":"Email Domain Not"},"description":"Email domain values to exclude."},{"name":"email_domain_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Email domain matching mode; default contains.","title":"Email Domain Match Type"},"description":"Email domain matching mode; default contains."},{"name":"email_domain_not_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded email domain matching mode; default contains.","title":"Email Domain Not Match Type"},"description":"Excluded email domain matching mode; default contains."},{"name":"email_host","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Email host values to match.","title":"Email Host"},"description":"Email host values to match."},{"name":"email_host_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":100,"strip_whitespace":true}},{"type":"null"}],"description":"Email host values to exclude.","title":"Email Host Not"},"description":"Email host values to exclude."},{"name":"email_host_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Email host matching mode; default contains.","title":"Email Host Match Type"},"description":"Email host matching mode; default contains."},{"name":"email_host_not_match_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded email host matching mode; default contains.","title":"Email Host Not Match Type"},"description":"Excluded email host matching mode; default contains."},{"name":"email_tld","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":10,"strip_whitespace":true}},{"type":"null"}],"description":"Email TLD(s) to include (multi).","title":"Email Tld"},"description":"Email TLD(s) to include (multi)."},{"name":"email_tld_not","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","maxLength":10,"strip_whitespace":true}},{"type":"null"}],"description":"Email TLD(s) to exclude (multi).","title":"Email Tld Not"},"description":"Email TLD(s) to exclude (multi)."},{"name":"password_strength","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PasswordStrengthCategory-Input"},{"type":"null"}],"description":"Filter by password strength category. too_weak = score 0-2, weak = 3-4, medium = 5-7, strong = 8+.","title":"Password Strength"},"description":"Filter by password strength category. too_weak = score 0-2, weak = 3-4, medium = 5-7, strong = 8+."},{"name":"added_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only include leaks indexed on/after this UTC datetime.","title":"Added From"},"description":"Only include leaks indexed on/after this UTC datetime."},{"name":"added_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only include leaks indexed on/before this UTC datetime.","title":"Added To"},"description":"Only include leaks indexed on/before this UTC datetime."},{"name":"force_and","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"When true, values within each field are combined with AND instead of OR.","title":"Force And"},"description":"When true, values within each field are combined with AND instead of OR."}],"responses":{"200":{"description":"Unlocked leaks returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedUnlockedLeaksResponse"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Page out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/export":{"post":{"tags":["Unlocked Leaks"],"summary":"Export your unlocked leaks to CSV/TXT/JSON","description":"Queue an export of your unlocked leaks with optional filters. The job runs asynchronously and the file will appear in the Exports section when ready.\n\nBody (JSON)\n- `search` optional free-text filter applied to URL or username.\n- `is_email` optional boolean: `true` emails only, `false` usernames only, `null` both.\n- `list_id` optional list id filter.\n- `list_none` optional boolean to only include leaks without list.\n- `unlocked_at_min` optional ISO 8601 timestamp (with timezone) to include items unlocked at or after this instant.\n\nQuery parameters\n- `format` optional output format: `csv` (default), `txt`, or `json`.\n\nLimits\n- You can have at most 5 exports with status PENDING or IN_PROGRESS.\n\nResponse\n`ExportResponse` with `status`, `message`, and `export_id`.","operationId":"export_unlocked_leaks_profile_unlocked_export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlockedExportRequest"}}}},"responses":{"200":{"description":"Export queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"Maximum concurrent exports reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/advanced/export":{"post":{"tags":["Unlocked Leaks"],"summary":"Export your unlocked leaks to CSV/TXT/JSON (advanced filters)","description":"Queue an export of your unlocked leaks filtered by the same fields supported by `LeakSearchFilters`. Provide advanced filters in the JSON request body. The job runs asynchronously and the file will appear in the Exports section when ready.\n\nRequest body\n- JSON payload following the `LeakSearchFilters` schema.\n\nQuery parameters\n- `unlocked_at_min` optional ISO 8601 timestamp with timezone to include items unlocked at or after this instant.\n- `list_id` optional list id filter.\n- `list_none` optional boolean to only include leaks without list.\n- `format` optional output format: `csv` (default), `txt`, or `json`.\n\nLimits\n- At least one advanced filter is required.\n- You can have at most 5 exports with status PENDING or IN_PROGRESS.\n\nResponse\n`ExportResponse` with `status`, `message`, and `export_id`.","operationId":"export_unlocked_advanced_leaks_profile_unlocked_advanced_export_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by list id","title":"List Id"},"description":"Filter by list id"},{"name":"list_none","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Only leaks without list","default":false,"title":"List None"},"description":"Only leaks without list"},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."},{"name":"unlocked_at_min","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only include items unlocked at or after this ISO 8601 timestamp (with timezone).","title":"Unlocked At Min"},"description":"Only include items unlocked at or after this ISO 8601 timestamp (with timezone)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeakSearchFilters"}}}},"responses":{"200":{"description":"Export queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"No filters provided, maximum concurrent exports reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/lists":{"get":{"tags":["Unlocked Leaks Lists"],"summary":"List your Unlocked Lists","description":"Return all your Unlocked Lists in ascending creation order.\n\nParameters\n- `with_counts` when true, each list includes `items_count`, the number of unlocked leaks currently assigned to that list. When false, `items_count` is returned as 0 to avoid extra computation.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 422 Request validation error.","operationId":"list_unlocked_lists_profile_unlocked_lists_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"with_counts","in":"query","required":false,"schema":{"type":"boolean","description":"When true, include `items_count` per list.","default":true,"title":"With Counts"},"description":"When true, include `items_count` per list."}],"responses":{"200":{"description":"Lists returned successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UnlockedListOut"},"title":"Response List Unlocked Lists Profile Unlocked Lists Get"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Unlocked Leaks Lists"],"summary":"Create an Unlocked List","description":"Create a new list to organize your unlocked leaks.\n\nRules\n- Maximum number of lists is determined by your current plan.\n- List names must be unique per account, case-insensitive.\n\nResponse\n- Returns the created list. `items_count` is 0 at creation time.\n\n**Errors**\n- 400 No plan, or maximum number of lists reached.\n- 401 Authentication required, or invalid/expired API key.\n- 409 A list with the same name already exists.\n- 422 Request validation error.","operationId":"create_unlocked_list_profile_unlocked_lists_post","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlockedListCreateIn","description":"JSON payload with `name` (required) and `color` (optional UI attribute)."}}}},"responses":{"200":{"description":"List created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlockedListOut"}}}},"400":{"description":"No plan, or maximum number of lists reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"A list with the same name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/lists/{list_id}":{"patch":{"tags":["Unlocked Leaks Lists"],"summary":"Update an Unlocked List","description":"Update list metadata. Only provided fields are updated.\n\nUpdatable fields\n- `name` must be unique per account, case-insensitive.\n- `color` optional UI attribute.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 List not found.\n- 409 A list with the same name already exists.\n- 422 Request validation error.","operationId":"update_unlocked_list_profile_unlocked_lists__list_id__patch","security":[{"BearerAuth":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"ID of the list to update","title":"List Id"},"description":"ID of the list to update"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlockedListUpdateIn","description":"JSON payload with optional `name` and optional `color`."}}}},"responses":{"200":{"description":"List updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlockedListOut"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"List not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"A list with the same name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Unlocked Leaks Lists"],"summary":"Delete an Unlocked List","description":"Delete the list and start a background cleanup of related leak assignments.\n\nBehavior\n- The list is removed immediately.\n- Any unlocked leak that referenced this list will be cleaned up by a background task.\n- The response includes a `task_id` that you can poll at `/profile/unlocked/list-tasks/{task_id}`.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 List not found.\n- 422 Request validation error.","operationId":"delete_unlocked_list_profile_unlocked_lists__list_id__delete","security":[{"BearerAuth":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"ID of the list to delete","title":"List Id"},"description":"ID of the list to delete"}],"responses":{"200":{"description":"List deleted; cleanup task started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusOut"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"List not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/lists/{list_id}/clear":{"post":{"tags":["Unlocked Leaks Lists"],"summary":"Clear list assignment from leaks while keeping the list","description":"Remove the list assignment from all unlocked leaks that currently reference this list. The list itself is kept. The operation runs in the background and returns a `task_id`.","operationId":"clear_unlocked_list_profile_unlocked_lists__list_id__clear_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"ID of the list whose assignments will be cleared","title":"List Id"},"description":"ID of the list whose assignments will be cleared"}],"responses":{"200":{"description":"Clear task started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusOut"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"List not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/list-tasks/{task_id}":{"get":{"tags":["Unlocked Leaks Lists"],"summary":"Get unlocked lists background task status","description":"Return the status of a background task started by unlocked lists operations.\n\nThis endpoint is only for tasks created by:\n- `POST /profile/unlocked/lists/bulk-assign` (bulk assign/unassign list)\n\nUsage\n- Use the exact `task_id` returned by one of these endpoints.\n\nImportant\n- Do **not** use this endpoint for unlock tasks created by `/search/.../unlock/task`. For unlock tasks, poll `/tasks/{task_id}` instead.","operationId":"get_task_status_profile_unlocked_list_tasks__task_id__get","security":[{"BearerAuth":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Task id returned by an unlocked-lists operation (delete / clear / bulk).","title":"Task Id"},"description":"Task id returned by an unlocked-lists operation (delete / clear / bulk)."}],"responses":{"200":{"description":"Task status returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusOut"}}}},"400":{"description":"Invalid task_id for this endpoint (use /tasks/{task_id} for unlock tasks).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/{leak_id}/list":{"put":{"tags":["Unlocked Leaks Lists"],"summary":"Assign or unassign a list for one unlocked leak","description":"Assign a specific list to a single unlocked leak, or unassign it.\n\nBehavior\n- Provide `list_id` to assign. Use `null` to remove the assignment.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 Unlocked leak not found, or list not found.\n- 422 Request validation error.\n- 429 Rate limit exceeded.","operationId":"set_list_for_unlocked_profile_unlocked__leak_id__list_put","security":[{"BearerAuth":[]}],"parameters":[{"name":"leak_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Unlocked leak identifier","title":"Leak Id"},"description":"Unlocked leak identifier"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignListIn","description":"JSON payload with `list_id` to assign. Use null to unassign."}}}},"responses":{"200":{"description":"List assignment updated.","content":{"application/json":{"schema":{}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Unlocked leak not found, or list not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"/profile/unlocked/{leak_id}/comment":{"put":{"tags":["Unlocked Leaks Lists"],"summary":"Create or update a comment for one unlocked leak","description":"Create or update a user comment on a single unlocked leak. Empty or whitespace-only comments are treated as delete.\n\nLimits\n- Max 500 characters.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 Unlocked leak not found.\n- 422 Comment exceeds 500 characters.","operationId":"upsert_comment_for_unlocked_profile_unlocked__leak_id__comment_put","security":[{"BearerAuth":[]}],"parameters":[{"name":"leak_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Unlocked leak identifier","title":"Leak Id"},"description":"Unlocked leak identifier"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentUpsertIn","description":"JSON payload with a single `comment` field. Empty string removes the comment."}}}},"responses":{"200":{"description":"Comment saved (or removed when empty).","content":{"application/json":{"schema":{}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Unlocked leak not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Comment exceeds 500 characters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Unlocked Leaks Lists"],"summary":"Delete the comment of one unlocked leak","description":"Delete the user comment attached to a specific unlocked leak.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 Unlocked leak not found.\n- 422 Request validation error.","operationId":"delete_comment_for_unlocked_profile_unlocked__leak_id__comment_delete","security":[{"BearerAuth":[]}],"parameters":[{"name":"leak_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Unlocked leak identifier","title":"Leak Id"},"description":"Unlocked leak identifier"}],"responses":{"200":{"description":"Comment deleted.","content":{"application/json":{"schema":{}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Unlocked leak not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/unlocked/{leak_id}/status":{"put":{"tags":["Unlocked Leaks Lists"],"summary":"Update the remediation status of one unlocked leak","description":"Set the remediation status of a single unlocked leak.\n\nValid statuses: `new`, `in_progress`, `fixed`, `accepted_risk`.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 Unlocked leak not found.\n- 422 Invalid status value.\n- 429 Rate limit exceeded.","operationId":"set_status_for_unlocked_profile_unlocked__leak_id__status_put","security":[{"BearerAuth":[]}],"parameters":[{"name":"leak_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Unlocked leak identifier","title":"Leak Id"},"description":"Unlocked leak identifier"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdateIn","description":"JSON payload with a single `status` field."}}}},"responses":{"200":{"description":"Status updated.","content":{"application/json":{"schema":{}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Unlocked leak not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Invalid status value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"/profile/unlocked/bulk-status":{"post":{"tags":["Unlocked Leaks Lists"],"summary":"Bulk update the remediation status across many unlocked leaks","description":"Start a background task that updates the remediation status on all unlocked leaks matching the provided filters.\n\nValid statuses: `new`, `in_progress`, `fixed`, `accepted_risk`.\n\nFiltering\n- Supports the same filtering fields used by the advanced unlocked search API.\n- Optional helpers, applied on top of `filters` when both are sent: `search`, `is_email`, `list_id_filter`, `list_none`, `status_filter`.\n\nResponse\n- Returns a `task_id` that you can poll with `/profile/unlocked/list-tasks/{task_id}`.","operationId":"bulk_update_status_profile_unlocked_bulk_status_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkStatusUpdateIn","description":"JSON payload with `target_status` and optional filter fields to select which unlocked leaks will be updated."}}},"required":true},"responses":{"200":{"description":"Bulk status task started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusOut"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/profile/unlocked/lists/bulk-assign":{"post":{"tags":["Unlocked Leaks Lists"],"summary":"Bulk assign or unassign a list across many unlocked leaks","description":"Start a background task that assigns a target list to all unlocked leaks matching the provided filters. Use a null `target_list_id` to remove the assignment for matches.\n\nFiltering\n- Supports the same filtering fields used by the advanced unlocked search API.\n- Optional helpers, applied on top of `filters` when both are sent: `search`, `is_email`, `list_id_filter`, `list_none`, `status_filter`.\n\nValidation\n- `target_list_id` must be a positive integer when provided. Use null to unassign.\n\nResponse\n- Returns a `task_id` that you can poll with `/profile/unlocked/list-tasks/{task_id}`.","operationId":"bulk_assign_list_profile_unlocked_lists_bulk_assign_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAssignIn","description":"JSON payload with `target_list_id` (int or null) and optional filter fields to select which unlocked leaks will be updated. Filter shape matches the advanced unlocked search API."}}},"required":true},"responses":{"200":{"description":"Bulk assign task started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusOut"}}}},"400":{"description":"Invalid target_list_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Target list not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/profile/raw/downloads":{"get":{"tags":["Profile Downloads"],"summary":"List your raw file downloads","description":"Return a paginated list of your raw file downloads within the retention window. Team members see the account owner's downloads.","operationId":"list_raw_downloads_profile_raw_downloads_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page.","default":20,"title":"Page Size"},"description":"Items per page."}],"responses":{"200":{"description":"Downloads listed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_DownloadLogItem_"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Page out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/raw/unlocked-parts":{"get":{"tags":["Profile Downloads"],"summary":"List your unlocked raw files","description":"Return a paginated list of the raw file entries you have unlocked (one row per entry: file name, path, category, content preview), most recent first. Optional `q` filters by inner file name, path, source file or category. Team members see the account owner's unlocks.","operationId":"list_raw_unlocked_parts_endpoint_profile_raw_unlocked_parts_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page.","default":20,"title":"Page Size"},"description":"Items per page."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Filter by file name, path, source or category.","title":"Q"},"description":"Filter by file name, path, source or category."}],"responses":{"200":{"description":"Unlocked raw files listed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_RawUnlockedPartItem_"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/raw/downloads/{download_id}/file":{"post":{"tags":["Profile Downloads"],"summary":"Download a raw file through the platform","description":"Resolve a previously unlocked raw file download and redirect (307) to a short-lived presigned URL for the file.","operationId":"download_raw_file_profile_raw_downloads__download_id__file_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"download_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the download record (from GET /profile/raw/downloads).","title":"Download Id"},"description":"ID of the download record (from GET /profile/raw/downloads)."},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional one-time download token.","title":"Token"},"description":"Optional one-time download token."}],"responses":{"307":{"description":"Temporary redirect to a presigned URL for the raw file.","headers":{"Location":{"description":"Presigned URL for file download.","schema":{"type":"string","format":"uri"}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Account banned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Download not found or raw file unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"410":{"description":"Download expired or previous attempt failed. Unlock the file again to regenerate access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/team":{"get":{"tags":["Team"],"summary":"Get team overview","description":"Returns the full team structure: owner, active members, pending invitations, plan summary, and member quota.","operationId":"get_team_overview_profile_team_get","responses":{"200":{"description":"Team overview","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamOverviewResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/profile/team/invitations":{"post":{"tags":["Team"],"summary":"Create a team invitation","description":"Invite a user to join your team by email. An invitation email is sent automatically. Returns 409 if the user already belongs to a team or an invitation is already pending.","operationId":"create_invitation_profile_team_invitations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInvitationCreate"}}},"required":true},"responses":{"200":{"description":"Invitation created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInvitationResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Unprocessable Content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/profile/team/invitations/{invitation_id}/resend":{"post":{"tags":["Team"],"summary":"Resend a team invitation","description":"Resend the invitation email for a pending invitation. Generates a new token and extends the expiration. Rate limited to 1 resend per invitation per 60 seconds.","operationId":"resend_invitation_profile_team_invitations__invitation_id__resend_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the team invitation.","title":"Invitation Id"},"description":"ID of the team invitation."}],"responses":{"200":{"description":"Invitation resent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInvitationResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Not Found"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Unauthorized"},"429":{"description":"Too soon — wait 60 seconds before resending this invitation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/team/invitations/{invitation_id}/revoke":{"post":{"tags":["Team"],"summary":"Revoke a team invitation","description":"Revoke a pending invitation. The invited user will no longer be able to accept it.","operationId":"revoke_invitation_profile_team_invitations__invitation_id__revoke_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the team invitation.","title":"Invitation Id"},"description":"ID of the team invitation."}],"responses":{"200":{"description":"Invitation revoked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInvitationResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Not Found"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Unauthorized"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/team/members/{member_id}":{"delete":{"tags":["Team"],"summary":"Remove a team member","description":"Remove a member from the team. The member's account is detached but not deleted.","operationId":"remove_member_profile_team_members__member_id__delete","security":[{"BearerAuth":[]}],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the team member.","title":"Member Id"},"description":"ID of the team member."}],"responses":{"200":{"description":"Member removed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Not Found"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Unauthorized"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Team"],"summary":"Update a team member's role","description":"Change a team member's role to 'member' or 'admin'.","operationId":"update_member_role_profile_team_members__member_id__patch","security":[{"BearerAuth":[]}],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the team member.","title":"Member Id"},"description":"ID of the team member."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberRoleUpdate"}}}},"responses":{"200":{"description":"Member updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Not Found"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}},"description":"Unprocessable Content"}}}},"/profile/team/leave":{"post":{"tags":["Team"],"summary":"Leave the team","description":"Voluntarily leave the team you are a member of. Team owners cannot use this endpoint.","operationId":"leave_team_profile_team_leave_post","responses":{"200":{"description":"Successfully left the team","content":{"application/json":{"schema":{}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/profile/activities/balance-logs":{"get":{"tags":["Profile"],"summary":"List balance history for the current account","description":"Return a paginated list of balance log entries (points and GB changes) for the authenticated user's account.\n\nTeam members see the owner's aggregated logs.","operationId":"list_balance_logs_profile_activities_balance_logs_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page.","default":20,"title":"Page Size"},"description":"Items per page."},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"Field to sort by.","default":"created_at","title":"Order By"},"description":"Field to sort by."},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","description":"Sort direction: asc or desc.","default":"desc","title":"Order Dir"},"description":"Sort direction: asc or desc."}],"responses":{"200":{"description":"Balance logs returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_BalanceLogItem_"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Page out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/activities/tasks":{"get":{"tags":["Profile"],"summary":"List task history for the current account","description":"Return a paginated list of background tasks (exports, bulk unlocks, etc.) for the authenticated user's account.\n\nTeam members see the owner's aggregated tasks.","operationId":"list_tasks_profile_activities_tasks_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page.","default":20,"title":"Page Size"},"description":"Items per page."},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"Field to sort by.","default":"id","title":"Order By"},"description":"Field to sort by."},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","description":"Sort direction: asc or desc.","default":"desc","title":"Order Dir"},"description":"Sort direction: asc or desc."}],"responses":{"200":{"description":"Tasks returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_UserTaskItem_"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Page out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/preferences":{"get":{"tags":["Profile"],"summary":"Get user preferences","description":"Return the authenticated user's preferences. Defaults are used when no preferences have been saved yet.","operationId":"get_preferences_profile_preferences_get","responses":{"200":{"description":"Preferences returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPreferencesRead"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["Profile"],"summary":"Update user preferences","description":"Partial update of the authenticated user's preferences. Only fields provided in the body are modified.","operationId":"update_preferences_profile_preferences_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPreferencesUpdate"}}},"required":true},"responses":{"200":{"description":"Preferences updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPreferencesRead"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/profile/usage":{"get":{"tags":["Profile"],"summary":"Get plan limits and current usage","description":"Return every plan limit alongside its current consumption for the authenticated account.\n\nScope\n- All counters are account-owner scoped: a team member sees the owner's consumption, since quotas are shared across the team.\n\nSemantics\n- `limit: null` means unlimited.\n- `used: null` means the counter is momentarily unreadable (never 0 by default, so the UI can tell 'unknown' from 'nothing consumed').\n- `caps_enforced: false` means plan caps are globally disabled.\n- `legacy_caps: true` marks a grandfathered account: the daily request cap is not enforced for it (concurrency caps still are).\n\nThis endpoint never mutates a counter: reading it does not consume quota.","operationId":"get_plan_usage_profile_usage_get","responses":{"200":{"description":"Usage returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanUsageResponse"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/stats":{"get":{"tags":["Stats"],"summary":"Get statistics","description":"Return the cached service statistics snapshot. If stats are not available in cache, the endpoint returns `{ \"message\": \"Stats not available\" }`.","operationId":"get_statistics_stats_get","responses":{"200":{"description":"Statistics returned successfully.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StatsResponse"},{"$ref":"#/components/schemas/StatsUnavailableResponse"}],"title":"Response Get Statistics Stats Get"}}}}}}},"/live-stats":{"get":{"tags":["Stats"],"summary":"Get live landing stats","description":"Lightweight live snapshot used by the public landing page (raw lines total, today, ingestion rate, active sources, dark web posts). Refreshed every ~2 min. Public endpoint (no authentication). Returns `{ \"message\": \"Live stats not available\" }` when the cache is empty.","operationId":"get_live_statistics_live_stats_get","responses":{"200":{"description":"Live stats returned successfully.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LiveStatsResponse"},{"$ref":"#/components/schemas/StatsUnavailableResponse"}],"title":"Response Get Live Statistics Live Stats Get"}}}}}}},"/unlock":{"post":{"tags":["Unlock"],"summary":"Unlock selected leaks by ID","description":"Unlock leaks by their IDs for the authenticated account if they have enough points.\n\n**Request body**\n- `leak_ids` array of leak IDs to unlock (max 10,000). Duplicates are ignored while preserving order.\n\n**Behavior**\n- Requires an active paid subscription.\n- 1 point per leak. Points are charged up front and partially refunded if some items were already unlocked during processing.\n- Only found leaks are processed. If none are found, the request fails.\n- The response reflects the final unlocked state from the account-level index.\n\n**Visibility**\n- `id` is included only for paid users.\n- Credentials are included only for items with `unlocked=true`.\n\n**Errors**\n- 400 No leak IDs provided, too many leak IDs, insufficient points, or all selected data already unlocked.\n- 401 Unauthorized.\n- 403 Forbidden: subscription does not allow unlocking.\n- 404 The provided target_list_id does not exist.\n- 410 The selected data is no longer available (refresh your search).\n- 422 Validation error.\n- 500 Billing or indexation error while unlocking.","operationId":"unlock_data_unlock_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlockRequest"}}},"required":true},"responses":{"200":{"description":"Selected leaks successfully unlocked.","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LeakDetails"},"type":"array","title":"Response Unlock Data Unlock Post"}}}},"400":{"description":"No leak IDs provided, too many leak IDs, insufficient points, or all selected data already unlocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Forbidden. The user's subscription does not allow unlocking data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"The provided target_list_id does not exist or is not yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"410":{"description":"The selected data is no longer available (removed during cleanup). Refresh your search results.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"500":{"description":"Billing or indexation error while unlocking.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/exports":{"get":{"tags":["Exports"],"summary":"List export jobs","description":"Return the current account's export jobs ordered by most recent first. Supports pagination.\n\n**Pagination**\n- `page` starts at 1.\n- `page_size` default and maximum are defined by server settings (default 20, max 100 if not configured).\n\n**Response**\n`PaginatedResponse[ExportBase]` with `items`, `total`, `page`, `page_size`.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 Page out of range.\n- 422 Request validation error.\n- 429 Rate limit exceeded.","operationId":"get_exports_exports_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number starting at 1","default":1,"title":"Page"},"description":"Page number starting at 1"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of items per page","default":20,"title":"Page Size"},"description":"Number of items per page"}],"responses":{"200":{"description":"Exports retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ExportBase_"}}}},"401":{"description":"Unauthorized. The user is not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Page out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error: invalid request parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"description":"Too many requests: rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"/notification_methods":{"get":{"tags":["Notifications"],"summary":"List notification methods","description":"Return all notification methods configured for the current account.\n\nMethod types\n- `email`\n- `slack` (Incoming Webhook URL)\n- `telegram` (`value` = bot token, `second_value` = chat_id)\n- `webhook` (generic HTTP webhook)\n- `discord` (Discord Webhook URL)\n\nResponse\nArray of objects with `id`, `type`, `value`, `second_value`, `timestamp`.","operationId":"list_notification_methods_notification_methods_get","responses":{"200":{"description":"Notification methods listed successfully.","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NotificationMethodOut"},"type":"array","title":"Response List Notification Methods Notification Methods Get"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["Notifications"],"summary":"Create notification method","description":"Create a new notification method for the current account.\n\nBody fields\n- `type` one of: `email`, `slack`, `telegram`, `webhook`, `discord`.\n- `value` string. For Slack/Discord use the webhook URL. For Telegram use the bot token.\n- `second_value` optional. Required for Telegram (`chat_id`).\n\nResponse\nObject with `id`, `type`, `value`, `second_value`, `timestamp`.","operationId":"create_notification_method_notification_methods_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationMethodCreateRequest"}}},"required":true},"responses":{"200":{"description":"Method created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationMethodOut"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Feature not available on your plan (free tier restricts non-email channels and extra recipients).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/notification_methods/{method_id}":{"patch":{"tags":["Notifications"],"summary":"Update notification method","description":"Update an existing notification method owned by the current account.\n\n**Errors**\n- 401 Authentication required.\n- 404 Notification method not found.\n- 422 Request validation error.","operationId":"update_notification_method_notification_methods__method_id__patch","security":[{"BearerAuth":[]}],"parameters":[{"name":"method_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification method.","title":"Method Id"},"description":"ID of the notification method."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationMethodCreateRequest"}}}},"responses":{"200":{"description":"Method updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationMethodOut"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Notification method not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Notifications"],"summary":"Delete notification method","description":"Delete a notification method owned by the current account.\n\n**Errors**\n- 401 Authentication required.\n- 404 Notification method not found.\n- 409 Method is still used by active notifications.\n- 422 Request validation error.","operationId":"delete_notification_method_notification_methods__method_id__delete","security":[{"BearerAuth":[]}],"parameters":[{"name":"method_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification method.","title":"Method Id"},"description":"ID of the notification method."}],"responses":{"200":{"description":"Method deleted successfully.","content":{"application/json":{"schema":{}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Notification method not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"Method is still used by active notifications.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications":{"get":{"tags":["Notifications"],"summary":"List notifications","description":"Return all notifications configured for the current account, including linked method info.\n\nResponse\nArray of objects with fields like `id`, `method_id`, `type`, `second_type`, `value`, `filters`, `is_active`, `timestamp`, `method_type`, `method_value`, `auto_unlock`, `max_points`, `daily_spent`, `daily_reset_at`, `total_notifications`, `total_cost`.","operationId":"list_notifications_notifications_get","responses":{"200":{"description":"Notifications listed successfully.","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NotificationOut"},"type":"array","title":"Response List Notifications Notifications Get"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["Notifications"],"summary":"Create notification","description":"Create a new notification bound to an existing notification method.\n\nSupported types\n- `email` requires `value` (email). `second_type` is not allowed.\n- `domain` requires `value` (domain). `second_type` optional: one of domain leak types, default `ALL`.\n- `advanced` requires `filters` (no `value`). Bulk is not allowed.\n\nBulk creation\n- For `email` and `domain`, set `bulk=true` and provide newline-separated values in `value` to create several notifications at once.\n\nLimit\n- Max notifications = plan limit + extra monitoring assets purchased.","operationId":"create_notification_notifications_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationCreateRequest"}}},"required":true},"responses":{"200":{"description":"Notification created successfully.","content":{"application/json":{"schema":{"anyOf":[{"items":{"$ref":"#/components/schemas/NotificationOut"},"type":"array"},{"$ref":"#/components/schemas/NotificationOut"}],"title":"Response Create Notification Notifications Post"}}}},"400":{"description":"Invalid parameters (missing value, invalid type, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Feature or channel not allowed on your plan (free-tier restrictions or per-type plan gates), or monitoring limit reached (buy assets / upgrade).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Referenced notification method not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"409":{"description":"Duplicate notification already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/notifications/{notification_id}":{"patch":{"tags":["Notifications"],"summary":"Update notification","description":"Update an existing notification owned by the current account. All type-specific rules from creation apply.","operationId":"update_notification_notifications__notification_id__patch","security":[{"BearerAuth":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification.","title":"Notification Id"},"description":"ID of the notification."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationCreateRequest"}}}},"responses":{"200":{"description":"Notification updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationOut"}}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"Feature not included in your plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Notification not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Notifications"],"summary":"Delete notification","description":"Delete a single notification owned by the current account.","operationId":"delete_notification_notifications__notification_id__delete","security":[{"BearerAuth":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification.","title":"Notification Id"},"description":"ID of the notification."}],"responses":{"200":{"description":"Notification deleted successfully.","content":{"application/json":{"schema":{}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Notification not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/bulk":{"delete":{"tags":["Notifications"],"summary":"Delete multiple notifications","description":"Delete multiple notifications owned by the current account.\n\nBody\n- `ids` array of notification IDs to delete.","operationId":"delete_notifications_notifications_bulk_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationsDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Notifications deleted successfully.","content":{"application/json":{"schema":{}}}},"400":{"description":"No notification IDs provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/notifications/{notification_id}/active":{"patch":{"tags":["Notifications"],"summary":"Set notification active","description":"Enable or disable a notification by ID.","operationId":"set_notification_active_notifications__notification_id__active_patch","security":[{"BearerAuth":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification.","title":"Notification Id"},"description":"ID of the notification."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationStatusUpdateRequest"}}}},"responses":{"200":{"description":"Status updated successfully.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Notification Active Notifications  Notification Id  Active Patch"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Notification not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notification_methods/test":{"post":{"tags":["Notifications"],"summary":"Test notification method","description":"Validate that the provided parameters allow sending a test notification.\n\nEmail: `value`=recipient email address. Slack: Incoming Webhook URL. Telegram: `value`=bot token, `second_value`=chat_id. Discord: Webhook URL. Webhook: sends a JSON payload to the provided URL.","operationId":"test_notification_method_notification_methods_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationMethodCreateRequest"}}},"required":true},"responses":{"200":{"description":"Test notification sent successfully.","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid parameters or delivery failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded (30 tests per hour).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Internal error while sending the test notification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/notification_methods/{method_id}/test-with-data":{"post":{"tags":["Notifications"],"summary":"Test notification method with fake data","description":"Send a test notification with realistic fake data.\n\nSupports all notification types via the `type` query parameter:\n- `leak` (default): Test with fake credential leaks\n- `raw`: Test with fake raw search results\n- `dark_web`: Test with fake dark web posts\n\nRate limit: 30 tests per hour.\n\nSupported for all method types: email, slack, telegram, webhook, discord.","operationId":"test_notification_method_with_data_notification_methods__method_id__test_with_data_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"method_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification method.","title":"Method Id"},"description":"ID of the notification method."},{"name":"notification_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(leak|raw|dark_web)$","description":"Fake data type: leak (default), raw, or dark_web.","default":"leak","title":"Notification Type"},"description":"Fake data type: leak (default), raw, or dark_web."}],"responses":{"200":{"description":"Test notification sent successfully.","content":{"application/json":{"schema":{}}}},"400":{"description":"Delivery failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Notification method not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"429":{"description":"Rate limit exceeded (30 tests per hour).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"500":{"description":"Internal error while sending the test notification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/stats":{"get":{"tags":["Notifications"],"summary":"Get notification stats","description":"Return monitored assets usage and limits (plan + extra assets) at account level.","operationId":"notification_stats_notifications_stats_get","responses":{"200":{"description":"Stats returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationStatsResponse"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}}},"security":[{"BearerAuth":[]}]}},"/notification_runs":{"get":{"tags":["Notifications Runs"],"summary":"List notification runs","description":"Return paginated notification runs for the current user ordered by most recent first.\n\n**Pagination**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 20).\n\n**Response**\n`PaginatedResponse[NotificationRunBase]` with `items`, `total`, `page`, `page_size`.","operationId":"list_notification_runs_notification_runs_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 20).","default":20,"title":"Page Size"},"description":"Items per page (1–1000, default 20)."}],"responses":{"200":{"description":"Notification runs listed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_NotificationRunBase_"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notification_runs/{run_id}/status":{"put":{"tags":["Notifications Runs"],"summary":"Update the status of a notification run","description":"Set the triage status of a notification run. Valid values: `new`, `in_progress`, `fixed`, `accepted_risk`. The status is propagated to all unlocked leaks in the run.","operationId":"set_notification_run_status_notification_runs__run_id__status_put","security":[{"BearerAuth":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"ID of the notification run.","title":"Run Id"},"description":"ID of the notification run."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRunStatusUpdateIn"}}}},"responses":{"200":{"description":"Run status updated successfully.","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid status value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required, or invalid/expired API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Run not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Invalid path parameter or request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notification_runs/{run_id}/items":{"get":{"tags":["Notifications Runs"],"summary":"List items for a notification run (unified endpoint)","description":"Return items associated with a specific notification run. Supports all notification types:\n\n- **Credential leaks** (EMAIL, DOMAIN, ADVANCED): Fetches leak details from ES\n- **RAW**: Returns file metadata stored in DB\n- **DARK_WEB**: Fetches post details from ES\n\n**Pagination**\n- `page` starts at 1.\n- `page_size` is 1 to 1000 (default 100).\n\n**Response**\n`PaginatedRunItemsResponse` with `items`, `total`, `total_unlocked`, `page`, `page_size`, `item_type`.\n\n**Errors**\n- 401 Authentication required, or invalid/expired API key.\n- 404 Run not found.\n- 422 Request validation error.","operationId":"notification_run_items_notification_runs__run_id__items_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification run.","title":"Run Id"},"description":"ID of the notification run."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1).","default":1,"title":"Page"},"description":"Page number (starts at 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (1–1000, default 100).","default":100,"title":"Page Size"},"description":"Items per page (1–1000, default 100)."}],"responses":{"200":{"description":"Items returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedRunItemsResponse"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Run not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notification_runs/{run_id}/leaks/unlock":{"post":{"tags":["Notifications Runs"],"summary":"Unlock leaks from a notification run","description":"Unlock leaks that belong to a specific notification run. You can optionally filter by `search` and `is_email`, and cap the number of new unlocks with `max`. The effective limit is capped by your available points.\n\n**Behavior**\n- Only items not previously unlocked in this run are attempted.\n- Points are charged only for newly unlocked items.\n- The response contains the final unlocked state for the requested IDs.\n\n**Errors**\n- 400 No leaks for this run, all data already unlocked, or no data matches the search.\n- 401 Authentication required, or invalid/expired API key.\n- 403 The target monitored by this run is blocked.\n- 404 Run not found.\n- 422 Request validation error.","operationId":"unlock_notification_run_leaks_notification_runs__run_id__leaks_unlock_post","security":[{"BearerAuth":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification run.","title":"Run Id"},"description":"ID of the notification run."},{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Max items to unlock (capped by your available points).","title":"Max"},"description":"Max items to unlock (capped by your available points)."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional free-text filter on URL or username.","title":"Search"},"description":"Optional free-text filter on URL or username."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by identifier type: true=emails, false=usernames, null=both.","title":"Is Email"},"description":"Filter by identifier type: true=emails, false=usernames, null=both."}],"responses":{"200":{"description":"Leaks unlocked successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeakDetails"},"title":"Response Unlock Notification Run Leaks Notification Runs  Run Id  Leaks Unlock Post"}}}},"400":{"description":"No leaks, all already unlocked, or no data matches filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"403":{"description":"The target monitored by this run is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Run not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notification_runs/{run_id}/export":{"get":{"tags":["Notifications Runs"],"summary":"Export leaks from a notification run to CSV/TXT/JSON","description":"Queue an export of leaks associated with a specific notification run. Optional `search` and `is_email` filters apply. The job runs asynchronously and the file will appear in the Exports section when ready.\n\n**Limits**\n- You can have at most 5 exports with status PENDING or IN_PROGRESS.\n\n**Query parameters**\n- `format` optional output format: `csv` (default), `txt`, or `json`.\n\n**Response**\n`ExportResponse` with `status`, `message`, and `export_id`.\n\n**Errors**\n- 400 Too many exports in progress.\n- 401 Authentication required, or invalid/expired API key.\n- 404 Run not found.\n- 422 Request validation error.","operationId":"export_notification_run_notification_runs__run_id__export_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"integer","description":"ID of the notification run.","title":"Run Id"},"description":"ID of the notification run."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional free-text filter on URL or username.","title":"Search"},"description":"Optional free-text filter on URL or username."},{"name":"is_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by identifier type: true=emails, false=usernames, null=both.","title":"Is Email"},"description":"Filter by identifier type: true=emails, false=usernames, null=both."},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormatEnum","description":"Output format: csv (default), txt, or json.","default":"csv"},"description":"Output format: csv (default), txt, or json."}],"responses":{"200":{"description":"Export queued successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"400":{"description":"Too many exports in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Run not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}":{"get":{"tags":["Tasks"],"summary":"Get background task status","description":"Return the live status for a background task started by list operations Use the `task_id` returned by the create endpoint.\n\n**Usage**\nPoll this endpoint every 1s until `completed=true`. If the task is unknown or expired, the service returns `completed=true` with no totals, which can be treated as finished.","operationId":"get_task_status_tasks__task_id__get","security":[{"BearerAuth":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"Background task id returned by the create endpoint.","title":"Task Id"},"description":"Background task id returned by the create endpoint."}],"responses":{"200":{"description":"Task status returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusOut"}}}},"400":{"description":"Invalid task_id format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"404":{"description":"Task not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdvancedTextMatchType":{"type":"string","enum":["contains","starts_with","ends_with"],"title":"AdvancedTextMatchType"},"AllLeakDetails":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Unique leak identifier. Only returned when the item is unlocked or the plan includes full access."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Source URL where the credentials were found. Redacted for locked items on non-advanced plans."},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username","description":"Leaked username or email address. Masked when locked."},"username_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username Masked","description":"Partially masked version of the username (e.g. j***@example.com)."},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"Leaked password. Only returned when the item is unlocked."},"password_strength":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Password Strength","description":"Password strength raw score (integer, 0+). Categories: too_weak (0-2), weak (3-4), medium (5-7), strong (8+).","default":0},"unlocked":{"type":"boolean","title":"Unlocked","description":"Whether this item has been unlocked by the current account.","default":false},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email","description":"True if the username is an email address, false if it is a plain username."},"added_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Added At","description":"Date when this leak was added to the database."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Remediation status of the unlocked leak: new, in_progress, fixed, accepted_risk. Only present for unlocked items."},"category":{"type":"string","title":"Category","description":"Leak category: 'employees', 'customers', or 'third_parties'."}},"type":"object","required":["category"],"title":"AllLeakDetails","example":{"added_at":"2025-01-15T10:30:00Z","category":"employees","id":"3f1a9c2b7e","is_email":true,"password":"P@ssw0rd123","password_strength":6,"status":"new","unlocked":true,"url":"https://example.com/login","username":"john.doe@example.com"}},"AssignListIn":{"properties":{"list_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Id","description":"null to remove list"}},"type":"object","title":"AssignListIn","example":{"list_id":42}},"BalanceLogItem":{"properties":{"id":{"type":"integer","title":"Id","description":"Balance log entry ID."},"user_id":{"type":"integer","title":"User Id","description":"User ID."},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email","description":"User email address."},"kind":{"type":"string","title":"Kind","description":"Type of balance change (e.g. unlock, topup, subscription)."},"delta_total":{"type":"integer","title":"Delta Total","description":"Total points change (positive = credit, negative = debit)."},"delta_subscription":{"type":"integer","title":"Delta Subscription","description":"Subscription points portion of the change."},"delta_extra":{"type":"integer","title":"Delta Extra","description":"Extra points portion of the change."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Human-readable reason for the balance change."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata about the operation."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Date of the balance change."}},"type":"object","required":["id","user_id","kind","delta_total","delta_subscription","delta_extra","created_at"],"title":"BalanceLogItem"},"BulkAssignIn":{"properties":{"target_list_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target List Id"},"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email"},"list_id_filter":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Id Filter"},"list_none":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"List None"},"status_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"},"filters":{"anyOf":[{"$ref":"#/components/schemas/LeakSearchFilters"},{"type":"null"}]}},"type":"object","required":["target_list_id"],"title":"BulkAssignIn","example":{"is_email":true,"target_list_id":42}},"BulkStatusUpdateIn":{"properties":{"target_status":{"type":"string","title":"Target Status","description":"Target status: new, in_progress, fixed, accepted_risk"},"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email"},"list_id_filter":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Id Filter"},"list_none":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"List None"},"status_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"},"filters":{"anyOf":[{"$ref":"#/components/schemas/LeakSearchFilters"},{"type":"null"}]}},"type":"object","required":["target_status"],"title":"BulkStatusUpdateIn","example":{"is_email":true,"target_status":"fixed"}},"CategoryInfo":{"properties":{"has_locked":{"type":"boolean","title":"Has Locked"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"unlocked":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unlocked"}},"type":"object","required":["has_locked"],"title":"CategoryInfo"},"CommentUpsertIn":{"properties":{"comment":{"type":"string","maxLength":500,"minLength":0,"title":"Comment"}},"type":"object","required":["comment"],"title":"CommentUpsertIn","example":{"comment":"Credential rotated on 2025-01-15."}},"ContainerTreeResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TreeEntry"},"type":"array","title":"Items","description":"Entries located under the requested prefix."},"total":{"type":"integer","title":"Total","description":"Total entries under the prefix."},"page":{"type":"integer","title":"Page","description":"Requested page index (1-based)."},"page_size":{"type":"integer","title":"Page Size","description":"Maximum number of entries returned in this response."},"container_id":{"type":"string","title":"Container Id","description":"Identifier of the container that was browsed."},"prefix":{"type":"string","title":"Prefix","description":"Folder prefix used for the listing."}},"type":"object","required":["items","total","page","page_size","container_id","prefix"],"title":"ContainerTreeResponse"},"DarkWebItem":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Unique post identifier."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Post title."},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"Post content. May be truncated for long posts."},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Source identifier (forum/market)."},"source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Name","description":"Human-readable source name."},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target","description":"Target entity mentioned in the post."},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref","description":"Original reference URL on the source."},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author","description":"Post author."},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At","description":"Original publication date."},"ingested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ingested At","description":"Date when the post was indexed by LeakRadar."},"truncated":{"type":"boolean","title":"Truncated","description":"Whether the content was truncated due to length.","default":false},"censored":{"type":"boolean","title":"Censored","description":"Whether sensitive content was censored.","default":false}},"type":"object","title":"DarkWebItem","example":{"author":"anon","censored":false,"content":"Full credential dump attached...","id":"post_12345","ingested_at":"2025-01-15T10:30:00Z","source":"forum_x","source_name":"Forum X","title":"Database leak for example.com","truncated":false}},"DarkWebPostsStats":{"properties":{"total":{"type":"integer","title":"Total"}},"type":"object","required":["total"],"title":"DarkWebPostsStats"},"DarkWebSearchRequest":{"properties":{"query":{"anyOf":[{"type":"string","maxLength":254,"strip_whitespace":true},{"type":"null"}],"title":"Query","description":"Global search term (simple mode)."},"title":{"anyOf":[{"type":"string","maxLength":254,"strip_whitespace":true},{"type":"null"}],"title":"Title","description":"Search in title only (advanced mode)."},"content":{"anyOf":[{"type":"string","maxLength":254,"strip_whitespace":true},{"type":"null"}],"title":"Content","description":"Search in content only (advanced mode)."},"author":{"anyOf":[{"type":"string","maxLength":100,"strip_whitespace":true},{"type":"null"}],"title":"Author","description":"Exact author match (advanced mode)."},"source_url":{"anyOf":[{"type":"string","maxLength":500,"strip_whitespace":true},{"type":"null"}],"title":"Source Url","description":"Source URL contains (advanced mode)."},"logic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logic","description":"Logic for combining fields: AND or OR.","default":"AND"}},"type":"object","title":"DarkWebSearchRequest","example":{"query":"example.com"}},"DarkWebSearchResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DarkWebItem"},"type":"array","title":"Items","description":"List of dark web posts for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching posts."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."}},"type":"object","required":["items","total","page","page_size"],"title":"DarkWebSearchResponse","example":{"items":[{"author":"anon","censored":false,"content":"Full credential dump attached...","id":"post_12345","ingested_at":"2025-01-15T10:30:00Z","source":"forum_x","source_name":"Forum X","title":"Database leak for example.com","truncated":false}],"page":1,"page_size":25,"total":1}},"DarkWebSource":{"properties":{"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["name","count"],"title":"DarkWebSource"},"DarkWebSourcesResponse":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/DarkWebSource"},"type":"array","title":"Sources"}},"type":"object","required":["sources"],"title":"DarkWebSourcesResponse","example":{"sources":[{"count":1500,"name":"Forum X"}]}},"DarkWebStatsResponse":{"properties":{"total_posts":{"type":"integer","title":"Total Posts"},"total_sources":{"type":"integer","title":"Total Sources"},"latest_ingested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Ingested At"},"oldest_published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Oldest Published At"}},"type":"object","required":["total_posts","total_sources"],"title":"DarkWebStatsResponse","example":{"latest_ingested_at":"2025-01-15T10:30:00Z","oldest_published_at":"2020-01-01T00:00:00Z","total_posts":1200000,"total_sources":42}},"DomainExportBody":{"properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email"},"format":{"anyOf":[{"$ref":"#/components/schemas/ExportFormatEnum"},{"type":"null"}]}},"type":"object","title":"DomainExportBody","example":{"format":"csv","is_email":true,"search":"example.com"}},"DomainMassRequest":{"properties":{"domains":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Domains","description":"List of domains, max 100."},"categories":{"anyOf":[{"items":{"$ref":"#/components/schemas/LeakTypeEnum"},"type":"array"},{"type":"null"}],"title":"Categories","description":"Subset among employees, customers, third_parties. If omitted -> all."},"include_counts":{"type":"boolean","title":"Include Counts","description":"If true, also include counts (locked/total/unlocked).","default":false}},"type":"object","required":["domains"],"title":"DomainMassRequest","example":{"domains":["example.com","test.org"],"include_counts":false}},"DomainMassResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/DomainMassResult"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"DomainMassResponse","example":{"results":[{"any":true,"categories":{"employees":{"count":10,"has_locked":true,"total":12,"unlocked":2}},"domain":"example.com"}]}},"DomainMassResult":{"properties":{"domain":{"type":"string","title":"Domain"},"any":{"type":"boolean","title":"Any"},"categories":{"additionalProperties":{"$ref":"#/components/schemas/CategoryInfo"},"propertyNames":{"$ref":"#/components/schemas/LeakTypeEnum"},"type":"object","title":"Categories"}},"type":"object","required":["domain","any","categories"],"title":"DomainMassResult"},"DomainSearchLightResponse":{"properties":{"employees_compromised":{"type":"integer","title":"Employees Compromised"},"third_parties_compromised":{"type":"integer","title":"Third Parties Compromised"},"customers_compromised":{"type":"integer","title":"Customers Compromised"},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value"},"searched_by_count":{"type":"integer","title":"Searched By Count","default":0}},"type":"object","required":["employees_compromised","third_parties_compromised","customers_compromised"],"title":"DomainSearchLightResponse"},"DomainSearchResponse":{"properties":{"employees_compromised":{"type":"integer","title":"Employees Compromised","description":"Number of compromised employee accounts."},"third_parties_compromised":{"type":"integer","title":"Third Parties Compromised","description":"Number of compromised third-party accounts."},"customers_compromised":{"type":"integer","title":"Customers Compromised","description":"Number of compromised customer accounts."},"employee_passwords":{"$ref":"#/components/schemas/PasswordStrengthSummary","description":"Password strength breakdown for employees."},"third_parties_passwords":{"$ref":"#/components/schemas/PasswordStrengthSummary","description":"Password strength breakdown for third parties."},"customer_passwords":{"$ref":"#/components/schemas/PasswordStrengthSummary","description":"Password strength breakdown for customers."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."},"searched_by_count":{"type":"integer","title":"Searched By Count","description":"Number of other users who have searched this domain.","default":0}},"type":"object","required":["employees_compromised","third_parties_compromised","customers_compromised","employee_passwords","third_parties_passwords","customer_passwords"],"title":"DomainSearchResponse"},"DomainSubdomainsExportBody":{"properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},"type":"object","title":"DomainSubdomainsExportBody","example":{"search":"admin"}},"DomainURLsExportBody":{"properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},"type":"object","title":"DomainURLsExportBody","example":{"search":"login"}},"DownloadLogItem":{"properties":{"id":{"type":"integer","title":"Id","description":"Download log entry ID."},"raw_file_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Raw File Id","description":"ID of the raw file that was downloaded."},"container_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Container Id","description":"Container ID of the raw file."},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name","description":"Stored file name."},"original_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original File Name","description":"Original file name before processing."},"download_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Token","description":"Unique download token."},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes","description":"File size in bytes."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Date when the download was initiated."},"success":{"type":"boolean","title":"Success","description":"Whether the download was successful."},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url","description":"Presigned download URL (temporary)."},"expires_in":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In","description":"Seconds until the download URL expires."},"download_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Download Expires At","description":"Expiration date of the download URL."},"file_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Password","description":"Password to extract the downloaded archive."}},"type":"object","required":["id","created_at","success"],"title":"DownloadLogItem"},"DownloadSourceResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Pre-signed URL that can be used to download the file."},"expires_in":{"type":"integer","title":"Expires In","description":"Number of seconds before the pre-signed URL expires.","default":900},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name","description":"Suggested file name for the downloaded file."},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes","description":"Size of the file in bytes, when known."},"mime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime","description":"MIME type of the file, when available."},"already_unlocked":{"type":"boolean","title":"Already Unlocked","description":"True when the user had an active unlock for the file prior to this request.","default":false},"downloaded_before":{"type":"boolean","title":"Downloaded Before","description":"Indicates whether the user has successfully downloaded this file in the past.","default":false}},"type":"object","required":["url"],"title":"DownloadSourceResponse"},"EmailMassRequest":{"properties":{"emails":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Emails","description":"List of emails or usernames, max 100."},"include_counts":{"type":"boolean","title":"Include Counts","description":"If true, also include counts (locked/total/unlocked).","default":false}},"type":"object","required":["emails"],"title":"EmailMassRequest","example":{"emails":["john.doe@example.com","jane@example.com"],"include_counts":false}},"EmailMassResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/EmailMassResult"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"EmailMassResponse","example":{"results":[{"any":true,"email":"john.doe@example.com","locked":3,"total":5,"unlocked":2}]}},"EmailMassResult":{"properties":{"email":{"type":"string","title":"Email"},"any":{"type":"boolean","title":"Any"},"locked":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Locked"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"unlocked":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unlocked"}},"type":"object","required":["email","any"],"title":"EmailMassResult"},"EmailSearchRequest":{"properties":{"email":{"type":"string","maxLength":254,"title":"Email","description":"Email or username to search.","strip_whitespace":true},"search":{"anyOf":[{"type":"string","maxLength":100,"strip_whitespace":true},{"type":"null"}],"title":"Search","description":"Optional free-text filter."},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email","description":"Identifier type filter: true=email only, false=username only, null=both."}},"type":"object","required":["email"],"title":"EmailSearchRequest","example":{"email":"john.doe@example.com","is_email":true}},"EmailSearchResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LeakDetails"},"type":"array","title":"Items","description":"List of leak records for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching leak records."},"total_unlocked":{"type":"integer","title":"Total Unlocked","description":"Number of already-unlocked records in the total results."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."},"auto_unlock_points_consumed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auto Unlock Points Consumed","description":"Number of points consumed by auto-unlock on this request."}},"type":"object","required":["items","total","total_unlocked","page","page_size"],"title":"EmailSearchResponse","example":{"items":[{"added_at":"2025-01-15T10:30:00Z","id":"3f1a9c2b7e","is_email":true,"password":"P@ssw0rd123","password_strength":6,"status":"new","unlocked":true,"url":"https://example.com/login","username":"john.doe@example.com"}],"page":1,"page_size":10,"total":1,"total_unlocked":1}},"ErrorMessage":{"properties":{"detail":{"type":"string","title":"Detail","description":"A descriptive error message."}},"type":"object","required":["detail"],"title":"ErrorMessage"},"ExportBase":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"filename":{"type":"string","title":"Filename"},"type":{"type":"string","title":"Type"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"},"status":{"type":"string","title":"Status"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"from_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From Date"}},"type":"object","required":["id","user_id","filename","type","status","timestamp"],"title":"ExportBase"},"ExportFormatEnum":{"type":"string","enum":["csv","txt","json"],"title":"ExportFormatEnum"},"ExportResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Export job status: 'queued', 'processing', 'completed', or 'failed'."},"message":{"type":"string","title":"Message","description":"Human-readable status message."},"export_id":{"type":"integer","title":"Export Id","description":"ID of the export job. Use this to check status or download the result."}},"type":"object","required":["status","message","export_id"],"title":"ExportResponse","example":{"export_id":1234,"message":"Your export request has been queued. Check the Exports page for progress.","status":"queued"}},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InvoiceBase":{"properties":{"id":{"type":"integer","title":"Id"},"amount":{"type":"number","title":"Amount"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"},"paid":{"type":"boolean","title":"Paid"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"},"is_renewal":{"type":"boolean","title":"Is Renewal"},"discount_code_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Code Id"},"user_id":{"type":"integer","title":"User Id"},"discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount Amount"},"vat_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vat Rate"},"vat_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vat Amount"},"vat_reverse_charge":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Vat Reverse Charge"},"vat_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Country"},"vat_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Number"},"invoice_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Type"}},"type":"object","required":["id","amount","period","paid","payment_method","is_renewal","discount_code_id","user_id"],"title":"InvoiceBase"},"LeakDetails":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Unique leak identifier. Only returned when the item is unlocked or the plan includes full access."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Source URL where the credentials were found. Redacted for locked items on non-advanced plans."},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username","description":"Leaked username or email address. Masked when locked."},"username_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username Masked","description":"Partially masked version of the username (e.g. j***@example.com)."},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"Leaked password. Only returned when the item is unlocked."},"password_strength":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Password Strength","description":"Password strength raw score (integer, 0+). Categories: too_weak (0-2), weak (3-4), medium (5-7), strong (8+).","default":0},"unlocked":{"type":"boolean","title":"Unlocked","description":"Whether this item has been unlocked by the current account.","default":false},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email","description":"True if the username is an email address, false if it is a plain username."},"added_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Added At","description":"Date when this leak was added to the database."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Remediation status of the unlocked leak: new, in_progress, fixed, accepted_risk. Only present for unlocked items."}},"type":"object","title":"LeakDetails","example":{"added_at":"2025-01-15T10:30:00Z","id":"3f1a9c2b7e","is_email":true,"password":"P@ssw0rd123","password_strength":6,"status":"new","unlocked":true,"url":"https://example.com/login","username":"john.doe@example.com"}},"LeakSearchFilters":{"properties":{"username":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Username","description":"Username values to match."},"username_not":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Username Not","description":"Username values to exclude."},"username_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Username matching mode. Omitted means contains."},"username_not_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded username matching mode. Omitted means contains."},"password":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Password","description":"Password values to match."},"password_not":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Password Not","description":"Password values to exclude."},"password_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Password matching mode. Omitted means contains."},"password_not_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded password matching mode. Omitted means contains."},"url":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url","description":"URL values to match."},"url_not":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Not","description":"URL values to exclude."},"url_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"URL matching mode. Omitted means contains."},"url_not_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded URL matching mode. Omitted means contains."},"url_domain":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Domain","description":"URL domain values to match."},"url_domain_not":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Domain Not","description":"URL domain values to exclude."},"url_domain_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"URL domain matching mode. Omitted means contains."},"url_domain_not_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded URL domain matching mode. Omitted means contains."},"url_host":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Host","description":"URL host values to match."},"url_host_not":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Host Not","description":"URL host values to exclude."},"url_host_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"URL host matching mode. Omitted means contains."},"url_host_not_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded URL host matching mode. Omitted means contains."},"username_hash":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Username Hash","description":"Username SHA-1 hash prefix (hex)."},"password_hash":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Password Hash","description":"Password SHA-1 hash prefix (hex)."},"url_scheme":{"anyOf":[{"items":{"type":"string","maxLength":20,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Scheme","description":"URL scheme(s) to include (multi)."},"url_scheme_not":{"anyOf":[{"items":{"type":"string","maxLength":20,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Scheme Not","description":"URL scheme(s) to exclude (multi)."},"url_port":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Url Port","description":"URL port(s) to include (multi)."},"url_port_not":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Url Port Not","description":"URL port(s) to exclude (multi)."},"url_tld":{"anyOf":[{"items":{"type":"string","maxLength":10,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Tld","description":"URL TLD(s) to include (multi)."},"url_tld_not":{"anyOf":[{"items":{"type":"string","maxLength":10,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Url Tld Not","description":"URL TLD(s) to exclude (multi)."},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email","description":"Identifier type filter: true=email only, false=username only, null=both."},"email_domain":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Email Domain","description":"Email domain values to match."},"email_domain_not":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Email Domain Not","description":"Email domain values to exclude."},"email_domain_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Email domain matching mode. Omitted means contains."},"email_domain_not_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded email domain matching mode. Omitted means contains."},"email_host":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Email Host","description":"Email host values to match."},"email_host_not":{"anyOf":[{"items":{"type":"string","maxLength":100,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Email Host Not","description":"Email host values to exclude."},"email_host_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Email host matching mode. Omitted means contains."},"email_host_not_match_type":{"anyOf":[{"$ref":"#/components/schemas/AdvancedTextMatchType"},{"type":"null"}],"description":"Excluded email host matching mode. Omitted means contains."},"email_tld":{"anyOf":[{"items":{"type":"string","maxLength":10,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Email Tld","description":"Email TLD(s) to include (multi)."},"email_tld_not":{"anyOf":[{"items":{"type":"string","maxLength":10,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Email Tld Not","description":"Email TLD(s) to exclude (multi)."},"password_strength":{"anyOf":[{"$ref":"#/components/schemas/PasswordStrengthCategory-Input"},{"type":"null"}],"description":"Filter by password strength category. too_weak = score 0-2, weak = 3-4, medium = 5-7, strong = 8+."},"added_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Added From","description":"Only include leaks indexed on/after this UTC datetime."},"added_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Added To","description":"Only include leaks indexed on/before this UTC datetime."},"force_and":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force And","description":"When true, require all values within each field (AND within field)."}},"type":"object","title":"LeakSearchFilters","example":{"password":["123456"],"url_domain":["example.com"]}},"LeakTypeEnum":{"type":"string","enum":["employees","third_parties","customers","all"],"title":"LeakTypeEnum"},"LeaksStats":{"properties":{"total":{"type":"integer","title":"Total"},"today":{"type":"integer","title":"Today"},"per_week":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Per Week"},"this_week":{"type":"integer","title":"This Week"},"this_month":{"type":"integer","title":"This Month"}},"type":"object","required":["total","today","per_week","this_week","this_month"],"title":"LeaksStats"},"LiveStatsResponse":{"properties":{"raw_lines_total":{"type":"integer","title":"Raw Lines Total"},"raw_lines_7d":{"type":"integer","title":"Raw Lines 7D"},"leaks_total":{"type":"integer","title":"Leaks Total"},"leaks_7d":{"type":"integer","title":"Leaks 7D"},"dark_web_posts_total":{"type":"integer","title":"Dark Web Posts Total"},"sources_active":{"type":"integer","title":"Sources Active"},"credentials_per_second_24h":{"type":"number","title":"Credentials Per Second 24H"},"sparkline_24h":{"items":{"type":"integer"},"type":"array","title":"Sparkline 24H"},"synced_at":{"type":"string","title":"Synced At"}},"type":"object","required":["raw_lines_total","raw_lines_7d","leaks_total","leaks_7d","dark_web_posts_total","sources_active","credentials_per_second_24h","sparkline_24h","synced_at"],"title":"LiveStatsResponse","example":{"credentials_per_second_24h":12.5,"dark_web_posts_total":1200000,"leaks_7d":50000000,"leaks_total":15000000000,"raw_lines_7d":100000000,"raw_lines_total":50000000000,"sources_active":42,"sparkline_24h":[100,120,90,140,110],"synced_at":"2025-01-15T10:30:00Z"}},"MonitoringUsageMetric":{"properties":{"used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Used","description":"Current consumption, null when unreadable."},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"Plan limit, null when unlimited."},"plan_limit":{"type":"integer","title":"Plan Limit","description":"Slots granted by the plan (or free tier baseline).","default":0},"extra_limit":{"type":"integer","title":"Extra Limit","description":"Slots bought on top of the plan.","default":0}},"type":"object","title":"MonitoringUsageMetric"},"NNotificationMethodTypeEnum":{"type":"string","enum":["email","slack","telegram","webhook","discord"],"title":"NNotificationMethodTypeEnum"},"NNotificationTypeEnum":{"type":"string","enum":["email","domain","advanced","raw","dark_web"],"title":"NNotificationTypeEnum"},"NotificationCreateRequest":{"properties":{"method_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Method Id","description":"Notification method ID to use."},"type":{"$ref":"#/components/schemas/NNotificationTypeEnum","description":"Notification type (what to monitor)."},"value":{"anyOf":[{"type":"string","maxLength":4096,"strip_whitespace":true},{"type":"null"}],"title":"Value","description":"Value to monitor (required for EMAIL/DOMAIN types)."},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Filters when type=ADVANCED or RAW. Parsed according to type."},"auto_unlock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Unlock","description":"If true, automatically unlock new matching leaks (consumes points)."},"max_points":{"anyOf":[{"type":"integer","maximum":300000.0,"minimum":0.0},{"type":"null"}],"title":"Max Points","description":"Daily points cap for auto-unlock (if enabled)."},"second_type":{"anyOf":[{"$ref":"#/components/schemas/NotificationLeakTypeEnum"},{"type":"null"}],"description":"For DOMAIN notifications: which leak category to monitor."},"bulk":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Bulk","description":"Create multiple notifications at once (e.g., newline-separated values).","default":false}},"type":"object","required":["type"],"title":"NotificationCreateRequest","example":{"method_id":1,"type":"domain","value":"example.com"}},"NotificationLeakTypeEnum":{"type":"string","enum":["ALL","EMPLOYEES","THIRD_PARTIES","CUSTOMERS"],"title":"NotificationLeakTypeEnum"},"NotificationMethodCreateRequest":{"properties":{"type":{"$ref":"#/components/schemas/NNotificationMethodTypeEnum","description":"Notification method type."},"value":{"type":"string","maxLength":500,"title":"Value","description":"Primary value (e.g., webhook URL, bot token, or email address).","strip_whitespace":true},"second_value":{"anyOf":[{"type":"string","maxLength":500,"strip_whitespace":true},{"type":"null"}],"title":"Second Value","description":"Secondary value when required by the method (e.g., Telegram chat_id)."},"headers":{"anyOf":[{"items":{"$ref":"#/components/schemas/WebhookCustomHeader"},"type":"array"},{"type":"null"}],"title":"Headers","description":"Optional custom HTTP headers for webhook methods (max 10)."},"extra_emails":{"anyOf":[{"items":{"type":"string","maxLength":254,"strip_whitespace":true},"type":"array"},{"type":"null"}],"title":"Extra Emails","description":"Up to 4 additional email recipients (delivered as BCC). Only allowed when type=email. Total recipients (value + extra_emails) must be ≤ 5."}},"type":"object","required":["type","value"],"title":"NotificationMethodCreateRequest","example":{"type":"email","value":"alerts@example.com"}},"NotificationMethodOut":{"properties":{"id":{"type":"integer","title":"Id","description":"Notification method ID."},"type":{"$ref":"#/components/schemas/NNotificationMethodTypeEnum","description":"Delivery type: email, slack, telegram, discord, or webhook."},"value":{"type":"string","title":"Value","description":"Primary destination (email address, webhook URL, channel ID, etc.)."},"second_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Value","description":"Secondary value (e.g. Telegram chat ID)."},"headers":{"anyOf":[{"items":{"$ref":"#/components/schemas/WebhookHeaderOut"},"type":"array"},{"type":"null"}],"title":"Headers","description":"Custom HTTP headers for webhook methods."},"extra_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Extra Emails","description":"Additional email recipients delivered as BCC (email methods only, max 4)."},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Creation date of this notification method."}},"type":"object","required":["id","type","value","timestamp"],"title":"NotificationMethodOut"},"NotificationOut":{"properties":{"id":{"type":"integer","title":"Id","description":"Notification ID."},"method_id":{"type":"integer","title":"Method Id","description":"ID of the notification method used for delivery."},"type":{"$ref":"#/components/schemas/NNotificationTypeEnum","description":"Monitoring type: email, domain, advanced, raw, or dark_web."},"second_type":{"anyOf":[{"$ref":"#/components/schemas/NotificationLeakTypeEnum"},{"type":"null"}],"description":"Sub-type for domain notifications: employees, customers, or third_parties."},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value","description":"Monitored value (email address, domain, search query, etc.)."},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Additional search filters applied to this notification."},"last_searched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Searched At","description":"Last time this notification was checked for new results."},"is_active":{"type":"boolean","title":"Is Active","description":"Whether this notification is currently active."},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Creation date of this notification."},"method_type":{"anyOf":[{"$ref":"#/components/schemas/NNotificationMethodTypeEnum"},{"type":"null"}],"description":"Delivery type of the associated method."},"method_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method Value","description":"Destination of the associated method."},"method_extra_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Method Extra Emails","description":"Additional BCC recipients of the associated method (email methods only)."},"auto_unlock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Unlock","description":"Whether new results are automatically unlocked."},"max_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Points","description":"Maximum points to spend per notification run for auto-unlock."},"daily_spent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Spent","description":"Points spent today by auto-unlock on this notification."},"daily_reset_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Daily Reset At","description":"Next daily reset time for the spent counter."},"total_notifications":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Notifications","description":"Total number of notification runs executed."},"total_cost":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Cost","description":"Total points consumed by this notification across all runs."}},"type":"object","required":["id","method_id","type","is_active","timestamp"],"title":"NotificationOut"},"NotificationRunBase":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"notification_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Notification Id"},"sent_at":{"type":"string","format":"date-time","title":"Sent At"},"new_leaks_count":{"type":"integer","title":"New Leaks Count"},"unlocked_count":{"type":"integer","title":"Unlocked Count"},"points_spent":{"type":"integer","title":"Points Spent"},"sent_ok":{"type":"boolean","title":"Sent Ok"},"notification_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification Type"},"notification_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification Value"},"status":{"type":"string","title":"Status","default":"new"}},"type":"object","required":["id","user_id","sent_at","new_leaks_count","unlocked_count","points_spent","sent_ok"],"title":"NotificationRunBase"},"NotificationRunStatusUpdateIn":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"NotificationRunStatusUpdateIn","example":{"status":"fixed"}},"NotificationStatsResponse":{"properties":{"total_notifications_asset":{"type":"integer","title":"Total Notifications Asset"},"max_notification_asset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Notification Asset"},"plan_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plan Limit"},"extra_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extra Limit"},"total_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Limit"},"available":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available"}},"type":"object","required":["total_notifications_asset","max_notification_asset"],"title":"NotificationStatsResponse"},"NotificationStatusUpdateRequest":{"properties":{"is_active":{"type":"boolean","title":"Is Active","description":"Set the notification as active/inactive."}},"type":"object","required":["is_active"],"title":"NotificationStatusUpdateRequest","example":{"is_active":true}},"NotificationsDeleteRequest":{"properties":{"ids":{"items":{"type":"integer"},"type":"array","maxItems":100,"title":"Ids","description":"Notification IDs to delete."}},"type":"object","required":["ids"],"title":"NotificationsDeleteRequest","example":{"ids":[12,34,56]}},"PaginatedAllLeaksResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AllLeakDetails"},"type":"array","title":"Items","description":"List of leak records for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching leak records."},"total_unlocked":{"type":"integer","title":"Total Unlocked","description":"Number of already-unlocked records in the total results."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."},"auto_unlock_points_consumed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auto Unlock Points Consumed","description":"Number of points consumed by auto-unlock on this request."}},"type":"object","required":["items","total","total_unlocked","page","page_size"],"title":"PaginatedAllLeaksResponse"},"PaginatedLeaksResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LeakDetails"},"type":"array","title":"Items","description":"List of leak records for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching leak records."},"total_unlocked":{"type":"integer","title":"Total Unlocked","description":"Number of already-unlocked records in the total results."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."},"auto_unlock_points_consumed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auto Unlock Points Consumed","description":"Number of points consumed by auto-unlock on this request."}},"type":"object","required":["items","total","total_unlocked","page","page_size"],"title":"PaginatedLeaksResponse"},"PaginatedResponse_BalanceLogItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BalanceLogItem"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[BalanceLogItem]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedResponse_DownloadLogItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DownloadLogItem"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[DownloadLogItem]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedResponse_ExportBase_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExportBase"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[ExportBase]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedResponse_NotificationRunBase_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NotificationRunBase"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[NotificationRunBase]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedResponse_RawUnlockedPartItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RawUnlockedPartItem"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[RawUnlockedPartItem]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedResponse_SubdomainOccurrences_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SubdomainOccurrences"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[SubdomainOccurrences]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedResponse_URLOccurrences_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/URLOccurrences"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[URLOccurrences]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedResponse_UserTaskItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserTaskItem"},"type":"array","title":"Items","description":"List of items for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"PaginatedResponse[UserTaskItem]","example":{"items":[],"page":1,"page_size":20,"total":0}},"PaginatedRunItemsResponse":{"properties":{"items":{"items":{},"type":"array","title":"Items","description":"List of run items (LeakRunItem, RawRunItem, or DarkWebRunItem)."},"total":{"type":"integer","title":"Total","description":"Total number of items in this run."},"total_unlocked":{"type":"integer","title":"Total Unlocked","description":"Number of already-unlocked items."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."},"item_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Type","description":"Primary item type in this run: 'leak', 'raw', or 'dark_web'."}},"type":"object","required":["items","total","total_unlocked","page","page_size"],"title":"PaginatedRunItemsResponse","description":"Paginated response for notification run items."},"PaginatedUnlockedLeaksResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UnlockedLeakDetails"},"type":"array","title":"Items","description":"List of unlocked leak records for the current page."},"total":{"type":"integer","title":"Total","description":"Total number of matching records."},"total_unlocked":{"type":"integer","title":"Total Unlocked","description":"Total number of unlocked records."},"page":{"type":"integer","title":"Page","description":"Current page number."},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page."}},"type":"object","required":["items","total","total_unlocked","page","page_size"],"title":"PaginatedUnlockedLeaksResponse"},"PartResponse":{"properties":{"container_id":{"type":"string","title":"Container Id","description":"Identifier of the container that owns the part."},"entry_path":{"type":"string","title":"Entry Path","description":"Entry path that contains the part."},"seq":{"type":"integer","title":"Seq","description":"Sequential part number requested."},"offset":{"type":"integer","title":"Offset","description":"Byte offset of the part inside the entry."},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes","description":"Size of the returned block in bytes, if available."},"ingested_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ingested At","description":"ISO timestamp of the ingestion time for the block."},"trim_overlap":{"type":"boolean","title":"Trim Overlap","description":"True if the overlapping prefix was trimmed from the returned content."},"overlap_chars":{"type":"integer","title":"Overlap Chars","description":"Number of characters trimmed from the start when `trim_overlap=true`."},"text":{"type":"string","title":"Text","description":"Text content of the block. May be censored."},"censored":{"type":"boolean","title":"Censored","description":"True if the user has not unlocked the content and it was redacted."}},"type":"object","required":["container_id","entry_path","seq","offset","trim_overlap","overlap_chars","text","censored"],"title":"PartResponse"},"PartsItem":{"properties":{"seq":{"type":"integer","title":"Seq","description":"Sequential part number within the entry."},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes","description":"Size of the block in bytes, when recorded."},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","description":"Byte offset of the block within the entry."},"ingested_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ingested At","description":"ISO timestamp of the ingestion time for the block."}},"type":"object","required":["seq"],"title":"PartsItem"},"PartsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PartsItem"},"type":"array","title":"Items","description":"Sequence of parts found for the requested slice."},"total":{"type":"integer","title":"Total","description":"Total number of parts available for the entry."},"page":{"type":"integer","title":"Page","description":"Requested page index (1-based)."},"page_size":{"type":"integer","title":"Page Size","description":"Number of parts returned in this page."},"window":{"anyOf":[{"$ref":"#/components/schemas/PartsWindow"},{"type":"null"}],"description":"Span of part indexes covered by the response."},"container_id":{"type":"string","title":"Container Id","description":"Identifier of the container queried."},"entry_path":{"type":"string","title":"Entry Path","description":"Entry path for which the parts are listed."}},"type":"object","required":["items","total","page","page_size","container_id","entry_path"],"title":"PartsResponse"},"PartsWindow":{"properties":{"start_index":{"type":"integer","title":"Start Index","description":"Index (0-based) of the first part present in the window."},"end_index":{"type":"integer","title":"End Index","description":"Index (0-based) of the last part present in the window."}},"type":"object","required":["start_index","end_index"],"title":"PartsWindow"},"PasswordRangeItem":{"properties":{"hash":{"type":"string","title":"Hash"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["hash","count"],"title":"PasswordRangeItem"},"PasswordRangeResponse":{"properties":{"prefix":{"type":"string","title":"Prefix"},"total":{"type":"integer","title":"Total"},"hashes":{"items":{"$ref":"#/components/schemas/PasswordRangeItem"},"type":"array","title":"Hashes"}},"type":"object","required":["prefix","total","hashes"],"title":"PasswordRangeResponse"},"PasswordStrengthCategory-Input":{"type":"string","enum":["too_weak","weak","medium","strong"],"title":"PasswordStrengthCategory"},"PasswordStrengthCategory-Output":{"properties":{"qty":{"type":"integer","title":"Qty"},"perc":{"type":"number","title":"Perc"}},"type":"object","required":["qty","perc"],"title":"PasswordStrengthCategory"},"PasswordStrengthSummary":{"properties":{"total_pass":{"type":"integer","title":"Total Pass","description":"Total number of passwords analysed."},"too_weak":{"$ref":"#/components/schemas/PasswordStrengthCategory-Output","description":"Breakdown for passwords rated 'too weak'."},"weak":{"$ref":"#/components/schemas/PasswordStrengthCategory-Output","description":"Breakdown for passwords rated 'weak'."},"medium":{"$ref":"#/components/schemas/PasswordStrengthCategory-Output","description":"Breakdown for passwords rated 'medium'."},"strong":{"$ref":"#/components/schemas/PasswordStrengthCategory-Output","description":"Breakdown for passwords rated 'strong'."}},"type":"object","required":["total_pass","too_weak","weak","medium","strong"],"title":"PasswordStrengthSummary"},"PlanBase":{"properties":{"id":{"type":"integer","title":"Id"},"plan_name":{"type":"string","title":"Plan Name"},"name":{"type":"string","title":"Name"},"price":{"type":"number","title":"Price"},"default_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Default Price"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"},"points":{"type":"integer","title":"Points"},"gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gb","default":0},"email_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Search","default":false},"domain_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Domain Search","default":false},"advanced_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Advanced Search","default":false},"raw_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Raw Search","default":false},"dark_web_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dark Web Search","default":false},"show_sensitive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Sensitive","default":false},"monitoring_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monitoring Limit"},"unlocked_lists_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unlocked Lists Limit"},"daily_request_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Request Cap"},"concurrent_raw":{"type":"integer","title":"Concurrent Raw","default":1},"concurrent_advanced":{"type":"integer","title":"Concurrent Advanced","default":1},"bypass_points":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Bypass Points","default":false},"applied_discount_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Applied Discount Percent"},"upgrade_credit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Upgrade Credit"},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Price"},"team_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Team Enabled","default":false},"team_member_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Member Limit"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order","default":0},"popular":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Popular","default":false},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","plan_name","name","price","default_price","period","points"],"title":"PlanBase"},"PlanUsageResponse":{"properties":{"caps_enforced":{"type":"boolean","title":"Caps Enforced","description":"False when plan caps are globally disabled.","default":true},"legacy_caps":{"type":"boolean","title":"Legacy Caps","description":"Grandfathered account: the daily cap is not enforced.","default":false},"is_team_member":{"type":"boolean","title":"Is Team Member","default":false},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"is_paid":{"type":"boolean","title":"Is Paid","default":false},"requests_daily":{"$ref":"#/components/schemas/UsageMetric"},"requests_daily_reset_epoch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Requests Daily Reset Epoch","description":"Unix epoch of the next hourly bucket rotation."},"concurrent_raw":{"$ref":"#/components/schemas/UsageMetric"},"concurrent_advanced":{"$ref":"#/components/schemas/UsageMetric"},"unlocked_lists":{"$ref":"#/components/schemas/UsageMetric"},"team":{"$ref":"#/components/schemas/TeamUsageMetric"},"monitoring":{"$ref":"#/components/schemas/MonitoringUsageMetric"}},"type":"object","required":["requests_daily","concurrent_raw","concurrent_advanced","unlocked_lists","team","monitoring"],"title":"PlanUsageResponse","description":"Plan limits and their live consumption, account-owner scoped.\n\nCounters are shared across a team: a member sees the owner's consumption."},"ProfileUpdate":{"properties":{"first_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Last Name"},"organization":{"anyOf":[{"type":"string","maxLength":180},{"type":"null"}],"title":"Organization"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"address_line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line2"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"tva_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tva Number"}},"type":"object","title":"ProfileUpdate","example":{"country":"US","first_name":"John","last_name":"Doe","organization":"Acme Inc"}},"RawCountResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Number of matching raw blocks for the same filters as /search/raw. This is the maximum number of parts (and, at 1 point per part, the maximum points) a mass unlock would consume. It counts all matches, including any the caller already unlocked (those are not re-charged), so treat it as an upper bound on cost."},"exact":{"type":"boolean","title":"Exact","description":"True when total is the exact match count. False when it is only an upper bound: q_exact (word-boundary post-filter) or dedup (app-side fold) shrink the real set."},"capped":{"type":"boolean","title":"Capped","description":"True if the count reached the internal ceiling; total is then a lower bound (\"at least\").","default":false},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, the matched value (total is 0)."}},"type":"object","required":["total","exact"],"title":"RawCountResponse"},"RawDownloadPreviewResponse":{"properties":{"sha256_original":{"type":"string","title":"Sha256 Original","description":"SHA-256 hash of the raw file that would be downloaded."},"raw_file_id":{"type":"integer","title":"Raw File Id","description":"Internal identifier of the raw file record."},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name","description":"Proposed download file name, when available."},"original_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original File Name","description":"Original file name when it differs from the stored name."},"source_size_bytes":{"type":"integer","title":"Source Size Bytes","description":"Original file size in bytes."},"already_unlocked":{"type":"boolean","title":"Already Unlocked","description":"Whether the user has already unlocked the complete file."},"cost_bytes":{"type":"integer","title":"Cost Bytes","description":"Number of bytes that will be debited if the user unlocks the file."},"user_gb_available_bytes":{"type":"integer","title":"User Gb Available Bytes","description":"Remaining quota in bytes for the current user."},"can_unlock":{"type":"boolean","title":"Can Unlock","description":"True when the user has enough quota to unlock the file."},"file_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Password","description":"Password required to open the downloaded archive, when present."},"downloaded_before":{"type":"boolean","title":"Downloaded Before","description":"True if the user has downloaded this file previously, regardless of unlock expiration.","default":false}},"type":"object","required":["sha256_original","raw_file_id","source_size_bytes","already_unlocked","cost_bytes","user_gb_available_bytes","can_unlock"],"title":"RawDownloadPreviewResponse"},"RawFileAddedSummary":{"properties":{"id":{"type":"integer","title":"Id","description":"Identifier of the raw file."},"original_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original File Name","description":"Original file name attached to the raw file."},"lines":{"type":"integer","title":"Lines","description":"Number of lines indexed for the raw file."},"ingested_at":{"type":"string","title":"Ingested At","description":"ISO timestamp indicating when the raw file was ingested."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Category of the raw file (e.g. stealer-logs, database)."}},"type":"object","required":["id","lines","ingested_at"],"title":"RawFileAddedSummary"},"RawFileInfoResponse":{"properties":{"container_id":{"type":"string","title":"Container Id","description":"Identifier of the container that owns the entry."},"entry_path":{"type":"string","title":"Entry Path","description":"Entry path looked up in the index."},"entry_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Name","description":"Base name of the entry, when known."},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes","description":"Size of the entry in bytes, if provided by the index."},"sha256_original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256 Original","description":"SHA-256 hash of the original raw file, when known."}},"type":"object","required":["container_id","entry_path"],"title":"RawFileInfoResponse"},"RawSearchItem":{"properties":{"container_id":{"type":"string","title":"Container Id","description":"Identifier of the container that stores the raw entry."},"entry_path":{"type":"string","title":"Entry Path","description":"Path of the entry inside the container."},"entry_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Name","description":"Base file name extracted from the path, when available."},"ext":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ext","description":"Detected file extension for the entry."},"seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seq","description":"Sequential block number within the entry."},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","description":"Byte offset of the block within the original file."},"ingested_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ingested At","description":"ISO timestamp of the ingestion time."},"sha256_original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256 Original","description":"SHA-256 hash of the original raw file, when known."},"original_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original File Name","description":"Name of the source leak file (container) this block comes from."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Leak category of the source file: 'stealer-logs', 'database' or 'combolist'."},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name","description":"Friendly name to show: source file name for flat containers, else the entry name."},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet","description":"Preview of the matching line, censored when the block is locked."},"already_unlocked":{"type":"boolean","title":"Already Unlocked","description":"Indicates if the user has already unlocked this block or the parent file.","default":false},"matching_lines":{"items":{"type":"string"},"type":"array","title":"Matching Lines","description":"Lines from the block content that contain the queried text (export only)."}},"type":"object","required":["container_id","entry_path"],"title":"RawSearchItem"},"RawSearchRequest":{"properties":{"q":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q","description":"Optional full text query to match within raw blocks. Quotes are ignored for the length check. When omitted or empty, you must provide at least one filter among container_id, exts, categories, file_name."},"container_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Container Id","description":"Restrict the search to a specific container id."},"exts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exts","description":"List of file extensions to include (case-insensitive, without leading dot)."},"exts_not":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exts Not","description":"List of file extensions to exclude (case-insensitive, without leading dot)."},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories","description":"Filter results by raw file category. Applied after the search query."},"categories_not":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories Not","description":"Exclude these raw file categories. Applied after the search query."},"file_name":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Name","description":"Case-insensitive wildcards that must match the entry name (OR by default, AND if force_and=true)."},"file_name_not":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Name Not","description":"Case-insensitive wildcards that must NOT match the entry name."},"folder_name":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Folder Name","description":"Case-insensitive match on the folder holding the block (OR by default, AND if force_and=true). By default the value must appear anywhere in the folder path; with folder_name_exact=true it must be a whole folder at any depth. Leading and trailing slashes are ignored."},"folder_name_not":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Folder Name Not","description":"Folders to exclude, same matching rules as folder_name. Not a standalone selector: a search using only folder_name_not is rejected, provide q or another positive filter."},"force_and":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force And","description":"When true, require all file_name values to match, and all folder_name values to match (AND instead of OR within each list)."},"file_name_exact":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"File Name Exact","description":"When true, file_name / file_name_not match the entry name exactly (case-insensitive) instead of as a 'contains' wildcard."},"folder_name_exact":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Folder Name Exact","description":"When true, folder_name / folder_name_not must match a whole folder at any depth: 'data' matches 'a/b/data' but not 'a/b/database'. A value containing slashes matches a whole run of folders ('b/data' matches 'a/b/data/c'). Without it the value is matched as a substring of the folder path."},"q_exact":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Q Exact","description":"When true, the q term must match on word boundaries: '4.4.4.4' will not match '4.4.4.400'. Applied as a content post-filter (no effect without q)."},"exclude_terms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Terms","description":"Content terms to exclude: any block whose content contains one of these (substring, case-insensitive) is removed from the results. Min 4 characters per term, max 20 terms. Not a standalone selector: a search using only exclude_terms is rejected, provide q or another positive filter."},"ingested_at_min":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ingested At Min","description":"Filter results ingested on or after this datetime (inclusive)."},"ingested_at_max":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ingested At Max","description":"Filter results ingested on or before this datetime (inclusive)."}},"type":"object","title":"RawSearchRequest","example":{"q":"example.com"}},"RawSearchResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RawSearchItem"},"type":"array","title":"Items","description":"List of matching raw blocks."},"total":{"type":"integer","title":"Total","description":"Total number of results (-1 if using cursor mode)."},"page":{"type":"integer","title":"Page","description":"Requested page index (1-based)."},"page_size":{"type":"integer","title":"Page Size","description":"Maximum number of items returned in this page."},"has_more":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has More","description":"True if more results available (cursor mode only)."},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Cursor for next page (cursor mode only)."},"blacklisted_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blacklisted Value","description":"If a filter value matched a blacklist entry, this field contains the matched value."}},"type":"object","required":["items","total","page","page_size"],"title":"RawSearchResponse"},"RawUnlockedPartItem":{"properties":{"container_id":{"type":"integer","title":"Container Id","description":"Raw file / container ID the entry belongs to."},"entry_path":{"type":"string","title":"Entry Path","description":"Path of the file entry within the container."},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name","description":"Source file display name (original or stored)."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Source file category."},"first_unlocked_seq":{"type":"integer","title":"First Unlocked Seq","description":"Lowest unlocked block seq; the viewer opens here so it lands on unlocked content."},"preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview","description":"First lines of the first unlocked block (already-unlocked, no re-charge)."},"first_unlocked_at":{"type":"string","format":"date-time","title":"First Unlocked At","description":"First time a part in this entry was unlocked."},"last_unlocked_at":{"type":"string","format":"date-time","title":"Last Unlocked At","description":"Most recent unlock in this entry."}},"type":"object","required":["container_id","entry_path","first_unlocked_seq","first_unlocked_at","last_unlocked_at"],"title":"RawUnlockedPartItem"},"ResolvePathFiles":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TreeEntry"},"type":"array","title":"Items","description":"Entries included in the prefetched slice."},"total":{"type":"integer","title":"Total","description":"Total number of entries reported for the segment."},"page":{"type":"integer","title":"Page","description":"Page index of the prefetched slice."},"page_size":{"type":"integer","title":"Page Size","description":"Maximum number of entries returned in the slice."}},"type":"object","required":["items","total","page","page_size"],"title":"ResolvePathFiles"},"ResolvePathOptions":{"properties":{"prefetch_files":{"type":"boolean","title":"Prefetch Files","description":"Whether the resolver should prefetch the first page of files for each segment.","default":true},"max_subfolders":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Max Subfolders","description":"Maximum number of subfolders to fetch per segment.","default":1000},"file_page_size":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"File Page Size","description":"Page size used when prefetching files for each segment.","default":200},"prefetch_parts":{"anyOf":[{"$ref":"#/components/schemas/ResolvePathPrefetchParts"},{"type":"null"}],"description":"Optional window of parts to prefetch for the resolved file."}},"type":"object","title":"ResolvePathOptions"},"ResolvePathPrefetchParts":{"properties":{"seq":{"type":"integer","minimum":0.0,"title":"Seq","description":"Sequence number to centre the prefetched window around."},"limit":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Limit","description":"Number of parts to retrieve around the target sequence."}},"type":"object","required":["seq"],"title":"ResolvePathPrefetchParts"},"ResolvePathRequest":{"properties":{"container_id":{"type":"integer","minimum":1.0,"title":"Container Id","description":"Identifier of the container that owns the entry."},"entry_path":{"type":"string","title":"Entry Path","description":"Entry path to resolve from the root of the container.","default":""},"options":{"anyOf":[{"$ref":"#/components/schemas/ResolvePathOptions"},{"type":"null"}],"description":"Fine-grained resolver options."}},"type":"object","required":["container_id"],"title":"ResolvePathRequest","example":{"container_id":123,"entry_path":"db/users.txt"}},"ResolvePathResponse":{"properties":{"container_id":{"type":"string","title":"Container Id","description":"Identifier of the container that owns the resolved path."},"entry_path":{"type":"string","title":"Entry Path","description":"Entry path requested by the caller."},"segments":{"items":{"$ref":"#/components/schemas/ResolvePathSegment"},"type":"array","title":"Segments","description":"Ordered list of segments composing the folder chain."},"target_entry":{"anyOf":[{"$ref":"#/components/schemas/TreeEntry"},{"type":"null"}],"description":"Entry metadata for the resolved file when found."},"target_parts":{"anyOf":[{"$ref":"#/components/schemas/PartsResponse"},{"type":"null"}],"description":"Prefetched parts for the resolved file when requested."}},"type":"object","required":["container_id","entry_path","segments"],"title":"ResolvePathResponse"},"ResolvePathSegment":{"properties":{"prefix":{"type":"string","title":"Prefix","description":"Folder prefix represented by this segment."},"subfolders":{"items":{"type":"string"},"type":"array","title":"Subfolders","description":"Immediate subfolders available under the prefix."},"subfolders_truncated":{"type":"boolean","title":"Subfolders Truncated","description":"True when more subfolders are available beyond the prefetched slice.","default":false},"files":{"anyOf":[{"$ref":"#/components/schemas/ResolvePathFiles"},{"type":"null"}],"description":"Prefetched file entries located in this prefix when available."}},"type":"object","required":["prefix"],"title":"ResolvePathSegment"},"StatsResponse":{"properties":{"leaks":{"$ref":"#/components/schemas/LeaksStats"},"raw_lines":{"$ref":"#/components/schemas/LeaksStats"},"dark_web_posts":{"anyOf":[{"$ref":"#/components/schemas/DarkWebPostsStats"},{"type":"null"}]}},"type":"object","required":["leaks","raw_lines"],"title":"StatsResponse"},"StatsUnavailableResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"StatsUnavailableResponse"},"StatusUpdateIn":{"properties":{"status":{"type":"string","title":"Status","description":"Target status: new, in_progress, fixed, accepted_risk"}},"type":"object","required":["status"],"title":"StatusUpdateIn","example":{"status":"fixed"}},"SubdomainOccurrences":{"properties":{"subdomain":{"type":"string","title":"Subdomain","description":"Subdomain value."},"occurrences":{"type":"integer","title":"Occurrences","description":"Number of leaked credentials associated with this subdomain."}},"type":"object","required":["subdomain","occurrences"],"title":"SubdomainOccurrences"},"SubfoldersResponse":{"properties":{"items":{"items":{"type":"string"},"type":"array","title":"Items","description":"List of immediate subfolders found below the prefix."},"total":{"type":"integer","title":"Total","description":"Total count of distinct immediate subfolders estimated precisely."},"page":{"type":"integer","title":"Page","description":"Requested page index (1-based)."},"page_size":{"type":"integer","title":"Page Size","description":"Page size used for the listing."},"has_more":{"type":"boolean","title":"Has More","description":"True if there are more subfolders beyond this page."},"container_id":{"type":"string","title":"Container Id","description":"Identifier of the container that was browsed."},"prefix":{"type":"string","title":"Prefix","description":"Folder prefix used for the aggregation."}},"type":"object","required":["items","total","page","page_size","has_more","container_id","prefix"],"title":"SubfoldersResponse"},"TaskStatusOut":{"properties":{"task_id":{"type":"string","title":"Task Id"},"running":{"type":"boolean","title":"Running"},"completed":{"type":"boolean","title":"Completed"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"updated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Updated"},"version_conflicts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Conflicts"}},"type":"object","required":["task_id","running","completed"],"title":"TaskStatusOut","example":{"completed":true,"running":false,"task_id":"a1b2c3:UNLOCK","total":100,"updated":100,"version_conflicts":0}},"TeamInvitationActor":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","required":["id","email"],"title":"TeamInvitationActor"},"TeamInvitationCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"type":"string","enum":["member","admin"],"title":"Role","default":"member"}},"type":"object","required":["email"],"title":"TeamInvitationCreate","example":{"email":"newmember@example.com","name":"Jane Doe","role":"member"}},"TeamInvitationResponse":{"properties":{"id":{"type":"integer","title":"Id","description":"Invitation ID."},"invited_email":{"type":"string","format":"email","title":"Invited Email","description":"Email address of the invited user."},"invited_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited Name","description":"Name of the invited user."},"role":{"type":"string","title":"Role","description":"Assigned role: 'member' or 'admin'."},"status":{"type":"string","title":"Status","description":"Invitation status: 'pending', 'accepted', 'revoked', or 'expired'."},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"Expiration date of the invitation."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation date of the invitation."},"invited_by":{"anyOf":[{"$ref":"#/components/schemas/TeamInvitationActor"},{"type":"null"}],"description":"User who sent the invitation."},"accepted_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Accepted User Id","description":"ID of the user who accepted the invitation."},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"Invitation token (only returned on creation)."}},"type":"object","required":["id","invited_email","role","status","expires_at","created_at"],"title":"TeamInvitationResponse"},"TeamMemberResponse":{"properties":{"id":{"type":"integer","title":"Id","description":"User ID of the team member."},"email":{"type":"string","format":"email","title":"Email","description":"Email address of the team member."},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name","description":"First name."},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name","description":"Last name."},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization","description":"Organization name."},"team_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Role","description":"Role within the team: 'member' or 'admin'."},"joined_at":{"type":"string","format":"date-time","title":"Joined At","description":"Date when the member joined the team."},"last_login":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login","description":"Last login date."},"is_owner":{"type":"boolean","title":"Is Owner","description":"Whether this member is the team owner.","default":false}},"type":"object","required":["id","email","joined_at"],"title":"TeamMemberResponse"},"TeamMemberRoleUpdate":{"properties":{"team_role":{"type":"string","enum":["member","admin"],"title":"Team Role"}},"type":"object","required":["team_role"],"title":"TeamMemberRoleUpdate","example":{"team_role":"admin"}},"TeamOverviewResponse":{"properties":{"owner":{"$ref":"#/components/schemas/TeamMemberResponse","description":"Team owner details."},"members":{"items":{"$ref":"#/components/schemas/TeamMemberResponse"},"type":"array","title":"Members","description":"Active team members."},"invitations":{"items":{"$ref":"#/components/schemas/TeamInvitationResponse"},"type":"array","title":"Invitations","description":"Pending and past invitations."},"plan":{"$ref":"#/components/schemas/TeamPlanSummary","description":"Current plan summary for the team."},"quota":{"$ref":"#/components/schemas/TeamQuotaResponse","description":"Team member quota and availability."}},"type":"object","required":["owner","members","invitations","plan","quota"],"title":"TeamOverviewResponse"},"TeamPlanSummary":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id","description":"Plan ID."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Plan name."},"team_enabled":{"type":"boolean","title":"Team Enabled","description":"Whether the plan includes team features.","default":false},"team_member_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Member Limit","description":"Maximum number of team members allowed by the plan."}},"type":"object","title":"TeamPlanSummary"},"TeamQuotaResponse":{"properties":{"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"Maximum number of team members allowed by the plan."},"members":{"type":"integer","title":"Members","description":"Current number of active team members."},"pending":{"type":"integer","title":"Pending","description":"Number of pending invitations."},"available":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available","description":"Number of remaining seats available."}},"type":"object","required":["members","pending"],"title":"TeamQuotaResponse"},"TeamUsageMetric":{"properties":{"used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Used","description":"Current consumption, null when unreadable."},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"Plan limit, null when unlimited."},"pending":{"type":"integer","title":"Pending","description":"Pending invitations, they hold a seat.","default":0},"enabled":{"type":"boolean","title":"Enabled","description":"Whether the plan allows a team at all.","default":false}},"type":"object","title":"TeamUsageMetric"},"TreeEntry":{"properties":{"entry_path":{"type":"string","title":"Entry Path","description":"Entry path inside the container."},"entry_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Name","description":"Base name of the entry, when present."},"ext":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ext","description":"File extension for the entry."},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes","description":"Size of the entry in bytes, when known."},"mtime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mtime","description":"Last modification timestamp."}},"type":"object","required":["entry_path"],"title":"TreeEntry"},"URLOccurrences":{"properties":{"url":{"type":"string","title":"Url","description":"URL value."},"occurrences":{"type":"integer","title":"Occurrences","description":"Number of leaked credentials associated with this URL."}},"type":"object","required":["url","occurrences"],"title":"URLOccurrences"},"UnlockRequest":{"properties":{"leak_ids":{"items":{"type":"string","maxLength":64,"strip_whitespace":true},"type":"array","title":"Leak Ids","description":"List of leak document IDs to unlock."},"target_list_id":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Target List Id","description":"Optional list id to assign to newly unlocked items."}},"type":"object","required":["leak_ids"],"title":"UnlockRequest","example":{"leak_ids":["3f1a9c2b7e","8d4e0a1f6c"],"target_list_id":42}},"UnlockedExportRequest":{"properties":{"search":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"},"is_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Email"},"unlocked_at_min":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Unlocked At Min"},"list_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Id"},"list_none":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"List None","default":false}},"type":"object","title":"UnlockedExportRequest","example":{"is_email":true,"search":"example.com"}},"UnlockedLeakDetails":{"properties":{"id":{"type":"string","title":"Id","description":"Unique leak identifier."},"url":{"type":"string","title":"Url","description":"Source URL where the credentials were found."},"username":{"type":"string","title":"Username","description":"Leaked username or email address."},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"Leaked password (plaintext). Null when the user has enabled `hide_passwords` in their preferences."},"password_strength":{"type":"integer","title":"Password Strength","description":"Password strength raw score (integer, 0+). Categories: too_weak (0-2), weak (3-4), medium (5-7), strong (8+)."},"unlocked":{"type":"boolean","title":"Unlocked","description":"Always true for unlocked items.","default":false},"is_email":{"type":"boolean","title":"Is Email","description":"True if the username is an email address."},"added_at":{"type":"string","format":"date-time","title":"Added At","description":"Date when this leak was added to the database."},"unlocked_at":{"type":"string","format":"date-time","title":"Unlocked At","description":"Date when this item was unlocked by the current account."},"auto_unlocked":{"type":"boolean","title":"Auto Unlocked","description":"Whether this item was automatically unlocked (via auto_unlock or notification).","default":false},"auto_unlocked_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auto Unlocked By","description":"ID of the notification that triggered the auto-unlock, if applicable."},"list_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"List Id","description":"ID of the unlocked list this item is assigned to."},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"User-defined comment on this unlocked item."},"status":{"type":"string","title":"Status","description":"Remediation status: new, in_progress, fixed, accepted_risk.","default":"new"}},"type":"object","required":["id","url","username","password_strength","is_email","added_at","unlocked_at"],"title":"UnlockedLeakDetails"},"UnlockedListCreateIn":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"color":{"anyOf":[{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},{"type":"null"}],"title":"Color"}},"type":"object","required":["name"],"title":"UnlockedListCreateIn","example":{"color":"#3b82f6","name":"Priority targets"}},"UnlockedListOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"items_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Items Count"}},"type":"object","required":["id","name","color","created_at","updated_at"],"title":"UnlockedListOut","example":{"color":"#3b82f6","created_at":"2025-01-15T10:30:00Z","id":42,"items_count":12,"name":"Priority targets","updated_at":"2025-01-15T10:30:00Z"}},"UnlockedListUpdateIn":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":80,"minLength":1},{"type":"null"}],"title":"Name"},"color":{"anyOf":[{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},{"type":"null"}],"title":"Color"}},"type":"object","title":"UnlockedListUpdateIn","example":{"color":"#10b981","name":"Renamed list"}},"UsageMetric":{"properties":{"used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Used","description":"Current consumption, null when unreadable."},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"Plan limit, null when unlimited."}},"type":"object","title":"UsageMetric","description":"One plan dimension: how much of it is consumed right now.\n\n``limit = None`` means unlimited, ``used = None`` means the counter could\nnot be read (Redis down) and the UI should show \"unavailable\" rather than 0."},"UserBase":{"properties":{"id":{"type":"integer","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization"},"email":{"type":"string","title":"Email"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"address_line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line2"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"tva_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tva Number"},"admin":{"type":"boolean","title":"Admin"},"is_uploader":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Uploader","default":false},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"subscription_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Start Date"},"subscription_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription End Date"},"subscription_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscription Active"},"subscription_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subscription Points"},"subscription_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subscription Gb"},"extra_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extra Points"},"extra_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extra Gb"},"last_gb_reset":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Gb Reset"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"plan_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plan Id"},"invoices":{"items":{"$ref":"#/components/schemas/InvoiceBase"},"type":"array","title":"Invoices"},"plan":{"anyOf":[{"$ref":"#/components/schemas/PlanBase"},{"type":"null"}]},"parent_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent User Id"},"team_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Role"},"email_confirmed":{"type":"boolean","title":"Email Confirmed"},"last_login":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login"},"last_login_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Login Ip"},"registration_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Ip"},"campaign_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Code"},"register_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Register By"},"banned":{"type":"boolean","title":"Banned"},"api":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api"},"twofa_enabled":{"type":"boolean","title":"Twofa Enabled"},"twofa_pin_enabled":{"type":"boolean","title":"Twofa Pin Enabled","default":false},"twofa_totp_enabled":{"type":"boolean","title":"Twofa Totp Enabled","default":false},"has_password":{"type":"boolean","title":"Has Password","default":true},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"},"referral_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Referral Percentage"},"referral_percentage_renewal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Referral Percentage Renewal"},"last_points_reset":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Points Reset"}},"type":"object","required":["id","first_name","last_name","organization","email","address","address_line2","city","region","zip_code","country","phone","tva_number","admin","timestamp","subscription_start_date","subscription_end_date","subscription_active","subscription_points","stripe_subscription_id","plan_id","invoices","plan","email_confirmed","last_login","last_login_ip","registration_ip","campaign_code","register_by","banned","api","twofa_enabled"],"title":"UserBase"},"UserPreferencesRead":{"properties":{"hide_passwords":{"type":"boolean","title":"Hide Passwords","description":"When true, plaintext passwords are redacted from search results, the unlocked-leaks list, and exports on email/domain/advanced scopes.","default":false}},"type":"object","title":"UserPreferencesRead"},"UserPreferencesUpdate":{"properties":{"hide_passwords":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hide Passwords","description":"Toggle password redaction. Omit to leave unchanged."}},"type":"object","title":"UserPreferencesUpdate","example":{"hide_passwords":true}},"UserTaskItem":{"properties":{"id":{"type":"integer","title":"Id","description":"Task ID."},"kind":{"type":"string","title":"Kind","description":"Task type (e.g. unlock, export)."},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope","description":"Scope of the task (e.g. email, domain, advanced)."},"status":{"type":"string","title":"Status","description":"Task status: pending, running, completed, or failed."},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total number of items to process."},"updated":{"type":"integer","title":"Updated","description":"Number of items processed so far."},"points_charged":{"type":"integer","title":"Points Charged","description":"Total points charged for this task."},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if the task failed."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Date when the task was created."},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"Date when the task started processing."},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At","description":"Date when the task finished."}},"type":"object","required":["id","kind","status","updated","points_charged","created_at"],"title":"UserTaskItem"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationErrorDetail":{"properties":{"loc":{"items":{"type":"string"},"type":"array","title":"Loc"},"msg":{"type":"string","title":"Msg"},"type":{"type":"string","title":"Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationErrorDetail"},"WebhookCustomHeader":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","description":"HTTP header name.","strip_whitespace":true},"value":{"type":"string","maxLength":500,"title":"Value","description":"HTTP header value.","strip_whitespace":true}},"additionalProperties":false,"type":"object","required":["name","value"],"title":"WebhookCustomHeader"},"WebhookHeaderOut":{"properties":{"name":{"type":"string","title":"Name"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"}},"type":"object","required":["name"],"title":"WebhookHeaderOut"}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api.leakradar.io","description":"Production API"}]}