Veridact API Reference

Complete external API call inventory — function names, parameters, return types, timeouts, error shapes, and execution order. Extracted from source code · Updated 2026-05-07

← Interactive API Docs

Authentication

Two authentication schemes coexist — one for the portal (JWT cookies) and one for the Enterprise API (API key header).

SchemeHeader / MechanismUsed by
JWT (Portal)Authorization: Bearer <token> or token cookie (7-day TTL)All /api/* portal routes
API Key (Enterprise)X-API-Key: vdc_live_<40-hex>All /api/v1/* routes
Key Format vdc_live_ + 40-character hex string. Legacy vrd_ prefix also accepted for backwards compatibility. Max 5 active keys per user.

Enterprise API — Key Management

EndpointMethodDescription
POST /api/v1/keysPOSTCreate a new API key (name required). Returns full key value once only.
GET /api/v1/keysGETList all keys (masked). Returns id, name, key_prefix, created_at, last_used_at
DELETE /api/v1/keys/:idDELRevoke a key by ID.
GET /api/v1/usageGETReturns per-key today/month stats from api_usage table.

Rate Limits: Enterprise — 1,000 req/mo · Professional — 250 req/mo · Starter Screening — no API access. Headers: ratelimit-limit, ratelimit-remaining, ratelimit-reset, x-request-id

Standard Response Envelope

// All /api/v1/* responses follow this shape
{
  "data": /* payload */,
  "meta": {
    "request_id": "uuid",
    "timestamp": "2026-05-07T18:00:00.000Z"
  }
}

Environment Variables

DATABASE_URL
REQUIRED
Neon PostgreSQL connection string. Process exits if missing.
JWT_SECRET
optional — auto-generated per-boot if absent
64-byte hex secret for signing portal JWT tokens.
PEPCHECKER_API_KEY
optional — PEP/sanctions falls back to manual check
PEPChecker.com production API key. 500 calls/month limit tracked in pepchecker_usage. Results cached 30 days in pepchecker_cache.
PEPCHECKER_API_KEY_TEST
optional — development only
Used when NODE_ENV !== 'production'. Falls back to PEPCHECKER_API_KEY if absent.
OFAC_API_KEY
optional — falls back to manual check indicator
api.ofac-api.com commercial key. Unlocks live SDN screening with score threshold. Without it, analyst receives manual verification URL only.
NAMESCAN_API_KEY
optional — falls back to manual check
NameScan.io API key for PEP + RCA + Adverse Media checks. Free plan available at namescan.io.
DILISENSE_API_KEY
optional — falls back to manual check
Dilisense.com AML screening API key. Free plan available. Without it, no AML supplementary check runs.
COMPANIES_HOUSE_API_KEY
optional — UK entity verification disabled if absent
UK Companies House developer API key. Free to register. Used for UK company search + officers + PSC data.
COURTLISTENER_API_TOKEN
optional — anonymous rate limit applies (100 req/day)
CourtListener.com free API token. Unlocks 5,000 req/hr. Without it, anonymous calls capped at 100/day shared across all IP addresses.
OPENAI_API_KEY
optional — AI summaries disabled
OpenAI API key (or Polsia proxy). Used for report summaries (GPT-4o-mini).
STRIPE_SECRET_KEY
optional — payments disabled
Stripe secret key for subscription management and webhook validation.
STRIPE_WEBHOOK_SECRET
optional — webhook validation skipped
Stripe webhook signing secret for HMAC-SHA256 verification on POST /api/webhooks/stripe.

Timeout Configuration

Agent / SourcePer-Call TimeoutGlobal / PipelineRetry
Default fetchUrl (HTTP utility)10,000ms3× exponential backoff: 1.5s → 3s → 6s cap 8s. On 5xx, 429, 403, ECONNRESET, ETIMEDOUT.
PEPChecker.com API12,000ms30-day cache hit = no callNone (non-blocking failure)
OFAC API (api.ofac-api.com)8,000msNone (non-blocking)
OpenSanctions API10,000ms5-min in-memory cacheNone
NameScan PEP + Adverse Media10,000ms eachNone (non-blocking)
Dilisense AML8,000msNone
UN SC XML Feed12,000ms24-hour in-memory cacheNone
EU FSF XML Feed12,000ms24-hour in-memory cacheNone
UK HMT XML Feed12,000ms24-hour in-memory cacheNone
OpenCorporates8,000msNone
GLEIF LEI API12,000msNone
UK Companies House API8,000ms per callNone
CourtListener (federal dockets)8,000ms → 12,000ms3× via fetchUrl
CourtListener (opinion search)12,000ms3× via fetchUrl
Offshore Leaks (ICIJ API)5,000msLocal curated DB fallbackNone
Litigation (all 14 sources)10,000ms eachrunRealLitigationSearch: 20,000ms totalNone (parallel via Promise.allSettled)
Wayback Machine CDX API10,000msNone
Browser Deep Verification60,000msNone (non-blocking)
Standard CDD Agent Pool (Parallel Dispatcher)30,000ms per agentTotal pipeline ≈ slowest agent

