Skip to content

API

API for developers

The DuckINT API for Pro accounts: run the same OSINT searches from your own code with an API key, with the same sources, quota and limits as the site.

1. Get an API key

API access is part of the Pro plan. Create a key in Settings → API keys. It is shown once: store it like a password. You can have three keys and revoke any of them at once; replacing your access key ends them all.

Send the key with every request:

Authorization: Bearer dk_…

POST https://duckint.cc/api/v1/search runs one search and answers when every source has finished, usually within 30 seconds. Give your client a timeout of at least 90 seconds.

curl -s https://duckint.cc/api/v1/search \
  -H "Authorization: Bearer $DUCKINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "example.com", "kind": "domain"}'
FieldTypeMeaning
querystring, requiredThe value to search: email, username, domain, IP, URL, Discord ID, crypto address…
kindstringSearch the value only as this type, e.g. "domain". It must be a type the value can be.
onlystring[]Run only these sources (capability ids from /api/capabilities).
excludestring[]Skip these sources.
includestring[]Sources that run only when picked (daily allowance), e.g. "hunter-domain".

The answer:

{
  "ok": true,
  "data": {
    "searchId": "…",
    "query": { "normalized": "example.com", "intents": [{ "kind": "domain", "value": "example.com" }] },
    "outcome": "results",
    "charged": true,
    "durationMs": 8123,
    "quota": { "limit": 25, "used": 3, "remaining": 22, "date": "…" },
    "checks": [{ "capability": "rdap-domain", "providerName": "RDAP", "status": "results", "resultCount": 1 }],
    "skipped": [{ "capability": "hunter-domain", "reason": "excluded", "detail": "…" }],
    "results": [{ "key": "…", "type": "domain-registration", "title": "…", "fields": [], "sources": [], "data": {} }]
  }
}

Results have the same shape as the site's JSON export. Raw provider payloads are never included, and neither are leaked passwords: the API tells you where a credential leaked, not the credential. Open the search on duckint.cc to reveal one.

3. Check a key

GET https://duckint.cc/api/v1/me returns the account's username, plan and today's searches, without running a search.

curl -s https://duckint.cc/api/v1/me -H "Authorization: Bearer $DUCKINT_API_KEY"

4. Limits

  • The same daily allowance as your account (Pro has no daily limit); a search that finds nothing is not charged.
  • At most 250 API search requests per account in 24 hours, across all its keys, even ones that find nothing; the X-API-Daily-Remaining header shows what is left.
  • Need more? It can be raised for an extra fee: Contact us
  • At most 30 requests a minute per key, on top of the site's limits on searches per minute and searches running at once.
  • Searches made with a key appear in your history like any other, and follow the same retention.
  • Acceptable use policy: no stalking, harassment or searching people without a lawful reason.

5. Errors

Errors answer {"ok": false, "error": {"code": "…", "message": "…"}} with these statuses:

HTTPcodeWhen
400bad_requestMissing or invalid query, or a type the value can't be.
401unauthorizedNo key, a revoked key, or a key from before the access key was replaced.
403forbiddenThe account has no Pro plan, or the value is excluded from searches.
429rate_limited / quota_exhaustedToo many requests, the 24-hour API cap reached, or no searches left today; wait for Retry-After.
502provider_unavailableThe search could not be completed. No search was charged.