The request and any credit reservation were accepted.
Adverse media screening API.
Add person screening to your business tools. Submit a name and optional identity details, then receive structured findings, source links, identity confidence and search coverage.
Your first screening
Use a bearer API key from your server. Create a screening, poll its resource, then read the findings and coverage.
- 1Create a request
- 2Poll until finished
- 3Review the evidence
{
"subject": {
"firstName": "Alex",
"lastName": "Example",
"country": "US"
},
"searchDepth": "standard"
}A new request returns 202 and a Location header. A retry with the same workspace key and normalized request returns 200, the current result state and Idempotent-Replay: true.
Send the details you know.
Only first and last name are required. Use only identifiers you are allowed to process. All subject fields below belong inside subject, except the two marked top-level.
| Field | Required | Format |
|---|---|---|
firstName, lastNameRequired | Required | 1 to 120 characters each. The combined name must fit the search limit. |
middleNameOptional | Optional | Up to 120 characters. |
dateOfBirthOptional | Optional | A real date in YYYY-MM-DD, not in the future. |
countryOptional | Optional | ISO 3166-1 alpha-2 code, such as US or BG. Case-insensitive. |
state, cityOptional | Optional | Up to 120 characters each. Location helps distinguish people with the same name. |
postalCode, genderOptional | Optional | Up to 32 and 50 characters respectively. |
phone, emailOptional | Optional | Phone in E.164 format. Email must be valid and at most 298 characters. |
referenceIdOptional | Optional | Top-level customer reference, up to 120 characters. Keep personal data out of it. |
searchDepthOptional | Optional | Top-level enum: standard (default) or enhanced. |
Search text is trimmed. Blank optional fields are omitted, country is normalized to uppercase, and email to lowercase. Unknown properties and control characters in search fields are rejected. Omit optional fields instead of sending null.
Identity, role and coverage are separate.
isPerpetratorboolean | null
The person's reported role in this event. It is not proof of guilt or confirmation that this is the person you searched for.
- true
- The source describes an alleged or established adverse actor.
- false
- The source clearly assigns a different role.
- null
- The role is unclear or was not recorded in an older result.
Victim-only and witness-only events are excluded from adverse findings. Always read eventStage, identity.confidence and the quoted evidence.
Example response Fictional data
This fixed example is independent of the names entered above. It is not a live response.
{
"id": "00000000-0000-4000-8000-000000000001",
"object": "screening",
"status": "completed",
"outcome": "potential_match",
"failureCode": null,
"referenceId": null,
"searchDepth": "standard",
"createdAt": "2026-09-01T10:00:00.000Z",
"completedAt": "2026-09-01T10:02:00.000Z",
"expiresAt": "2026-09-08T10:00:00.000Z",
"subject": {
"firstName": "Alex",
"lastName": "Example",
"country": "US",
"city": "Boston"
},
"findings": [
{
"id": "00000000-0000-4000-8000-000000000002",
"category": "fraud",
"eventStage": "charge",
"isPerpetrator": true,
"severity": "high",
"title": "Reported fraud charge",
"summary": "A fictional report describes a charge against Alex Example.",
"eventDate": "2026-08-20",
"identity": {
"confidence": "medium",
"matchedAttributes": [
"name",
"location"
],
"conflictingAttributes": []
},
"adverseRelevance": "high",
"sources": [
{
"title": "Fictional report",
"url": "https://example.com/report",
"domain": "example.com",
"publishedAt": "2026-08-21",
"excerpt": "Alex Example of Boston was charged with fraud. The charge has not been proven."
}
]
}
],
"coverage": {
"complete": true,
"searchesCompleted": 4,
"sourcesReviewed": 3
},
"limitations": [
"Illustrative data only. Review identity and evidence before use."
]
}potential_matchAt least one possible match is supported. Other findings may still need identity review. Inspect each finding.
no_verified_matchesNo supported match was found within the completed search scope. This is not proof that no adverse media exists.
inconclusiveA possible signal needs human review. Check identity confidence, reported role and source evidence.
search_incompleteNo supported result could be returned and coverage was incomplete.
coverage.complete is separate from outcome. A result with findings can still have partial coverage. Read limitations, and review every finding before use.
Category and event stage values
category: corruptioncybercrimefinancial_crimefraudlegalorganized_crimeregulatoryterrorismtraffickingviolenceother
eventStage: allegationinvestigationchargeconvictionenforcementacquittaldismissalother
Poll a stable resource.
The screening is still processing.
Stop polling and inspect the result.
Poll the Location URL only while status is queued or searching. Honor Retry-After, use increasing delays and stop on completed, incomplete, failed or cancelled. The Node.js and Python examples include bounded polling.
A completed screening can have outcome search_incomplete. Check outcome and coverage separately.
expiresAt is the result's expiry time. After it, a read returns 410. Deletion or retention cleanup releases the idempotency key, so reusing it can create a new screening.
Know the cost before you send.
Read GET /usage first. credits.standardCost and credits.enhancedCost are authoritative: paid plans normally use 1 and 2 credits; Unlimited returns 0 for both.
Compare prepaid credit packs and cost per screening. The browser playground and API use the same signed-in workspace allowance.
The request limit is shared by all API keys in the workspace. A workspace can have at most five queued, retrying, or active screenings. Read RateLimit-Policy and RateLimit when present. Protective network limits can also return 429, without workspace limit headers. Honor Retry-After.
Cancellation or deletion returns reserved credits only if processing has not begun. Inspect usage after a cancellation; do not assume that every cancelled screening is free.
Five operations. One workspace.
Base URL: https://adversesearch.com/api/v1. Every operation requires a valid bearer API key for an active workspace.
POST /screeningsCreate a screening with Idempotency-Key.
GET /screenings/{id}Read the current state or result.
POST /screenings/{id}/cancel202 accepts the request to stop. Active work may still be stopping. Poll for a terminal status; already terminal records return 409.
DELETE /screenings/{id}204 removes the result and stops processing. A later GET returns 410; repeated DELETE returns 404.
GET /usageRead your plan, credit balance, costs, expiry and request limit.
Save the screening ID returned at creation. The public API does not have a list endpoint.
Retry the same operation safely.
Use one opaque idempotency key per logical screening, shared across retries with the same body. A different normalized body under the same key returns 409. Keep personal data out of keys.
| Status | What to do |
|---|---|
400 | Invalid fields or malformed JSON. Correct the request before retrying. |
401 / 403 | Check your API key, its expiry and workspace access. |
402 | Insufficient credits. No screening was created. |
404 / 410 | The resource was not found, or its result was deleted or expired. |
409 | IDEMPOTENCY_CONFLICT: use the original request for this key. SCREENING_NOT_CANCELLABLE: processing is already terminal. |
413 | The request body is too large. |
423 | BILLING_REVIEW_HOLD: this result is unavailable while a billing review is pending. |
429 | A request or active-screening limit was reached. Honor Retry-After before retrying. |
500 / 503 | The request could not be completed or the service is temporarily unavailable. Keep the request ID; retry creation with the same key and body. |
Read error.code, error.message and error.requestId. Responses also include X-Request-ID. A terminal screening may have failureCode; this does not mean it should be recreated automatically.
Never put a live key in browser code, mobile bundles, URLs or logs. The live playground uses your signed-in account.
Review screening data security and the privacy and retention policy before integrating personal data. For rollout questions, contact AdverseSearch.