Error Shapes

Agent-Level Error (all screening agents)

{
  "matches": [],           // or pep_matches / results — empty array
  "queried": false,
  "error": "agent_failed"  // or the actual error message
}

API v1 HTTP Errors

StatusBodyCause
400{ "error": "...", "details": "..." }Missing required params or invalid input
401{ "error": "Unauthorized" }Missing or invalid X-API-Key
403{ "error": "Feature not available..." }Subscription tier does not include feature
404{ "error": "Screening not found" }ID does not belong to the API key owner
429{ "message": "Too many attempts..." }Rate limit exceeded (monthly quota or 15-min auth window)
500{ "error": "Internal server error" }Unhandled server exception

Enterprise API — CDD Screening

POST /api/v1/screening/cdd Trigger CDD pipeline

Request Parameters

FieldTypeRequiredNotes
querystringrequiredEntity name to screen
entity_type"individual" | "company"optionalDefault: "individual"
jurisdictionstringoptionalISO country code or name hint (e.g. "US", "UK")
websitesstring[]optionalDomain hints for web verification
emailsstring[]optionalEmail addresses to verify
phonesstring[]optionalPhone numbers to verify
addressstringoptionalPhysical address for verification

Response Shape (success)

{
  "id": "uuid",
  "status": "completed",
  "query": "Acme Corp",
  "risk_score": 42,
  "risk_level": "medium",  // low | medium | high | critical
  "sanctions_hits": 0,
  "pep_hits": 0,
  "adverse_media_hits": 3,
  "offshore_hits": 0,
  "screening_type": "CDD",
  "created_at": "2026-05-07T..."
}

Enterprise API — EDD Screening

POST /api/v1/screening/edd Enhanced Due Diligence

Request Parameters

FieldTypeRequiredNotes
querystringrequiredEntity name
entity_typestringoptionalDefault: "individual"
jurisdictionstringoptionalCountry code
include_sowbooleanoptionalDefault: true. Triggers parallel SOW screening. Returns sow_screening_id.
EDD includes everything in CDD plus: beneficial ownership chain (UK PSC + OpenOwnership + GLEIF ownership tree + ICIJ Offshore Leaks), litigation depth (14 public sources), bankruptcy, consumer complaints, ESG screening (EPA ECHO, OSHA, World Bank), arbitration, Wayback Machine digital footprint, and full adverse media engine (NewsAPI, GDELT, OCCRP, EventRegistry, MediaStack).

Additional Response Fields

{
  "sow_screening_id": "uuid-or-null",  // populated when include_sow=true
  "beneficial_ownership": { "chains": [], "ubo_found": false },
  "litigation": { "results": [], "sources_searched": 14 },
  "esg": { "level": "medium", "flags": [] }
}

Enterprise API — SOW Screening

POST /api/v1/screening/sow Source of Wealth

Request Parameters

FieldTypeRequiredNotes
subject_namestringrequiredFull name
entity_typestringoptional"individual" or "company"
dobstringoptionalDOB or incorporation date (ISO)
declared_incomestringoptionalOne of 7 income brackets (e.g. "$1M–$5M", "$20M+")
known_assetsstringoptionalFree-text description of known assets
business_interestsstringoptionalBusiness affiliations / interests
wealth_sourcesstring[]optionalClaimed sources (e.g. ["inheritance","salary","investment"])

Additional Endpoints

EndpointMethodDescription
/api/v1/sow/:idGETRetrieve SOW result by ID
/api/sow-screenings/:id/pdfGETDownload PDF report (ID format: VDC-XXXXXXXX-SOW)

Enterprise API — M&A Screening

POST /api/v1/screening/ma Mergers & Acquisitions Due Diligence

