Skip to content

Leaks API

The Leaks API provides access to leaked data collected from Telegram channels, including files, credentials, personal information, and other sensitive data. Search by email, wallet address, IP address, phone number, username, file hash, or perform generic searches across all fields.

Perform a comprehensive search across all leak content and metadata fields with highlighting.

GET/api/v2/leak/search

This endpoint searches across content, detected entities (emails, usernames, phone numbers, IP addresses, wallet addresses), and channel information. Results include highlighted snippets showing where matches were found.

NameTypeRequiredDescription
qstringYesSearch query (minimum 3 characters, maximum 500)
pageintegerNoPage number (default: 1)
page_sizeintegerNoResults per page (default: 50, max: 100)
gtestringNoStart date filter (ISO 8601 format)
ltestringNoEnd date filter (ISO 8601 format)

Results include highlighted snippets with matches wrapped in <mark> tags:

  • content: Up to 3 context snippets (150 characters each)
  • detected_info fields: Emails, usernames, phone numbers, IP addresses, wallet addresses
  • channel_name, channel_username: Highlighted matches
Terminal window
curl "https://api.vysion.ai/api/v2/leak/search?q=password+database&page=1" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'
{
"data": {
"total": 21,
"hits": [
{
"id": "xyz123",
"filePath": "leaked_credentials.txt",
"fileHash": "a3b2c1d4e5f6...",
"detectionDate": "2024-01-15T10:30:00Z",
"detectedInfo": {
"emails": ["admin@company.com"],
"usernames": ["admin"]
},
"highlight": {
"detectedInfo.emails": ["<mark>admin@company.com</mark>"],
"content": [
"Username: admin\n<mark>Password</mark>: secret123",
"Access to production <mark>database</mark>"
]
}
}
]
},
"error": null
}
  • Email addresses: user@example.com
  • Usernames: johndoe
  • IP addresses: 192.168.1.1
  • Phone numbers: +1234567890
  • Wallet addresses: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
  • Keywords: password, database, credentials

Search for leaked data containing a specific email address.

GET/api/v2/leak/email/{email}
NameTypeRequiredDescription
emailstringYesEmail address to search for
pageintegerNoPage number (default: 1)
page_sizeintegerNoResults per page (default: 50, max: 100)
gtestringNoStart date filter (ISO 8601 format)
ltestringNoEnd date filter (ISO 8601 format)
Terminal window
curl "https://api.vysion.ai/api/v2/leak/email/user@example.com?page=1&page_size=10" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'
{
"data": {
"total": 5,
"hits": [
{
"id": "abc123xyz",
"detectionDate": "2024-01-15T10:30:00Z",
"filePath": "leaked_database.sql",
"fileHash": "a3b2c1d4e5f6...",
"fileSize": 1024000,
"fileType": "sql",
"detectedMimeType": "text/plain",
"detectedInfo": {
"emails": ["user@example.com"],
"usernames": ["johndoe"],
"phone_numbers": ["+1234567890"]
},
"telegram": {
"channelId": -1001234567890,
"messageId": 42,
"channelName": "Data Leaks"
}
}
]
},
"error": null
}

Search for leaked data containing a cryptocurrency wallet address.

GET/api/v2/leak/wallet/{chain}/{address}
  • BTC - Bitcoin
  • ETH - Ethereum
  • XMR - Monero
  • XRP - Ripple
  • ZEC - Zcash
  • DOT - Polkadot
  • BNB - Binance Coin
  • DASH - Dash
NameTypeRequiredDescription
chainstringYesCryptocurrency chain identifier (case-insensitive)
addressstringYesWallet address to search for
pageintegerNoPage number (default: 1)
page_sizeintegerNoResults per page (default: 50, max: 100)
gtestringNoStart date filter (ISO 8601 format)
ltestringNoEnd date filter (ISO 8601 format)
Terminal window
curl "https://api.vysion.ai/api/v2/leak/wallet/BTC/1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'

