Build compliance intelligence into your product.
The Diliguard Developer API (v2) gives you programmatic access to OSINT, AML, and corporate verification screening. Twenty-three endpoints, credit-based billing, per-organization rate limits, and a full audit trail.
Version: 2.0.0
Base URL: https://api.diliguard.com
Last Updated: July 2026
On this page
Overview
The Diliguard Developer API (v2) provides programmatic access to Diliguard’s OSINT, AML, and corporate verification screening tools. It features:
- API key authentication: every request must include a valid
X-API-Keyheader - Credit-based billing: each scan/workflow deducts credits from your monthly plan
- Rate limiting: per-organization requests-per-minute caps enforced automatically
- Usage logging: every request is logged to your organization’s audit trail
The API exposes 23 endpoints across three categories:
Health check (no auth required):
GET /health
{
"status": "ok"
}
Quickstart
Step 1: Create an API Key
curl -X POST https://api.diliguard.com/api/v2/account/keys
-H "Content-Type: application/json"
-H "X-API-Key: YOUR_EXISTING_KEY"
-d '{"name": "My Integration"}'
Step 2: Make a Scan Request
curl -X POST https://api.diliguard.com/api/v2/scan-sanctions
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"company_name": "Acme Corp"}'
Step 3: Read the Response
{
"success": true,
"data": {
"status": "clear",
"sanctions_matches": [],
"risk_score": 0
},
"credits": {
"used": 1,
"limit": 500,
"remaining": 499
},
"request_id": "req_a1b2c3d4e5f6"
}
Authentication
Every request to /api/v2/* endpoints must include the X-API-Key header. The API key links to your organization and plan through a chain of PocketBase records.
Auth Chain
X-API-Key header
→ tokens collection (validate key is active)
→ orgMembers collection (resolve token owner)
→ orgs collection (fetch organization)
→ subscriptions collection (check active subscription)
→ plans collection (fetch credit limit + rate limit)
→ credit balance check
→ rate limit check
If any step fails, the request is rejected with a specific error code before reaching the backend.
Error Responses by Stage
Credit System
Each endpoint has a fixed credit cost. Credits are tracked per billing period on your subscription.
Credit Cost Table
How Credits Work
- Credits are allocated monthly per your subscription plan (
plans.api_credits_monthly) - Each successful scan/workflow deducts credits from
subscriptions.credits_used_this_period - Failed requests (backend errors) do not deduct credits
- Credits reset when
subscriptions.current_period_endis reached - Check your balance anytime via
GET /account/usage
Rate Limits
Rate limits are enforced per-organization, based on your plan’s plans.api_rate_limit_rpm (requests per minute).
How It Works
- The API counts your org’s requests in the last 60 seconds from the
token_usagecollection - If the count reaches the RPM limit, subsequent requests receive
429 RATE_LIMIT_EXCEEDED - The counter resets automatically as older requests age out of the 60-second window
Headers
Rate limit information is included in every response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
Response Format
Success Response
All successful scan/workflow responses follow this envelope:
{
"success": true,
"data": {
// Scan-specific response payload (varies by endpoint)
},
"credits": {
"used": 1,
"limit": 500,
"remaining": 499
},
"request_id": "req_a1b2c3d4e5f6"
}
Error Response
{
"success": false,
"error": {
"code": "CREDIT_LIMIT_EXCEEDED",
"message": "Monthly credit limit reached (500/500). Resets on 2026-08-01."
}
}
HTTP Status Codes
Account Management
Account endpoints are free (0 credits) and are used to manage your API keys and view usage.
GET /account/usage
Returns your organization’s current credit usage and subscription details.
curl -X GET https://api.diliguard.com/api/v2/account/usage
-H "X-API-Key: dg_live_abc123..."import requests
resp = requests.get(
"https://api.diliguard.com/api/v2/account/usage",
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/account/usage", {
headers: { "X-API-Key": "dg_live_abc123..." }
});
const data = await resp.json();
console.log(data);Response:
{
"org_name": "Acme Corp",
"plan_name": "Professional",
"credits_used": 47,
"credits_limit": 500,
"period_end": "2026-08-01T00:00:00.000Z"
}
GET /account/history
Returns a paginated list of all scans performed by your organization (both via the Portal and the Developer API).
Query Parameters:
page(optional): Page number to retrieve (default:1).per_page(optional): Number of records per page (default:20, max:100).scan_type(optional): Filter history by a specific scan type (e.g.sanctions_scan).status(optional): Filter history by status (completeorerror).source(optional): Filter history by source (apiorportal).
curl -X GET "https://api.diliguard.com/api/v2/account/history?page=1&per_page=2"
-H "X-API-Key: dg_live_abc123..."Response:
{
"items": [
{
"id": "sj6a7nicl3neoya",
"scan_type": "sanctions_scan",
"category": "corporate_aml",
"target": "Tesla Inc",
"status": "complete",
"overall_status": "clear",
"elapsed_seconds": 1.25,
"error_message": "",
"source": "api",
"input_params": { "target_name": "Tesla Inc" },
"result": {
"status": "clear",
"target_searched": "Tesla Inc",
"total_hits": 0,
"sources_checked": ["US OFAC SDN", "UK HMT Consolidated", "EU Consolidated"],
"matches": []
},
"created": "2026-07-18 14:52:12.633Z"
}
],
"page": 1,
"per_page": 2,
"total_items": 142,
"total_pages": 71
}
GET /account/history/{scan_id}
Retrieves the full details of a specific past scan by its unique ID.
curl -X GET https://api.diliguard.com/api/v2/account/history/sj6a7nicl3neoya
-H "X-API-Key: dg_live_abc123..."Response:
{
"id": "sj6a7nicl3neoya",
"scan_type": "sanctions_scan",
"category": "corporate_aml",
"target": "Tesla Inc",
"status": "complete",
"overall_status": "clear",
"elapsed_seconds": 1.25,
"error_message": "",
"source": "api",
"input_params": { "target_name": "Tesla Inc" },
"result": {
"status": "clear",
"target_searched": "Tesla Inc",
"total_hits": 0,
"sources_checked": ["US OFAC SDN", "UK HMT Consolidated", "EU Consolidated"],
"matches": []
},
"created": "2026-07-18 14:52:12.633Z"
}
GET /account/keys
Lists all API keys for your organization.
curl -X GET https://api.diliguard.com/api/v2/account/keys
-H "X-API-Key: dg_live_abc123..."import requests
resp = requests.get(
"https://api.diliguard.com/api/v2/account/keys",
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/account/keys", {
headers: { "X-API-Key": "dg_live_abc123..." }
});
const data = await resp.json();
console.log(data);Response:
{
"keys": [
{
"id": "abc123def456",
"name": "Production Integration",
"created_at": "2026-06-15T10:30:00.000Z",
"last_used_at": "2026-07-18T14:22:00.000Z",
"is_active": true
}
]
}
POST /account/keys
Creates a new API key for your organization.
curl -X POST https://api.diliguard.com/api/v2/account/keys
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"name": "Staging Integration"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/account/keys",
json={"name": "Staging Integration"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/account/keys", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ name: "Staging Integration" })
});
const data = await resp.json();
console.log(data);Request Body:
Response:
{
"key_id": "xyz789...",
"name": "Staging Integration",
"token": "dg_live_abc123def456...",
"created_at": "2026-07-18T15:00:00.000Z"
}
DELETE /account/keys/{key_id}
Revokes (deactivates) an API key. The key will no longer authenticate requests.
curl -X DELETE https://api.diliguard.com/api/v2/account/keys/xyz789def456
-H "X-API-Key: dg_live_abc123..."import requests
resp = requests.delete(
"https://api.diliguard.com/api/v2/account/keys/xyz789def456",
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/account/keys/xyz789def456", {
method: "DELETE",
headers: { "X-API-Key": "dg_live_abc123..." }
});
const data = await resp.json();
console.log(data);Response:
{
"success": true,
"message": "API key revoked"
}
Sanctions & AML Scans
These endpoints check individuals and entities against sanctions lists, PEP databases, regulatory records, and corporate registries. Each costs 1 credit.
POST /scan-sanctions
Check a name against global sanctions and AML watchlists (OFAC, UN, EU, HMT).
curl -X POST https://api.diliguard.com/api/v2/scan-sanctions
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"target_name": "Volkswagen AG"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-sanctions",
json={"target_name": "Volkswagen AG"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-sanctions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ target_name: "Volkswagen AG" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"status": "clear",
"risk_score": 0,
"sanctions_matches": [],
"lists_checked": ["OFAC_SDN", "UN_SANCTIONS", "EU_SANCTIONS", "HMT_SANCTIONS"]
}
POST /scan-pep
Check if a person is a Politically Exposed Person (PEP).
curl -X POST https://api.diliguard.com/api/v2/scan-pep
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"person_name": "John Doe"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-pep",
json={"person_name": "John Doe"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-pep", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ person_name: "John Doe" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"status": "clear",
"pep_matches": [],
"risk_score": 0
}
POST /scan-corporate-intel
Retrieve corporate intelligence via GLEIF (Global Legal Entity Identifier Foundation).
curl -X POST https://api.diliguard.com/api/v2/scan-corporate-intel
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"company_name": "Siemens AG"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-corporate-intel",
json={"company_name": "Siemens AG"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-corporate-intel", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ company_name: "Siemens AG" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"lei": "529900T8BM49AURSDO55",
"legal_name": "Siemens AG",
"status": "active",
"legal_address": { ... },
"registration": { ... }
}
POST /scan-ubo
Identify Ultimate Beneficial Owners of a company.
curl -X POST https://api.diliguard.com/api/v2/scan-ubo
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"company_name": "Deutsche Bank AG"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-ubo",
json={"company_name": "Deutsche Bank AG"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-ubo", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ company_name: "Deutsche Bank AG" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"company": "Deutsche Bank AG",
"ubo_results": [ ... ],
"status": "clear"
}
POST /scan-regulatory
Check for regulatory fines and enforcement actions.
curl -X POST https://api.diliguard.com/api/v2/scan-regulatory
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"target_name": "HSBC Holdings"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-regulatory",
json={"target_name": "HSBC Holdings"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-regulatory", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ target_name: "HSBC Holdings" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"regulatory_matches": [],
"status": "clear",
"risk_score": 0
}
POST /scan-offshore
Scan for offshore company registrations (Offshore Leaks Database).
curl -X POST https://api.diliguard.com/api/v2/scan-offshore
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"query": "Blue Ocean Holdings Ltd"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-offshore",
json={"query": "Blue Ocean Holdings Ltd"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-offshore", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ query: "Blue Ocean Holdings Ltd" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"offshore_matches": [],
"status": "clear"
}
Financial Scans
These endpoints cover cryptocurrency analysis, IBAN validation, and VAT checks. Each costs 1 credit.
POST /scan-crypto
Check a cryptocurrency wallet against OFAC sanctions lists.
curl -X POST https://api.diliguard.com/api/v2/scan-crypto
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-crypto",
json={"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-crypto", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ wallet_address: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"wallet": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
"sanctions_match": false,
"risk_score": 0,
"status": "clear"
}
POST /scan-crypto-activity
Analyze on-chain activity for a cryptocurrency wallet.
curl -X POST https://api.diliguard.com/api/v2/scan-crypto-activity
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-crypto-activity",
json={"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-crypto-activity", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ wallet_address: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"wallet": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
"balance_btc": 0.0012,
"total_received_btc": 0.05,
"total_sent_btc": 0.0488,
"tx_count": 42,
"first_seen": "2020-01-15",
"last_seen": "2026-07-10"
}
POST /scan-crypto-illicit
Check a wallet against known illicit cryptocurrency databases.
curl -X POST https://api.diliguard.com/api/v2/scan-crypto-illicit
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-crypto-illicit",
json={"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-crypto-illicit", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ wallet_address: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"wallet": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
"illicit_match": false,
"risk_score": 0,
"status": "clear"
}
POST /scan-iban
Validate and identify an IBAN (International Bank Account Number).
curl -X POST https://api.diliguard.com/api/v2/scan-iban
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"iban_number": "DE89370400440532013000"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-iban",
json={"iban_number": "DE89370400440532013000"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-iban", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ iban_number: "DE89370400440532013000" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"iban": "DE89370400440532013000",
"valid": true,
"country": "DE",
"bank_code": "37040044",
"bank_name": "Commerzbank"
}
POST /scan-vat
Validate and identify an EU VAT number.
curl -X POST https://api.diliguard.com/api/v2/scan-vat
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"vat_number": "DE123456789"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-vat",
json={"vat_number": "DE123456789"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-vat", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ vat_number: "DE123456789" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"vat_number": "DE123456789",
"valid": true,
"country": "DE",
"company_name": "Example GmbH",
"address": "Musterstr. 1, 10115 Berlin"
}
Digital OSINT Scans
These endpoints perform open-source intelligence gathering. Each costs 1 credit.
POST /scan-media
Run adverse media screening against a name.
curl -X POST https://api.diliguard.com/api/v2/scan-media
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"person_name": "Ivan Petrov"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-media",
json={"person_name": "Ivan Petrov"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-media", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ person_name: "Ivan Petrov" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"media_results": [],
"status": "clear",
"risk_score": 0
}
POST /scan-domain
Scan a domain for WHOIS, DNS, and reputation data.
curl -X POST https://api.diliguard.com/api/v2/scan-domain
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"domain": "example.com"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-domain",
json={"domain": "example.com"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-domain", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ domain: "example.com" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"domain": "example.com",
"registrar": "Example Registrar",
"created_date": "1995-08-14",
"expires_date": "2026-08-13",
"name_servers": ["ns1.example.com", "ns2.example.com"],
"dns_records": { ... }
}
POST /scan-phone
Look up phone number intelligence.
curl -X POST https://api.diliguard.com/api/v2/scan-phone
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"phone_number": "+447911123456"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-phone",
json={"phone_number": "+447911123456"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-phone", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ phone_number: "+447911123456" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"phone": "+447911123456",
"country_code": "GB",
"carrier": "Vodafone UK",
"line_type": "mobile",
"is_valid": true
}
POST /scan-username
Search for a username across multiple platforms.
curl -X POST https://api.diliguard.com/api/v2/scan-username
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"username": "johndoe"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-username",
json={"username": "johndoe"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-username", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ username: "johndoe" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"username": "johndoe",
"platforms": {
"github": { "found": true, "url": "https://github.com/johndoe" },
"twitter": { "found": false },
"reddit": { "found": true, "url": "https://reddit.com/u/johndoe" }
}
}
POST /scan-ip
Perform IP address intelligence lookup.
curl -X POST https://api.diliguard.com/api/v2/scan-ip
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"ip_address": "8.8.8.8"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-ip",
json={"ip_address": "8.8.8.8"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-ip", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ ip_address: "8.8.8.8" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"ip": "8.8.8.8",
"country": "US",
"city": "Mountain View",
"org": "Google LLC",
"asn": "AS15169",
"is_vpn": false,
"is_tor": false,
"risk_score": 0
}
POST /scan-exif
Extract EXIF metadata from an image URL.
curl -X POST https://api.diliguard.com/api/v2/scan-exif
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"image_url": "https://example.com/photo.jpg"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-exif",
json={"image_url": "https://example.com/photo.jpg"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-exif", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ image_url: "https://example.com/photo.jpg" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"image_url": "https://example.com/photo.jpg",
"exif": {
"camera_make": "Apple",
"camera_model": "iPhone 15 Pro",
"gps_latitude": 51.5074,
"gps_longitude": -0.1278,
"date_taken": "2026-07-15T14:30:00Z"
}
}
POST /scan-darkweb
Check if an email or query appears in dark web dumps.
curl -X POST https://api.diliguard.com/api/v2/scan-darkweb
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{"email": "john@example.com"}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/scan-darkweb",
json={"email": "john@example.com"},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/scan-darkweb", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ email: "john@example.com" })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"query": "john@example.com",
"darkweb_hits": 0,
"status": "clear"
}
Workflow Endpoints
Workflows run multiple scans in parallel against a single target and return a combined report. Each workflow costs 5-15 credits depending on scope.
POST /workflow-corporate (5 credits)
Full corporate KYC due diligence: runs sanctions, PEP, regulatory, adverse media, UBO, offshore, and corporate intel scans in parallel.
curl -X POST https://api.diliguard.com/api/v2/workflow-corporate
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{
"company_name": "Siemens AG",
"domain": "siemens.com",
"vat_number": "DE123456789",
"iban_number": "DE89370400440532013000"
}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/workflow-corporate",
json={
"company_name": "Siemens AG",
"domain": "siemens.com",
"vat_number": "DE123456789",
"iban_number": "DE89370400440532013000"
},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/workflow-corporate", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({
company_name: "Siemens AG",
domain: "siemens.com",
vat_number: "DE123456789",
iban_number: "DE89370400440532013000"
})
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"workflow": "corporate_kyc",
"elapsed_seconds": 12.34,
"results": {
"corporate_intel": { "lei": "...", "status": "active" },
"ubo": { "ubo_results": [...] },
"sanctions": { "status": "clear" },
"regulatory_fines": { "matches": [] },
"pep": { "matches": [] },
"adverse_media": { "results": [] },
"offshore_leaks": { "matches": [] },
"domain": { "registrar": "..." },
"vat": { "valid": true },
"iban": { "valid": true }
},
"errors": {}
}
POST /workflow-person (5 credits)
Individual person KYC deep trace: runs PEP, regulatory, sanctions, adverse media, email OSINT, phone, username, and dark web scans.
curl -X POST https://api.diliguard.com/api/v2/workflow-person
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{
"person_name": "John Doe",
"email": "john@example.com",
"phone_number": "+447911123456",
"username": "johndoe"
}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/workflow-person",
json={
"person_name": "John Doe",
"email": "john@example.com",
"phone_number": "+447911123456",
"username": "johndoe"
},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/workflow-person", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({
person_name: "John Doe",
email: "john@example.com",
phone_number: "+447911123456",
username: "johndoe"
})
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"workflow": "person_kyc",
"elapsed_seconds": 9.87,
"results": {
"pep_interpol": { "matches": [] },
"regulatory_fines": { "matches": [] },
"sanctions": { "status": "clear" },
"adverse_media": { "results": [] },
"email": { ... },
"phone": { ... },
"username": { ... },
"darkweb": { "hits": 0 }
},
"errors": {}
}
POST /workflow-crypto (5 credits)
Cryptocurrency investigation and fraud detection: runs crypto sanctions, activity, and illicit database checks.
curl -X POST https://api.diliguard.com/api/v2/workflow-crypto
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{
"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
"ip_address": "8.8.8.8"
}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/workflow-crypto",
json={
"wallet_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
"ip_address": "8.8.8.8"
},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/workflow-crypto", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({
wallet_address: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
ip_address: "8.8.8.8"
})
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"workflow": "crypto_investigation",
"elapsed_seconds": 7.21,
"results": {
"sanctions": { "sanctions_match": false },
"activity": { "balance_btc": 0.0012, "tx_count": 42 },
"illicit": { "illicit_match": false },
"ip": { "country": "US" }
},
"errors": {}
}
POST /workflow-vendor-risk (10 credits)
Supply chain / vendor risk assessment: runs multiple vendors through parallel KYC checks.
curl -X POST https://api.diliguard.com/api/v2/workflow-vendor-risk
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{
"vendors": ["Acme Corp", "Globex Inc", "Initech LLC"]
}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/workflow-vendor-risk",
json={"vendors": ["Acme Corp", "Globex Inc", "Initech LLC"]},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/workflow-vendor-risk", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({ vendors: ["Acme Corp", "Globex Inc", "Initech LLC"] })
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"workflow": "vendor_risk",
"elapsed_seconds": 22.45,
"results": {
"Acme Corp": { "sanctions": { "status": "clear" }, "pep": { "matches": [] } },
"Globex Inc": { "sanctions": { "status": "flagged" }, "risk_score": 72 },
"Initech LLC": { "sanctions": { "status": "clear" }, "pep": { "matches": [] } }
},
"errors": {}
}
POST /workflow-ultimate-fraud (15 credits)
Full enhanced due diligence (EDD): the most comprehensive scan, running all available checks across every data point provided.
curl -X POST https://api.diliguard.com/api/v2/workflow-ultimate-fraud
-H "Content-Type: application/json"
-H "X-API-Key: dg_live_abc123..."
-d '{
"company_name": "Suspicious Corp",
"person_name": "John Doe",
"email": "john@suspicious.com",
"phone": "+1234567890",
"wallet": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
"domain": "suspicious.com"
}'import requests
resp = requests.post(
"https://api.diliguard.com/api/v2/workflow-ultimate-fraud",
json={
"company_name": "Suspicious Corp",
"person_name": "John Doe",
"email": "john@suspicious.com",
"phone": "+1234567890",
"wallet": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
"domain": "suspicious.com"
},
headers={"X-API-Key": "dg_live_abc123..."}
)
print(resp.json())const resp = await fetch("https://api.diliguard.com/api/v2/workflow-ultimate-fraud", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dg_live_abc123..."
},
body: JSON.stringify({
company_name: "Suspicious Corp",
person_name: "John Doe",
email: "john@suspicious.com",
phone: "+1234567890",
wallet: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
domain: "suspicious.com"
})
});
const data = await resp.json();
console.log(data);Request Body:
Response (data):
{
"workflow": "ultimate_fraud_edd",
"elapsed_seconds": 35.67,
"overall_status": "flagged",
"results": {
"company": { ... },
"person": { ... },
"email_trace": { ... },
"phone_lookup": { ... },
"crypto_analysis": { ... },
"domain_intel": { ... },
"sanctions": { ... },
"pep": { ... },
"adverse_media": { ... },
"darkweb": { ... },
"regulatory": { ... },
"offshore": { ... }
},
"errors": {}
}
Error Reference
SDK Code Snippets
Python Client
import requests
from typing import Optional, Dict, Any
class DiliGuardClient:
"""Python client for the DiliGuard Developer API v2."""
def __init__(self, api_key: str, base_url: str = "https://api.diliguard.com"):
self.api_key = api_key
self.base_url = base_url.rstrip("/")
self.headers = {
"Content-Type": "application/json",
"X-API-Key": api_key,
}
def _post(self, endpoint: str, body: Dict[str, Any]) -> Dict:
resp = requests.post(
f"{self.base_url}/{endpoint}",
json=body,
headers=self.headers,
timeout=120,
)
resp.raise_for_status()
return resp.json()
def _get(self, endpoint: str) -> Dict:
resp = requests.get(
f"{self.base_url}/{endpoint}",
headers=self.headers,
)
resp.raise_for_status()
return resp.json()
# ── Account ──────────────────────────────────────────
def usage(self) -> Dict:
return self._get("account/usage")
def list_keys(self) -> Dict:
return self._get("account/keys")
def create_key(self, name: str) -> Dict:
return self._post("account/keys", {"name": name})
def revoke_key(self, key_id: str) -> Dict:
resp = requests.delete(
f"{self.base_url}/account/keys/{key_id}",
headers=self.headers,
)
resp.raise_for_status()
return resp.json()
# ── Sanctions & AML ─────────────────────────────────
def scan_sanctions(self, target_name: str) -> Dict:
return self._post("scan-sanctions", {"target_name": target_name})
def scan_pep(self, person_name: str) -> Dict:
return self._post("scan-pep", {"person_name": person_name})
def scan_corporate_intel(self, company_name: str) -> Dict:
return self._post("scan-corporate-intel", {"company_name": company_name})
def scan_ubo(self, company_name: str) -> Dict:
return self._post("scan-ubo", {"company_name": company_name})
def scan_regulatory(self, target_name: str) -> Dict:
return self._post("scan-regulatory", {"target_name": target_name})
def scan_offshore(self, company_name: str) -> Dict:
return self._post("scan-offshore", {"query": company_name})
# ── Financial ────────────────────────────────────────
def scan_crypto(self, wallet_address: str) -> Dict:
return self._post("scan-crypto", {"wallet_address": wallet_address})
def scan_crypto_activity(self, wallet_address: str) -> Dict:
return self._post("scan-crypto-activity", {"wallet_address": wallet_address})
def scan_crypto_illicit(self, wallet_address: str) -> Dict:
return self._post("scan-crypto-illicit", {"wallet_address": wallet_address})
def scan_iban(self, iban_number: str) -> Dict:
return self._post("scan-iban", {"iban_number": iban_number})
def scan_vat(self, vat_number: str) -> Dict:
return self._post("scan-vat", {"vat_number": vat_number})
# ── Digital OSINT ────────────────────────────────────
def scan_media(self, person_name: str) -> Dict:
return self._post("scan-media", {"person_name": person_name})
def scan_domain(self, domain: str) -> Dict:
return self._post("scan-domain", {"domain": domain})
def scan_phone(self, phone_number: str) -> Dict:
return self._post("scan-phone", {"phone_number": phone_number})
def scan_username(self, username: str) -> Dict:
return self._post("scan-username", {"username": username})
def scan_ip(self, ip_address: str) -> Dict:
return self._post("scan-ip", {"ip_address": ip_address})
def scan_exif(self, image_url: str) -> Dict:
return self._post("scan-exif", {"image_url": image_url})
def scan_darkweb(self, email: Optional[str] = None, query: Optional[str] = None) -> Dict:
body = {}
if email:
body["email"] = email
if query:
body["query"] = query
return self._post("scan-darkweb", body)
# ── Workflows ────────────────────────────────────────
def workflow_corporate(
self,
company_name: str,
domain: Optional[str] = None,
vat_number: Optional[str] = None,
iban_number: Optional[str] = None,
) -> Dict:
body = {"company_name": company_name}
if domain:
body["domain"] = domain
if vat_number:
body["vat_number"] = vat_number
if iban_number:
body["iban_number"] = iban_number
return self._post("workflow-corporate", body)
def workflow_person(
self,
person_name: str,
email: Optional[str] = None,
phone_number: Optional[str] = None,
username: Optional[str] = None,
) -> Dict:
body = {"person_name": person_name}
if email:
body["email"] = email
if phone_number:
body["phone_number"] = phone_number
if username:
body["username"] = username
return self._post("workflow-person", body)
def workflow_crypto(
self,
wallet_address: str,
ip_address: Optional[str] = None,
) -> Dict:
body = {"wallet_address": wallet_address}
if ip_address:
body["ip_address"] = ip_address
return self._post("workflow-crypto", body)
def workflow_vendor_risk(self, vendors: list[str]) -> Dict:
return self._post("workflow-vendor-risk", {"vendors": vendors})
def workflow_ultimate_fraud(
self,
company_name: Optional[str] = None,
person_name: Optional[str] = None,
email: Optional[str] = None,
phone: Optional[str] = None,
wallet: Optional[str] = None,
domain: Optional[str] = None,
) -> Dict:
body = {}
if company_name:
body["company_name"] = company_name
if person_name:
body["person_name"] = person_name
if email:
body["email"] = email
if phone:
body["phone"] = phone
if wallet:
body["wallet"] = wallet
if domain:
body["domain"] = domain
return self._post("workflow-ultimate-fraud", body)
Usage:
client = DiliGuardClient(api_key="dg_live_abc123...")
# Check credits
usage = client.usage()
print(f"Credits remaining: {usage['credits_limit'] - usage['credits_used']}")
# Run a scan
result = client.scan_sanctions("Volkswagen AG")
print(result["data"]["status"])
# Run a workflow
report = client.workflow_person(
person_name="John Doe",
email="john@example.com"
)
print(report["data"]["overall_status"])
JavaScript / TypeScript Client
interface DiliGuardConfig {
apiKey: string;
baseUrl?: string;
}
interface ApiResponse {
success: boolean;
data?: T;
credits?: { used: number; limit: number; remaining: number };
request_id?: string;
error?: { code: string; message: string };
}
class DiliGuardClient {
private apiKey: string;
private baseUrl: string;
constructor(config: DiliGuardConfig) {
this.apiKey = config.apiKey;
this.baseUrl = (config.baseUrl || "https://api.diliguard.com").replace(//$/, "");
}
private async post(endpoint: string, body: Record): Promise> {
const resp = await fetch(`${this.baseUrl}/${endpoint}`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": this.apiKey,
},
body: JSON.stringify(body),
});
return resp.json();
}
private async get(endpoint: string): Promise> {
const resp = await fetch(`${this.baseUrl}/${endpoint}`, {
headers: { "X-API-Key": this.apiKey },
});
return resp.json();
}
private async del(endpoint: string): Promise> {
const resp = await fetch(`${this.baseUrl}/${endpoint}`, {
method: "DELETE",
headers: { "X-API-Key": this.apiKey },
});
return resp.json();
}
// ── Account ──────────────────────────────────────────
usage() {
return this.get("account/usage");
}
listKeys() {
return this.get("account/keys");
}
createKey(name: string) {
return this.post("account/keys", { name });
}
revokeKey(keyId: string) {
return this.del(`account/keys/${keyId}`);
}
// ── Sanctions & AML ─────────────────────────────────
scanSanctions(targetName: string) {
return this.post("scan-sanctions", { target_name: targetName });
}
scanPep(personName: string) {
return this.post("scan-pep", { person_name: personName });
}
scanCorporateIntel(companyName: string) {
return this.post("scan-corporate-intel", { company_name: companyName });
}
scanUbo(companyName: string) {
return this.post("scan-ubo", { company_name: companyName });
}
scanRegulatory(targetName: string) {
return this.post("scan-regulatory", { target_name: targetName });
}
scanOffshore(companyName: string) {
return this.post("scan-offshore", { query: companyName });
}
// ── Financial ────────────────────────────────────────
scanCrypto(walletAddress: string) {
return this.post("scan-crypto", { wallet_address: walletAddress });
}
scanCryptoActivity(walletAddress: string) {
return this.post("scan-crypto-activity", { wallet_address: walletAddress });
}
scanCryptoIllicit(walletAddress: string) {
return this.post("scan-crypto-illicit", { wallet_address: walletAddress });
}
scanIban(ibanNumber: string) {
return this.post("scan-iban", { iban_number: ibanNumber });
}
scanVat(vatNumber: string) {
return this.post("scan-vat", { vat_number: vatNumber });
}
// ── Digital OSINT ────────────────────────────────────
scanMedia(personName: string) {
return this.post("scan-media", { person_name: personName });
}
scanDomain(domain: string) {
return this.post("scan-domain", { domain });
}
scanPhone(phoneNumber: string) {
return this.post("scan-phone", { phone_number: phoneNumber });
}
scanUsername(username: string) {
return this.post("scan-username", { username });
}
scanIp(ipAddress: string) {
return this.post("scan-ip", { ip_address: ipAddress });
}
scanExif(imageUrl: string) {
return this.post("scan-exif", { image_url: imageUrl });
}
scanDarkweb(options: { email?: string; query?: string }) {
return this.post("scan-darkweb", options);
}
// ── Workflows ────────────────────────────────────────
workflowCorporate(params: {
companyName: string;
domain?: string;
vatNumber?: string;
ibanNumber?: string;
}) {
return this.post("workflow-corporate", {
company_name: params.companyName,
domain: params.domain,
vat_number: params.vatNumber,
iban_number: params.ibanNumber,
});
}
workflowPerson(params: {
personName: string;
email?: string;
phoneNumber?: string;
username?: string;
}) {
return this.post("workflow-person", {
person_name: params.personName,
email: params.email,
phone_number: params.phoneNumber,
username: params.username,
});
}
workflowCrypto(params: { walletAddress: string; ipAddress?: string }) {
return this.post("workflow-crypto", {
wallet_address: params.walletAddress,
ip_address: params.ipAddress,
});
}
workflowVendorRisk(vendors: string[]) {
return this.post("workflow-vendor-risk", { vendors });
}
workflowUltimateFraud(params: {
companyName?: string;
personName?: string;
email?: string;
phone?: string;
wallet?: string;
domain?: string;
}) {
return this.post("workflow-ultimate-fraud", {
company_name: params.companyName,
person_name: params.personName,
email: params.email,
phone: params.phone,
wallet: params.wallet,
domain: params.domain,
});
}
}
Usage:
const client = new DiliGuardClient({ apiKey: "dg_live_abc123..." });
// Check credits
const usage = await client.usage();
console.log(`Credits remaining: ${usage.credits!.limit - usage.credits!.used}`);
// Run a scan
const sanctions = await client.scanSanctions("Volkswagen AG");
console.log(sanctions.data?.status);
// Run a workflow
const report = await client.workflowPerson({
personName: "John Doe",
email: "john@example.com",
});
console.log(report.data?.overall_status);
Changelog
v2.0.0: July 2026
Initial release of the Developer API.
- 23 authenticated endpoints (3 account + 18 scans + 5 workflows)
- API key authentication via
X-API-Keyheader - Credit-based billing with per-endpoint costs
- Per-organization rate limiting
- Usage logging and audit trail
- Python and JavaScript SDK client examples
- Docker deployment support