Quickstart
Make your first lookup in a few minutes. You need an account, an API key and credits in your balance. Credits come with a plan: Starter, Growth and Professional each start with a 7-day trial for $1 that allows 100 credits, and Enterprise is set up on a call.
1. Get an API key
- Email hello@lookvalid.com with the lookups you need and roughly how many a month.
- We set up your account and a plan with 100 credits to try any lookup.
- We send your API key. Copy it right away. It is shown once and cannot be recovered later. If you lose it, ask us to revoke it and send another.
Keys start with lv_live_. Keep the key in an environment variable, never in source control or in browser code:
export LOOKVALID_API_KEY="lv_live_..."
2. Make your first request
Every lookup is a POST to https:/ with a JSON body. This example looks up an IP address with the IP Intelligence product.
curl -X POST https://YOUR_API_HOST/v1/ip \
-H "Authorization: Bearer $LOOKVALID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ip":"203.0.113.7"}'
const response = await fetch("https://YOUR_API_HOST/v1/ip", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LOOKVALID_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"ip": "203.0.113.7"
}),
});
const result = await response.json();
if (!response.ok) throw new Error(`${result.error.code}: ${result.error.fix}`);
console.log(result.found, result.data, result.credits_charged);
import os
import requests
response = requests.post(
"https://YOUR_API_HOST/v1/ip",
headers={"Authorization": f"Bearer {os.environ['LOOKVALID_API_KEY']}"},
json={
"ip": "203.0.113.7",
},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(f"{result['error']['code']}: {result['error']['fix']}")
print(result["found"], result["data"], result["credits_charged"])
The request body for every product is described on its reference page.
3. Read the response
A lookup that ran returns HTTP 200 whether or not it found something:
{
"request_id": "req_...",
"product": "ip",
"found": true,
"data": { "...": "the result" },
"reason": null,
"sources": ["where the data came from"],
"credits_charged": 1,
"credits_remaining": 99,
"cache_hit": false,
"cache": { "hit": false, "cached_at": "...", "expires_at": "..." }
}
foundtells you whether data came back.found: falseis a normal answer, andreasonsays why.dataholds the result, ornullwhen nothing was found.sourceslists where the data came from. Show any attribution listed there wherever you show the result.credits_chargedandcredits_remainingshow what this request cost and what is left. The same numbers arrive in theX-Credits-ChargedandX-Credits-Remainingheaders.cache_hitis true when you already paid for this lookup in the last 7 days. A repeat costs nothing.
This block shows the shape of a response, not the result of a real lookup. Each reference page lists every field of data for its product.
4. Check your balance
GET / returns your balance and key summary and never costs credits.
curl https://YOUR_API_HOST/v1/account \
-H "Authorization: Bearer $LOOKVALID_API_KEY"
5. Handle errors
Errors use one JSON envelope with a stable code, a fix that says what to do, and a retryable flag. Nothing is charged for an error. Branch on code, never on the message text. See errors.
Next steps
- Credits and billing explains exactly when you are charged.
- Rate limits shows how to stay under the limit and what to do on a 429.
- MCP server puts every lookup in your AI assistant.