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-Key header
  • 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

  1. Credits are allocated monthly per your subscription plan (plans.api_credits_monthly)
  2. Each successful scan/workflow deducts credits from subscriptions.credits_used_this_period
  3. Failed requests (backend errors) do not deduct credits
  4. Credits reset when subscriptions.current_period_end is reached
  5. 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_usage collection
  • 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 (complete or error).
  • source (optional): Filter history by source (api or portal).
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-Key header
  • 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