Search 398,560 DOJ documents programmatically. Free tier available.
Get Free API KeyRegister for free at /register.html. You'll receive a key like dugusa_abc123...
# Search for "Prince Andrew"
curl -X POST "https://epstein.dugganusa.com/indexes/epstein_files/search" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "Prince Andrew", "limit": 20}'
curl "https://analytics.dugganusa.com/api/v1/api-keys/usage" \
-H "Authorization: Bearer YOUR_API_KEY"
Include your API key in the Authorization header:
Authorization: Bearer dugusa_your_api_key_here
Anonymous access (no API key) is deprecated and will be disabled on March 13, 2026. Register for a free API key to continue access.
Full-text search across 398,560 DOJ Epstein documents.
| Parameter | Type | Description |
|---|---|---|
q | string | Search query (required) |
limit | integer | Results per page (default: 20, max: 1000) |
offset | integer | Pagination offset |
filter | string | Meilisearch filter syntax |
sort | array | Sort fields (e.g., ["efta_id:asc"]) |
# Example: Search with filters
curl -X POST "https://epstein.dugganusa.com/indexes/epstein_files/search" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"q": "flight log",
"limit": 50,
"filter": "dataset = \"dataset3\"",
"attributesToHighlight": ["content"]
}'
Simple GET-based search. Proxied to Meilisearch.
| Parameter | Type | Description |
|---|---|---|
q | string | Search query (required) |
indexes | string | Index name(s), comma-separated |
limit | integer | Results per page |
# Simple search
curl "https://analytics.dugganusa.com/api/v1/search?q=Leon+Black&indexes=epstein_files&limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
Register for a new API key. Rate limited to 5 registrations per hour per IP.
Check your current usage and remaining quota.
Verify your API key is valid.
{
"hits": [
{
"efta_id": "EFTA00022136",
"content": "Document text content...",
"dataset": "dataset3",
"pages": 5,
"char_count": 12847,
"people": ["prince_andrew", "virginia_giuffre"],
"locations": ["new_york"],
"doj_url": "https://www.justice.gov/..."
}
],
"estimatedTotalHits": 228,
"processingTimeMs": 12,
"query": "Prince Andrew"
}
Rate limits reset daily at midnight UTC. Check your usage via the /api/v1/api-keys/usage endpoint.
| Tier | Daily Limit | Rate Limit Headers |
|---|---|---|
| Anonymous | 100 | X-RateLimit-Limit, X-RateLimit-Remaining |
| Free | 500 | X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset |
| Pro | 10,000 | X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset |
| Enterprise | 100,000 | X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset |
Tip: Cache responses on your end. Document content doesn't change frequently.
Free tier requires displaying the "Powered by DugganUSA" attribution badge on any project using this API.
<a href="https://epstein.dugganusa.com">
<img src="https://epstein.dugganusa.com/badge.svg" alt="Powered by DugganUSA" />
</a>
Pro and Enterprise tiers do not require attribution.
| Index | Documents | Description |
|---|---|---|
epstein_files | 398,560 | DOJ SDNY Epstein release (Datasets 1-12) |
blog | 70+ | DugganUSA analysis articles |
| Code | Meaning |
|---|---|
401 | Invalid or missing API key |
429 | Rate limit exceeded |
400 | Invalid request parameters |
500 | Server error (please report) |
import requests
API_KEY = "dugusa_your_key_here"
SEARCH_URL = "https://epstein.dugganusa.com/indexes/epstein_files/search"
response = requests.post(
SEARCH_URL,
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
json={"q": "Gates Foundation", "limit": 50}
)
data = response.json()
for hit in data["hits"]:
print(f"{hit['efta_id']}: {hit['content'][:100]}...")
const API_KEY = "dugusa_your_key_here";
async function searchEpsteinFiles(query) {
const response = await fetch(
"https://epstein.dugganusa.com/indexes/epstein_files/search",
{
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ q: query, limit: 50 })
}
);
return response.json();
}
searchEpsteinFiles("Deutsche Bank").then(data => {
console.log(`Found ${data.estimatedTotalHits} documents`);
});
Questions? Issues? Reach out: