A free, open REST API for OSINT operations. No authentication required. All endpoints return JSON. You can self-host Flint or use the public instance at flint.bromine.cc.
Base URL
https://flint.bromine.cc/api
Authentication
None required
Rate Limit
30 requests / minute
Response Format
JSON (UTF-8)
All responses follow this structure
{"success": true,
"data": { ... }}// On error:{"success": false,
"error": "Description of what went wrong"}
Overview
Rate Limits
The API allows 30 requests per minute per IP address. If you exceed this, you'll receive a 429 response. The limit resets every 60 seconds.
{"success": false,
"error": "Rate limit exceeded. Try again in a minute."}
Overview
Error Handling
HTTP status codes indicate the class of error. Always check the success field before reading data.
Status
Meaning
When it happens
200
OK
Request succeeded
400
Bad Request
Invalid input format or unreachable target
404
Not Found
Domain has no DNS records
429
Too Many Requests
Rate limit exceeded
500
Server Error
Upstream service failed
Endpoint
IP Lookup
Returns geolocation, ASN, ISP, reverse DNS, and proxy/VPN/hosting detection for any IPv4 or IPv6 address. Powered by ip-api.com.
GET/api/ip/:ipIP Lookup▾
Looks up an IPv4 or IPv6 address. Returns location, network, and threat intelligence data.
import requests
r = requests.get('https://flint.bromine.cc/api/ip/8.8.8.8')
data = r.json()
if data['success']:
print(data['data']['country']) # United States
print(data['data']['isp']) # Google LLC
print(data['data']['proxy']) # False
const res = await fetch('https://flint.bromine.cc/api/whois/google.com');
const json = await res.json();
if (json.success) {
const { parsed, raw } = json.data;
console.log(parsed['Registrar']); // MarkMonitor Inc.
console.log(parsed['Created Date']); // 1997-09-15
console.log(parsed['Expiry Date']); // 2028-09-14
}
import requests
r = requests.get('https://flint.bromine.cc/api/whois/google.com')
data = r.json()['data']
print(data['parsed'].get('Registrar'))
print(data['parsed'].get('Created Date'))
print(data['raw'][:500]) # raw WHOIS text
import requests
r = requests.get('https://flint.bromine.cc/api/dns/google.com')
records = r.json()['data']['records']
for ip in records.get('A', []):
print('A:', ip)
for mx in records.get('MX', []):
print('MX:', mx['priority'], mx['exchange'])
const res = await fetch('https://flint.bromine.cc/api/username/torvalds');
const json = await res.json();
const found = json.data.results.filter(r => r.found);
console.log(`Found on ${found.length} platforms`);
found.forEach(r => console.log(r.name, r.url));
import requests
r = requests.get('https://flint.bromine.cc/api/username/torvalds')
data = r.json()['data']
print(f"Found on {data['summary']['found']} of {data['summary']['total']} platforms")
for result in data['results']:
if result['found']:
print(result['name'], result['url'])
Parses and validates a phone number in E.164 format. Returns country, calling code, number type (mobile/fixed/VoIP), and multiple formatting representations.
GET/api/phone/:numberPhone Lookup▾
Pass the number without the leading +. For example, +16502530000 becomes /api/phone/16502530000.
Path Parameters
Name
Type
Description
numberrequired
string
Phone number digits with country code, no leading + (e.g. 16502530000)
Flint ships with a ready-made Discord bot that wraps every API endpoint as a slash command. Follow these steps to get it running in your server.
Setup Guide▾
1 — Create a Discord application
1. Go to https://discord.com/developers/applications
2. Click "New Application" → give it a name
3. Go to "Bot" → click "Add Bot"
4. Copy the Bot Token
5. Go to "OAuth2" → copy the Application ID (Client ID)
6. Enable "applications.commands" scope and invite the bot to your server