Runs the full CDD pipeline with M&A-specific depth: entity enrichment + Yahoo Finance financial data + SEC EDGAR filings + litigation search + ESG screening. Uses generateMASummary() for AI summary.

Request Parameters

FieldTypeRequiredNotes
querystringrequiredTarget company name
entity_typestringoptionalDefault: "company"
jurisdictionstringoptionalCountry / state code

Enterprise API — Retrieve & List

EndpointMethodReturns
/api/v1/screening/:idGETFull screening result by ID (auth-scoped — only own records)
/api/v1/screening/:id/reportGETFull structured report JSON (same shape as portal report view)
/api/v1/screeningsGETPaginated list of own screenings. Query: ?page=1&limit=20&type=CDD

Person Background Check — 7-Phase Pipeline

Implemented in person-check-orchestrator.js. Entry point: runPersonCheck(subject, pool). Results stored in person_checks, person_check_sources, person_check_findings tables.

Person Check API Endpoints

EndpointMethodNotes
/api/person-checksPOSTTrigger person check. Body: { first_name, last_name, middle_name?, dob?, aliases[], locations[], identifiers?, additional_identifiers? }
/api/person-checksGETList own person checks
/api/person-checks/:idGETFull result + findings list
/api/person-checks/:id/pdfGETDownload PDF report

CDD Pipeline — Execution Phases

Implemented in orchestrator.js as runCDDPipeline(query, entityType, jurisdiction, options). All agents run via Promise.all() — total time ≈ slowest agent.

Phase 0 — Entity Enrichment

Function: enrichEntity(query, { entityType, jurisdiction }). Companies only. Resolves canonical legal name, ticker, CIK, jurisdiction before any screening. Feeds improved entity identity to all downstream agents.

Phase 1 — Base Agents (all run in parallel)

Agent FunctionSourceTierTimeout
checkOFACApi()api.ofac-api.com/v4/screen (POST)All8s
checkUNSanctions()UN SC XML (24h cache)All12s
checkEUSanctions()EU FSF XML (24h cache)All12s
checkUKHMTSanctions()UK OFSI XML (24h cache)All12s
checkDilisense()Dilisense AML API (GET)All8s
checkNameScan()namescan.io PEP + Adverse Media (POST)All10s × 2
checkPEPChecker()pepchecker.com/api/v1/check (GET)All12s (30d cache)
fullSanctionsScreen()OpenSanctions + OFAC + EU + UN + UK HMT (parallel)All10s
checkSanctions()Curated local database (sync)All0ms
checkPEP()Curated local database (sync)All0ms
checkAdverseMedia()Curated database (sync)All0ms
checkOffshoreLeaks()ICIJ API + curated DB (5s timeout)All5s
checkDebarment()Curated database: WBG, AfDB, ADB, EBRD, IDB, SAM.gov, EU EDES, UN GC (sync)All0ms
runSearchEngineDueDiligence()Google News RSS + Bing News + DuckDuckGo (OSINT)All30s
checkPublicCompanyStatus()DuckDuckGo + SEC EDGAR + Yahoo Finance (companies)All30s

Phase 1b — Essentials+ Additional Agents (parallel)

Agent FunctionSourceTier
runGoogleSearchRegistry()DuckDuckGo → registry page extraction (companies)Essentials+
checkOpenCorporates()api.opencorporates.com (free, 145+ jurisdictions)Essentials+
checkCompaniesHouse()api.company-information.service.gov.uk (UK)Essentials+
checkGLEIF()api.gleif.org/api/v1 (free, no key)Essentials+
enrichFromYahooFinance()Yahoo Finance quoteSummary APIEssentials+

Phase 2 — Financial DD (all tiers, companies — runs after Phase 1)

Agent FunctionSourceNotes
runFinancialDueDiligence()Search-engine-driven: SEC EDGAR, balance sheet, P&L (5 search categories in parallel)Uses publicCompanyData from Phase 1
fetchPublicCompanyFinancials(ticker, cik)FMP + SEC EDGAR XBRL + Alpha Vantage + Polygon + Yahoo FinancePublic companies only (ticker required)
fetchPrivateCompanyFinancials(name)D&B + CrunchbasePrivate companies only
runBrowserDeepVerification()Headless browser → free corporate registries worldwideEssentials+ only

Phase 3 — Professional+ Tier (parallel)

