Storage ID Search
curl --request POST \
--url https://api.orelys.io/v1/search/storage \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"storage_id": "a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6",
"bucket": "leaks.logs"
}
'import requests
url = "https://api.orelys.io/v1/search/storage"
payload = {
"storage_id": "a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6",
"bucket": "leaks.logs"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
storage_id: 'a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6',
bucket: 'leaks.logs'
})
};
fetch('https://api.orelys.io/v1/search/storage', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));"https://accounts.example.com/login\nUSER: john.doe\nPASS: correct-horse-battery\n"{
"error": {
"code": "invalid_request",
"message": "The request has invalid fields.",
"details": [
"Max results must be a whole number between 1 and 1000.",
"Sort must be one of: relevance, date_asc, date_desc."
]
}
}{
"error": {
"code": "invalid_api_key",
"message": "This API key is not valid. It may have been regenerated or revoked."
}
}{
"error": {
"code": "plan_required",
"message": "API access comes with the Professional and Enterprise plans. This account is on Starter."
}
}{
"error": {
"code": "file_not_found",
"message": "No file matches this identifier."
}
}{
"error": {
"code": "payload_too_large",
"message": "The request body is larger than 16 KB."
}
}{
"error": {
"code": "unsupported_media_type",
"message": "Send the body as JSON with `Content-Type: application/json`."
}
}{
"error": {
"code": "rate_limited",
"message": "An account on the Professional plan can make at most 60 searches a minute."
}
}{
"error": {
"code": "file_withheld",
"message": "This file mentions a selector removed at its owner's request (orelys.io/data-removal), so it is not delivered."
}
}{
"error": {
"code": "source_error",
"message": "The search service returned an error."
}
}{
"error": {
"code": "service_unavailable",
"message": "Search is temporarily unavailable."
}
}{
"error": {
"code": "source_timeout",
"message": "The search service did not answer within 30 seconds."
}
}Search
Storage ID Search
The raw content of a file, by its Storage ID and the bucket it lives in. The answer is the file itself, as plain text.
POST
/
v1
/
search
/
storage
Storage ID Search
curl --request POST \
--url https://api.orelys.io/v1/search/storage \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"storage_id": "a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6",
"bucket": "leaks.logs"
}
'import requests
url = "https://api.orelys.io/v1/search/storage"
payload = {
"storage_id": "a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6",
"bucket": "leaks.logs"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
storage_id: 'a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6',
bucket: 'leaks.logs'
})
};
fetch('https://api.orelys.io/v1/search/storage', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));"https://accounts.example.com/login\nUSER: john.doe\nPASS: correct-horse-battery\n"{
"error": {
"code": "invalid_request",
"message": "The request has invalid fields.",
"details": [
"Max results must be a whole number between 1 and 1000.",
"Sort must be one of: relevance, date_asc, date_desc."
]
}
}{
"error": {
"code": "invalid_api_key",
"message": "This API key is not valid. It may have been regenerated or revoked."
}
}{
"error": {
"code": "plan_required",
"message": "API access comes with the Professional and Enterprise plans. This account is on Starter."
}
}{
"error": {
"code": "file_not_found",
"message": "No file matches this identifier."
}
}{
"error": {
"code": "payload_too_large",
"message": "The request body is larger than 16 KB."
}
}{
"error": {
"code": "unsupported_media_type",
"message": "Send the body as JSON with `Content-Type: application/json`."
}
}{
"error": {
"code": "rate_limited",
"message": "An account on the Professional plan can make at most 60 searches a minute."
}
}{
"error": {
"code": "file_withheld",
"message": "This file mentions a selector removed at its owner's request (orelys.io/data-removal), so it is not delivered."
}
}{
"error": {
"code": "source_error",
"message": "The search service returned an error."
}
}{
"error": {
"code": "service_unavailable",
"message": "Search is temporarily unavailable."
}
}{
"error": {
"code": "source_timeout",
"message": "The search service did not answer within 30 seconds."
}
}The bucket must be one of the twelve buckets. The answer is the file itself, in
text/plain.Authorizations
Your API key, from https://orelys.io/account/api. It starts with orl_ (keys made before the rename start with fly_ and keep working). X-API-Key: <key> works too. A key in the URL is refused.
Body
application/json
A Storage ID: 128 or 129 hexadecimal characters.
Pattern:
^[0-9a-fA-F]{128,129}$Example:
"a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6a3f1c9e07b2d48f6"
The bucket the file lives in (see List buckets).
Available options:
leaks.private.general, leaks.private, leaks.logs, leaks.public, documents.public, web.public, pastes, darknet, dns, whois, usenet, dumpster Example:
"leaks.logs"
Response
The file content.
The response is of type string.