Search for leaked data containing an IP address (IPv4 or IPv6).

GET/api/v2/leak/ip/{ip_address}
NameTypeRequiredDescription
ip_addressstringYesIP address (IPv4 or IPv6)
pageintegerNoPage number (default: 1)
page_sizeintegerNoResults per page (default: 50, max: 100)
gtestringNoStart date filter (ISO 8601 format)
ltestringNoEnd date filter (ISO 8601 format)
Terminal window
curl "https://api.vysion.ai/api/v2/leak/ip/192.168.1.1" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'

Search for leaked data containing a phone number.

GET/api/v2/leak/phone/{country_code}/{number}
NameTypeRequiredDescription
country_codestringYesCountry code (e.g., “1” for US, “34” for Spain)
numberstringYesPhone number without country code
pageintegerNoPage number (default: 1)
page_sizeintegerNoResults per page (default: 50, max: 100)
gtestringNoStart date filter (ISO 8601 format)
ltestringNoEnd date filter (ISO 8601 format)
Terminal window
curl "https://api.vysion.ai/api/v2/leak/phone/1/5551234567" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'

Search for leaked data containing a username.

GET/api/v2/leak/username/{username}
NameTypeRequiredDescription
usernamestringYesUsername to search for
pageintegerNoPage number (default: 1)
page_sizeintegerNoResults per page (default: 50, max: 100)
gtestringNoStart date filter (ISO 8601 format)
ltestringNoEnd date filter (ISO 8601 format)
Terminal window
curl "https://api.vysion.ai/api/v2/leak/username/johndoe" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'

Search for leaked files by hash (SHA256, SHA1, or MD5).

GET/api/v2/leak/hash/{hash}

The hash type is automatically detected based on length:

  • 64 characters: SHA256
  • 40 characters: SHA1
  • 32 characters: MD5
NameTypeRequiredDescription
hashstringYesFile hash (SHA256, SHA1, or MD5)
pageintegerNoPage number (default: 1)
page_sizeintegerNoResults per page (default: 50, max: 100)
gtestringNoStart date filter (ISO 8601 format)
ltestringNoEnd date filter (ISO 8601 format)
Terminal window
curl "https://api.vysion.ai/api/v2/leak/hash/a3b2c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'

Retrieve a specific leak document by its ID, including a download link to the file.

GET/api/v2/leak/{id}
  • Standalone files: Direct download link to the file
  • Archive members: Link to the compressed archive (not individual members)
  • Storage: Files stored in byronlabs-telegram-media S3 bucket
  • URL format: {channelId}/{YYYYMM}/{sha1sum}.{extension}
NameTypeRequiredDescription
idstringYesElasticsearch document ID of the leak
Terminal window
curl "https://api.vysion.ai/api/v2/leak/abc123xyz" \
--header 'Accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'
{
"data": {
"total": 1,
"hits": [
{
"id": "abc123xyz",
"detectionDate": "2024-01-15T10:30:00Z",
"filePath": "archive.zip/leaked_data.pdf",
"fileHash": "a3b2c1d4e5f6...",
"fileSize": 1024000,
"fileType": "pdf",
"detectedMimeType": "application/pdf",
"decompressedFilename": "leaked_data.pdf",
"archiveSource": "archive.zip",
"archiveMemberPath": "leaked_data.pdf",
"detectedInfo": {
"emails": ["user@example.com"],
"phone_numbers": ["+1234567890"],
"usernames": ["johndoe"]
},
"telegram": {
"telegram_id": "-1002104057089_108",
"channelId": -1002104057089,
"messageId": 108,
"channelName": "Data Leaks",
"channelUsername": "dataleaks"
},
"language": "en",
"languages": [
{
"language": "en",
"probability": 0.95
}
],
"parseStatus": "success",
"downloadUrl": "https://byronlabs-telegram-media.s3.amazonaws.com/..."
}
]
},
"error": null
}

All leak endpoints return data using the LeakHit schema with camelCase field names.