Agent FunctionSourcesTier
runRealLitigationSearch()searchLitigation()14 public sources (see Litigation Sources below). 20s total timeout.Professional+
checkBankruptcy()Curated + CourtListener bankruptcy dockets (sync)Professional+
checkConsumerComplaints()CFPB consumer complaint database (sync)Professional+
checkESG()Static curated ESG data (sync)Professional+
fullESGScreen()EPA ECHO + OSHA + World Bank (live) + UNGC + GRI + MAS + CSSF + WikiRateProfessional+
fullAdverseMediaScreen()NewsAPI + GDELT + OCCRP + EventRegistry + MediaStack + TV (Enterprise)Professional+

Phase 4 — Enterprise Only (parallel after Phase 3)

Agent FunctionSourceTier
checkArbitration()Curated arbitration database (sync)Enterprise
checkWaybackMachine()Wayback CDX API: archive.org/cdx/search/cdxEnterprise
fullBeneficialOwnershipCheck()UK PSC (Companies House) + OpenOwnership API + GLEIF Ownership Tree + ICIJ Offshore LeaksEnterprise

Phase 5 — Finalization (sequential, after all parallel phases)

Country risk assessment → assessCountryRisk(), risk scoring → calculateRiskScore(), adverse media consolidation (NameScan + OSINT + Adverse Media Engine merged into single array), data gap detection, AI summary generation → generateSummary(), verification → runVerificationAgent().

Agent: PEPChecker.com

GET pepchecker.com/api/v1/check PEP + Sanctions Screening

Function: checkPEPChecker(query, options) in agents/pepchecker-agent.js. 30-day cache in pepchecker_cache table. Usage tracked in pepchecker_usage (500 calls/month limit).

Request

ParameterTypeNotes
firstNamestringParsed from query if not provided
lastNamestringParsed from query
dobStartISO dateOptional. DOB window: year-2
dobEndISO dateOptional. DOB window: year+2
includeWithoutDobbooleanAlways true

Auth: api-key header. Timeout: 12,000ms. Key: PEPCHECKER_API_KEY (prod) / PEPCHECKER_API_KEY_TEST (dev).

Response Fields (raw API)

{
  "pepList": [{ title, firstName, lastName, gender, aliases, function, specific, country, possibleBirthDates, active }],
  "sanctionList": [{ /* same shape */ }]
}

Normalized Output

{
  "pep_matches": [{
    matched_name, match_score, category: "PEP"|"RCA",
    is_rca, active, role, function, country, risk_level, dob_confirmed,
    name_confirmed, confirmed, risk_pts
  }],
  "sanction_matches": [{ /* same fields + list, SANCTIONS category */ }],
  "pep_hits": 0, "sanction_hits": 0,
  "api_configured": true, "queried": true, "cache_hit": false,
  "error": null
}
Name Matching LogicLast name must be exact match (edit distance 0). First name allows exact, prefix, nickname maps, or edit distance ≤2 (min score 70 to surface). DOB validation: ±2 year window.

Agent: OFAC SDN

POST api.ofac-api.com/v4/screen US Treasury Sanctions

Function: checkOFACApi(query, entityType) in agents/ofac-api-agent.js. Primary: commercial API. Fallback: manual check URL when key absent.

Request Body (with key)

{
  "apiKey": "...",
  "minScore": 80,
  "sources": ["SDN", "SSI", "NS-ISA", "FSE", "MBS", "CMIC", "GLOMAG", "NS-PLC", "UKRAINE-EO13662"],
  "cases": [{ "name": "...", "type": "individual"|"entity" }]
}

Return Type

{
  "matches": [{ matched_name, match_score, lists, list_name, program, severity, reason, entity_type, uid, risk_pts: 15 }],
  "api_configured": true, "queried": true, "error": null
}

Timeout: 8s. Risk contribution: +15 pts per confirmed SDN hit. Severity: confirmed (score ≥95), potential (score 80–94).

Agent: OpenSanctions

POST api.opensanctions.org 5-source unified sanctions + PEP

Function: checkOpenSanctions(query, entityType, hints) in agents/opensanctions-api-agent.js. Covers OFAC, EU, UN, UK, FATF lists. 5-minute in-memory cache.

Request Body

POST https://api.opensanctions.org/match/sanctions
{ "queries": { "q0": { "schema": "Person"|"LegalEntity", "properties": { "name": ["..."] } } } }

