DataSentry Docs
IP intelligence API. Lookup, geolocation, threat data, and carrier info.
Quick Start
Get your first IP lookup in under 5 minutes.
Create an account and get your API key
Sign up at datasentry.site/pricing, choose a plan, and copy your API key from the dashboard.
Make your first request
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.datasentry.site/v1/lookup?ip=8.8.8.8"Get the response
{
"ip": "8.8.8.8",
"location": {
"country": "United States",
"country_code": "US",
"region": "California",
"city": "Mountain View",
"latitude": 37.422,
"longitude": -122.084,
"timezone": "America/Los_Angeles",
"isp": "Google LLC",
"asn": "AS15169 Google LLC"
},
"security": {
"is_vpn": false,
"is_proxy": false,
"is_tor": false,
"is_hosting": false,
"risk_score": 0,
"threat_types": []
},
"carrier": {
"mobile": false,
"carrier": "Google LLC",
"connection_type": "unknown"
}
}Authentication
Every request requires an API key passed in the x-api-key header.
x-api-key: ds_prod_xxxxxxxxxxxxxxxxFind your key in the API Keys dashboard. Keys start with ds_prod_.
Error Handling
Errors use RFC 7807 Problem Details format.
| Parameter | Type | Description |
|---|---|---|
| 400 | Bad Request | Invalid IP address or missing parameter |
| 401 | Unauthorized | Missing or invalid API key |
| 429 | Too Many Requests | Rate limit or quota exceeded |
| 500 | Internal Server Error | Server-side lookup failure |
{
"type": "https://datasentry.site/errors",
"title": "Bad Request",
"status": 400,
"detail": "Missing required query parameter: ip"
}/v1/lookup
Look up geolocation, security, and carrier data for a single IPv4 address.
Parameters
| Parameter | Type | Description |
|---|---|---|
| ip* | string | IPv4 address to lookup |
| fields | string | Comma-separated fields to include in response |
| nocache | boolean | Skip cache and fetch fresh data |
Example
curl -H "x-api-key: ds_prod_xxxxxxxx" \
"https://api.datasentry.site/v1/lookup?ip=8.8.8.8"Response
{
"ip": "8.8.8.8",
"location": {
"country": "United States",
"country_code": "US",
"region": "California",
"city": "Mountain View",
"latitude": 37.422,
"longitude": -122.084,
"timezone": "America/Los_Angeles",
"isp": "Google LLC",
"asn": "AS15169 Google LLC"
},
"security": {
"is_vpn": false,
"is_proxy": false,
"is_tor": false,
"is_hosting": false,
"risk_score": 0,
"threat_types": []
},
"carrier": {
"mobile": false,
"carrier": "Google LLC",
"connection_type": "unknown"
},
"metadata": {
"lookup_time_ms": 12.5,
"cached": false,
"source": "maxmind"
}
}/v1/bulk
Look up multiple IPs in a single request. Maximum 1,000 IPs per request. Each batch counts as one quota unit.
Request Body
| Parameter | Type | Description |
|---|---|---|
| ips* | string[] | Array of IPv4 addresses (max 1,000) |
Example
curl -X POST \
-H "x-api-key: ds_prod_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"ips": ["8.8.8.8", "1.1.1.1", "208.67.222.222"]}' \
"https://api.datasentry.site/v1/bulk"Response
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"total": 3,
"results": [
{
"ip": "8.8.8.8",
"location": { "country": "United States", "city": "Mountain View", ... },
"security": { ... },
"carrier": { ... }
},
{ ... },
{ ... }
],
"response_time_ms": 45.2
}/api/health
Check service health and dependency status. No authentication required.
{
"status": "ok",
"timestamp": "2026-05-29T12:00:00.000Z",
"services": {
"redis": "connected",
"clerk": "configured",
"polar": "configured",
"database": "configured"
}
}Dashboard
The web dashboard at datasentry.site/dashboard gives you full visibility and control.
Overview
Real-time API usage stats, response latency metrics, and geographic distribution of your lookups. The overview loads data from /api/dashboard/overview.
API Keys
Create, view, and revoke API keys. Each key is tied to your account and scoped to your subscription plan. Keys are displayed once at creation.
Usage
Track monthly quota consumption, daily request volume, and per-endpoint breakdowns. Data sourced from /api/dashboard/usage.
Playground
Test API calls interactively. Enter an IP address or paste a bulk request body and see the response in real time.
Billing
Subscription management has moved to Settings. You can view your current plan, upgrade, or cancel your subscription from the Account tab. For billing issues, contact supp.datasentry@gmail.com.
Settings
Configure webhook endpoints for subscription events, set usage notification thresholds, manage API preferences, and handle subscription billing (upgrade, cancel, view plan status).
Threat Feed
Real-time threat intelligence view. Browse flagged IPs, threat scores, and risk classifications from recent lookups.
Bulk Ops
Batch IP lookup tool. Paste or upload a list of IPs and get results without writing code.
Integrations
Overview of available integrations: CLI tool, JavaScript SDK, Python SDK, MCP Server, and webhooks.
JavaScript SDK
Zero-dependency TypeScript client. Uses native fetch. Works in Node.js 18+ and browsers.
Install
npm install @datasentry/sdkUsage
import { DataSentry } from "@datasentry/sdk";
const client = new DataSentry({ apiKey: "ds_prod_xxxxxxxx" });
// Single lookup
const result = await client.lookup({ ip: "8.8.8.8" });
console.log(result.location.city); // "Mountain View"
// Bulk lookup
const bulk = await client.bulk(["8.8.8.8", "1.1.1.1"]);
console.log(bulk.results.length); // 2
// Check usage
const usage = await client.usage();
console.log(usage.credits_remaining);The SDK retries failed requests with exponential backoff (up to 3 attempts) and throws typed errors: UnauthorizedError, RateLimitError, ValidationError.
Python SDK
Async-first client with sync support. Uses httpx under the hood.
Install
pip install datasentrySync Usage
from datasentry import DataSentry
client = DataSentry(api_key="ds_prod_xxxxxxxx")
# Single lookup
result = client.lookup(ip="8.8.8.8")
print(result.location.city) # "Mountain View"
# Check usage
usage = client.usage()
print(usage.credits_remaining)Async Usage
import asyncio
from datasentry import DataSentry
async def main():
async with DataSentry(api_key="ds_prod_xxxxxxxx") as client:
result = await client.lookup_async(ip="8.8.8.8")
print(result.location.city)
asyncio.run(main())CLI Tool
Run IP lookups from your terminal. Install globally and authenticate once.
Install
npm install -g @datasentry/cliAuthenticate
datasentry auth ds_prod_xxxxxxxxCommands
| Command | Description |
|---|---|
| datasentry lookup [ip] | Lookup a specific IP (or your own IP if omitted) |
| datasentry lookup --json | Output raw JSON |
| datasentry usage | View credit balance and quota |
| datasentry auth [key] | Save API key locally |
| datasentry logout | Clear local credentials |
Webhooks
DataSentry sends webhook events via Polar.sh when subscription state changes. Configure your webhook endpoint in Settings.
Events
| Event | Trigger |
|---|---|
| subscription.created | New subscription purchased |
| subscription.updated | Plan changed or payment updated |
| subscription.active | Subscription confirmed active |
| subscription.cancelled | User cancelled subscription |
| subscription.revoked | Subscription revoked by admin |
Verification
Webhooks are signed with HMAC-SHA256. Verify the polar-signature header against your POLAR_WEBHOOK_SECRET.
Rate Limits
Enforced per API key. Check the x-rate-limit-remaining response header.
| Plan | Requests/min | Monthly Quota | Max Bulk Size |
|---|---|---|---|
| Standard | 20 | 100,000 | 1,000 IPs |
| Pro | 200 | 500,000 | 10,000 IPs |
| Lifetime | 500 | Unlimited | 50,000 IPs |
Pricing
All plans include access to the full API, SDKs, and dashboard. Paid via Polar.sh.
Standard
$39/mo
100K requests · 20 req/min · 1K bulk
Pro
$79/mo
500K requests · 200 req/min · 10K bulk
Lifetime
$199 one-time
Unlimited · 500 req/min · 50K bulk
Ready to start?
Create an account, grab your API key, and make your first call.