REST API
Run OSINT UI's tools from your own code with the REST API. Requires PRO+.
The REST API (/api/v1) lets you run any tool from your own code or automations. Every call runs server-side with your configured API keys — they never leave the server. Requires the PRO+ plan.
Authentication
- Go to Settings → API/Connect inside the app and create a token (PAT).
- Send it on every request as an
Authorization: Bearer YOUR_TOKENheader.
curl https://osint-ui.com/api/v1/domain \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain":"example.com"}'
It also works via GET with query parameters:
curl "https://osint-ui.com/api/v1/email?email=someone@example.com" \
-H "Authorization: Bearer YOUR_TOKEN"
Rate limit
600 requests / 5 minutes per PRO+ user (a plain-PRO token created before September 11, 2026 still works but at the old 120/5min limit — new tokens can't be created without PRO+).
Available endpoints
| Endpoint | Parameters | What it does |
|---|---|---|
POST /api/v1/email |
email |
Analyze an email |
POST /api/v1/phone |
phone |
Analyze a phone number |
POST /api/v1/domain |
domain |
Analyze a domain or IP |
POST /api/v1/ip |
ip |
Analyze an IP address |
POST /api/v1/reputation |
target |
Reputation of an IP/domain/URL |
POST /api/v1/username |
username |
Search a username across platforms |
POST /api/v1/hash |
hash |
Identify/analyze a hash |
POST /api/v1/crypto |
address |
Trace a crypto wallet |
POST /api/v1/telegram |
username |
Telegram OSINT |
POST /api/v1/dorks |
target, targetType |
Generate Google dorks |
POST /api/v1/url |
url |
Scan a URL |
POST /api/v1/github |
query, queryType |
GitHub OSINT |
POST /api/v1/pastes |
query |
Search paste sites |
POST /api/v1/onion |
query |
Search .onion services |
POST /api/v1/ports |
target, scanType |
Port scan a host |
POST /api/v1/leak |
selector |
Search data breaches (Intelligence X) |
GET https://osint-ui.com/api/v1 returns this same catalog as JSON, no token needed.
Response shape
Every successful response looks like {"tool": "...", "result": { ... }}. Errors return an HTTP status and a {"error": "...", ...} body:
| Status | error |
Meaning |
|---|---|---|
| 400 | missing_params |
A required parameter is missing |
| 401 | invalid_token |
Token missing, malformed or revoked |
| 403 | proplus_required |
The account isn't on PRO+ |
| 404 | unknown_tool |
That endpoint doesn't exist |
| 429 | rate_limited |
You hit the request limit |
| 500 | tool_error |
The tool itself failed to run |
JavaScript example
const res = await fetch('https://osint-ui.com/api/v1/domain', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ domain: 'example.com' }),
});
const { result } = await res.json();
Python example
import requests
r = requests.post(
"https://osint-ui.com/api/v1/domain",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={"domain": "example.com"},
)
print(r.json()["result"])
When to use the API instead of MCP
The REST API is the right path for integrating into your own backend, a script or an automation pipeline. If instead you want an AI assistant (Claude Desktop, Claude Code...) to use the tools conversationally, that's what the MCP server is for — it uses the same token.