Normalized Output

{
  "matches": [{ matched_name, score, category: "SANCTIONS"|"PEP"|"WATCHLIST",
    datasets, programs, reason, risk_pts, source_url }],
  "pep_hits": 0, "sanction_hits": 0
}

Agent: NameScan

POST namescan.io/api/v3/free/pep-check + adverse-media-check PEP + RCA + Adverse Media

Function: checkNameScan(query, entityType). Runs two POST requests in parallel. Auth: api-key header. Env: NAMESCAN_API_KEY. Timeout: 10s each.

Request Body (both endpoints)

{ "name": "John Smith" }

Return Type

{
  "pep_matches": [{ matched_name, match_score, category, role, country, active, severity }],
  "adverse_media_hits": [{ title, url, published_date, source_label, category, sentiment, severity }],
  "pep_queried": true, "media_queried": true
}

Agent: Dilisense AML

GET dilisense.com AML API Global AML / watchlist check

Function: checkDilisense(query, entityType) in agents/dilisense-agent.js. Env: DILISENSE_API_KEY. Timeout: 8s. GET request with name as query param. Covers global sanctions + PEP + criminal watchlists.

Agent: UN Security Council Consolidated List

GET scsanctions.un.org/resources/xml/en/consolidated.xml UN SC Sanctions (XML)

Function: checkUNSanctions(query) in agents/un-sanctions-agent.js. Downloads full XML, parses in-memory with 24-hour TTL cache. No API key. Timeout: 12s. Risk: +15 pts per confirmed hit.

Agent: EU Financial Sanctions Files

GET webgate.ec.europa.eu/fsd/fsf/public/files/xmlFullSanctionsList EU Restrictive Measures (XML)

Function: checkEUSanctions(query) in agents/eu-sanctions-agent.js. Daily-updated XML. In-memory 24h cache. No key. Fallback: data.europa.eu/api/hub/store/data/eu-consolidated-list-of-sanctions.xml. Risk: +12 pts per hit.

Agent: UK HMT / OFSI Sanctions

GET assets.publishing.service.gov.uk/.../UK_Sanctions_List.xml UK OFSI Financial Sanctions

Function: checkUKHMTSanctions(query, minScore) in agents/uk-hmt-sanctions-agent.js. Two URL fallbacks. 24h in-memory cache. No key. Timeout: 12s. Schema: FinancialSanctionsTarget[].Names[].Name1–Name6. Risk: +12 pts per hit.

Agent: OpenCorporates

GET api.opencorporates.com/v0.4 Corporate Registry (145+ jurisdictions)

Function: checkOpenCorporates(query, entityType, jurisdiction). Also used in Phase 2 (identity) via /officers/search. No key required (free tier). Timeout: 8s.

Endpoints Used

EndpointPurpose
/v0.4/companies/search?q=...&jurisdiction_code=...&per_page=10Entity verification (Essentials+)
/v0.4/officers/search?q=...&per_page=5Person identity (Phase 2 — all tiers)

Return Type

{
  "companies": [{ name, company_number, jurisdiction_code, company_type, current_status, incorporation_date, registered_address }],
  "officers": [{ name, position, company.name, company.jurisdiction_code, opencorporates_url }],
  "risk_pts": 0
}

Agent: GLEIF LEI Registry

GET api.gleif.org/api/v1 Global LEI Index (2.5M+ entities)

Function: checkGLEIF(query, jurisdiction) in agents/gleif-agent.js. No API key required. Timeout: 12s. Essentials+ tier, companies only. Fetches LEI entity + relationship tree (parent / subsidiaries).

Endpoints Used

EndpointPurpose
/lei-records?filter[entity.names]=...&page[size]=5LEI lookup by name
/lei-records/:lei/ultimate-parent-relationshipUltimate parent (EDD beneficial ownership)
/lei-records/:lei/direct-childrenSubsidiary chain

Return Type

{
  "lei": "20-char-code", "entityName": "...",
  "status": "ACTIVE|INACTIVE", "jurisdiction": "US",
  "legalAddress": "...", "issuer": "...",
  "directChildren": [], "ultimateParent": null,
  "queried": true, "ran": true
}
GLEIF Jurisdiction WarningGLEIF jurisdiction code = LEI issuer jurisdiction (NOT incorporation country). Never use to override user-provided or Google-derived jurisdiction. Tesla's GLEIF record may show "FR" because the issuer issued the LEI there.