FieldTypeDescription
idstringUnique leak identifier
detectionDatestringISO 8601 timestamp when leak was detected
filePathstringPath to the leaked file
fileHashstringFile hash (SHA256, SHA1, or MD5)
fileSizeintegerFile size in bytes
fileTypestringFile extension/type
detectedMimeTypestringMIME type detected from file content
FieldTypeDescription
decompressedFilenamestringOriginal filename if extracted from archive
archiveSourcestringParent archive filename
archiveMemberPathstringPath within archive
FieldTypeDescription
languagestringPrimary language code (ISO 639-1)
languagesarrayDetected languages with confidence scores
parseStatusstringParsing status (success, failed, etc.)
FieldTypeDescription
detectedInfo.emailsarrayEmail addresses found
detectedInfo.usernamesarrayUsernames found
detectedInfo.phone_numbersarrayPhone numbers found
detectedInfo.ipv4_addressesarrayIPv4 addresses found
detectedInfo.ipv6_addressesarrayIPv6 addresses found
detectedInfo.bitcoin_addressesarrayBitcoin wallet addresses
detectedInfo.ethereum_addressesarrayEthereum wallet addresses
detectedInfo.monero_addressesarrayMonero wallet addresses
detectedInfo.ripple_addressesarrayRipple wallet addresses
detectedInfo.zcash_addressesarrayZcash wallet addresses
detectedInfo.polkadot_addressesarrayPolkadot wallet addresses
detectedInfo.binance_addressesarrayBinance Coin wallet addresses
detectedInfo.dash_addressesarrayDash wallet addresses
detectedInfo.hashesarrayFile hashes found in content
FieldTypeDescription
telegram.telegram_idstringTelegram message identifier
telegram.channelIdintegerTelegram channel ID
telegram.messageIdintegerTelegram message ID
telegram.channelNamestringTelegram channel name
telegram.channelUsernamestringTelegram channel username
FieldTypeDescription
downloadUrlstringPresigned S3 URL for download (only in /leak/{id} endpoint)
highlightobjectHighlighted search matches (only in /leak/search endpoint)
{
"language": "en",
"probability": 0.95
}
FieldTypeDescription
languagestringISO 639-1 language code
probabilitynumberConfidence score (0-1)

Use ISO 8601 format for date filters:

result = c.get_leak_by_email(
email="user@example.com",
gte="2024-01-01T00:00:00Z",
lte="2024-12-31T23:59:59Z"
)

Process large result sets efficiently:

page = 1
page_size = 100
while True:
result = c.search_leaks(
q="password",
page=page,
page_size=page_size
)
if not result.hits:
break
for hit in result.hits:
process_leak(hit)
if len(result.hits) < page_size:
break
page += 1

Extract highlighted content from search results:

def extract_highlights(leak_hit):
if not leak_hit.highlight:
return []
snippets = []
for field, values in leak_hit.highlight.items():
for value in values:
# Remove <mark> tags if needed
clean_value = value.replace('<mark>', '').replace('</mark>', '')
snippets.append({
'field': field,
'snippet': value,
'clean': clean_value
})
return snippets

Always check if download URL is available:

leak = c.get_leak_by_id(leak_id="abc123").hits[0]
if leak.downloadUrl:
# Download the file
import requests
response = requests.get(leak.downloadUrl)
with open(leak.decompressedFilename or "download.bin", "wb") as f:
f.write(response.content)
else:
print(f"No download available for {leak.filePath}")

All leak endpoints are subject to the standard Vysion API rate limits. See the Rate Limiting guide for details.

Leak endpoints return standard Vysion error responses. Common errors include:

Status CodeErrorDescription
400Bad RequestInvalid parameters (e.g., invalid email format, unsupported chain)
401UnauthorizedMissing or invalid API key
404Not FoundLeak ID not found (only for /leak/{id})
429Too Many RequestsRate limit exceeded
500Internal Server ErrorServer-side error

See the Error Codes reference for complete error documentation.