Agent: UK Companies House

GET api.company-information.service.gov.uk UK Entity + Officers + PSC

Function: checkCompaniesHouse(query, entityType, jurisdiction) in agents/companies-house-agent.js. Auth: Basic Auth (API key as username, empty password). Env: COMPANIES_HOUSE_API_KEY. Timeout: 8s per call.

Endpoints Used

EndpointPurpose
/search/companies?q=...&items_per_page=5Search by company name
/company/:company_numberCompany profile
/company/:company_number/officersDirectors + officers
/company/:company_number/persons-with-significant-controlPSC list (beneficial ownership)

Return Type

{
  "companies": [{ company_number, company_name, company_status, company_type, date_of_creation, registered_office_address }],
  "officers": [{ name, officer_role, appointed_on, resigned_on, nationality }],
  "psc_list": [{ name, kind, natures_of_control[], nationality, country_of_residence }],
  "risk_pts": 0
}

Risk pts: +3 dissolved/struck off · +5 PSC not registered / exemption · +3 PSC in high-risk jurisdiction.

Agent: CourtListener / PACER

GET courtlistener.com/api/rest/v4 Federal Court Dockets + Opinions

Used in both Person Check (Phase 3) and Litigation Search. Auth: optional Authorization: Token <COURTLISTENER_API_TOKEN>. Anonymous: 100 req/day. Authenticated: 5,000 req/hr.

Endpoints Used

EndpointPurposeTimeout
/api/rest/v4/dockets/?q=...&order_by=score+desc&page_size=5Federal docket search (PACER)8s
/api/rest/v4/search/?q=...&type=o&order_by=score+desc&page_size=5Full-text opinion search12s
/api/rest/v3/dockets/Person check criminal phase (v3, legacy)10s

Return Fields

{ "results": [{ case_name, docket_number, court, date_filed, nature_of_suit, absolute_url }] }

Litigation Sources (14 total)

Implemented in veridact-litigation.js as searchLitigation(params). All 14 sources run in parallel via Promise.allSettled(). Total timeout: 20,000ms. Professional+ tier.

#SourceURL / EndpointNotes
1CourtListener / RECAPcourtlistener.com/api/rest/v4/dockets/Federal dockets, party-name match
2Caselaw Access Projectapi.case.lawFull-text published US decisions (Harvard Law)
3SEC EDGAR Enforcementefts.sec.gov/LATEST/search-indexLitigation releases + admin proceedings + stop orders
4FINRA BrokerCheckbrokercheck.finra.org/search/firmBroker/dealer disclosures, regulatory events, criminal
5CFPB Complaintsapi.consumerfinance.gov/data-research/consumer-complaintsConsumer financial violations + complaint database
6FTC Actionswww.ftc.gov/api/v0/case-activitiesAntitrust, consumer protection, privacy
7DOJ Prosecutionswww.justice.gov/api/v1/press-releases.jsonCriminal prosecutions, civil settlements + penalty extraction
8EPA ECHOecho.epa.gov/api/echo_facility_searchClean Air, Clean Water, RCRA, Superfund violations
9Violation Trackerviolationtracker.goodjobsfirst.org600k+ corporate violations, 100+ agencies
10OCC Enforcementapps.occ.gov/ead/api/casesNational bank enforcement actions + civil money penalties
11FDIC Enforcementbanks.data.fdic.gov/api/enforcementFDIC-insured institution enforcement decisions
12BAILIIwww.bailii.org/cgi-bin/markup.cgiUK + Irish courts (search URL generation)
13EUR-Lexpublications.europa.eu/webapi/rdf/sparqlEU Court of Justice via SPARQL endpoint
14State Court Portals16 states with pre-built search URLsDirect court portal links with name pre-filled

Normalized Record Schema (all 14 sources)

{
  source, type: "criminal"|"civil"|"regulatory"|"administrative"|"enforcement",
  caseName, caseNumber, court, dateFiled, dateResolved,
  status: "active"|"closed", outcome, penalty: 0,
  description, url, jurisdiction, parties: [], charges: []
}

Agent: Offshore Leaks (ICIJ)

GET ICIJ Offshore Leaks API + Curated Local DB Panama/Paradise/Pandora Papers

Function: checkOffshoreLeaks(query) in agents/offshore-leaks-agent.js. Tries live ICIJ API first (5s timeout), falls back to curated local database. No API key required. Enterprise API: 100 req/mo limit.

Agent: OSINT Search Engine Intelligence

GET Google News RSS + Bing News + DuckDuckGo Structured Boolean OSINT

Function: runSearchEngineDueDiligence(query, entityType, jurisdiction, options) in agents/search-engine-agent.js. Runs structured Boolean searches across 10 DD categories. Fallback/supplemental to API agents — primary source when API keys absent. Results labelled "Open Source Intelligence (OSINT)".

Categories Searched

sanctions · adverse_media · pep · litigation · regulatory · bankruptcy · esg · beneficial_ownership · financial · general

Agent: Financial Data Sources

GET FMP + SEC EDGAR XBRL + Alpha Vantage + Polygon + Yahoo Finance Structured Financial Data

Functions: fetchPublicCompanyFinancials(ticker, cik) and fetchPrivateCompanyFinancials(name) in agents/financial-data-sources.js. All tiers, companies only. Normalizes to ReportSchema financials section. Supplements runFinancialDueDiligence().

SourceAPI EndpointUsed for
FMPfinancialmodelingprep.com/api/v3Income statement, balance sheet, cash flow
SEC EDGAR XBRLdata.sec.gov/api/xbrl/companyfacts/:cik.jsonSEC-reported financials (public companies)
Alpha Vantagealphavantage.co/queryKey statistics, overview
Polygon.ioapi.polygon.io/v2/reference/financialsFinancial statements
Yahoo FinancequoteSummary API (via enrichFromYahooFinance())Company profile, officers, ownership, key stats
D&B / CrunchbasePrivate endpointsPrivate company financials

Agent: Wayback Machine

GET archive.org/cdx/search/cdx Digital Footprint Analysis (Enterprise)

Function: checkWaybackMachine(query, websiteHint) in agents/wayback-agent.js. Enterprise only. Queries Internet Archive CDX API. Timeout: 10s. No API key. Returns snapshot history, domain registration timeline, and content change indicators.

GET https://archive.org/cdx/search/cdx?url={domain}&output=json&limit=10&fl=timestamp,statuscode,mimetype

Source of Wealth — 9-Source Verification Framework

Implemented in agents/sow-agent.js. Functions: runVerificationWorkflow(), assessRiskTier(), evaluateRedFlags(), validateAttestation(), getJurisdictionalRequirements(). PDF ID format: VDC-XXXXXXXX-SOW. Corroboration gauge: 0–100.

StepFunctionDescription
1assessRiskTier()Classify LOW/MEDIUM/HIGH/CRITICAL based on risk score, PEP hits, sanctions, offshore hits, high-risk jurisdiction, high-value transaction flag, claimed wealth sources
2evaluateRedFlags()Detect red flags: PEP/sanctions in CDD results, offshore jurisdiction, unexplained wealth gap, multiple complex wealth structures, short-notice documentation
3getJurisdictionalRequirements()Return FATF / local regulatory requirements for stated jurisdiction
4validateAttestation()Validate subject-provided attestation for completeness and consistency
5–9runVerificationWorkflow()Employment / salary corroboration, business ownership verification, inheritance documentation review, investment portfolio cross-reference, property/asset registry search
High-Risk Jurisdictions (automatic tier escalation)AF, BY, CF, CU, ER, IQ, IR, KP, LB, LY, MM, RU, SD, SO, SS, SY, VE, YE, ZW + full country names matched case-insensitively.

Webhooks

Delivered on screening completion. HMAC-SHA256 signed. Auto-disabled after ≥10 consecutive failures. 3-attempt backoff on delivery failure.

FieldValue
Signature HeaderX-Veridact-Signature: sha256=<hex>
AlgorithmHMAC-SHA256 over raw request body
Retry Policy3 attempts, exponential backoff
Auto-disableAfter 10 consecutive delivery failures

Webhook Payload Shape

{
  "event": "screening.completed",
  "screening_id": "uuid",
  "screening_type": "CDD"|"EDD"|"SOW"|"MA",
  "risk_score": 42,
  "risk_level": "medium",
  "sow_screening_id": "uuid-or-null",
  "completed_at": "2026-05-07T18:00:00.000Z"
}
Veridact API Reference · Extracted from source 2026-05-07 · v1.3.0 · Interactive Docs · OpenAPI 3.0.3 JSON