Negative Media Screening

Retrieve the latest negative media screening result for a verification entity or a specific stakeholder. Negative media screening searches the public web for adverse press about an individual or entity (and, for KYB verifications, each stakeholder), and uses bronID's summarization layer to flag articles that describe negative findings.

Overview

When screening completes, a webhook is sent with the updated idvRisk and a screening.negativeMedia summary. Use the endpoints below to retrieve full screening details including matched articles.

These read-only endpoints return the most recent screening result, including:

  • Findings — overall flag and count of articles flagged as negative
  • Articles — the search results bronID resolved, each with a per-article summary and isNegative flag

Three endpoints are available — two for retrieving the latest screening result, and one for triggering a new screening run on demand:

  • GET /v5/verifications/:trace/negative-media/latest - Get entity screening result
  • GET /v5/verifications/:trace/stakeholders/:stakeholderId/negative-media/latest - Get stakeholder screening result
  • POST /v5/verifications/:trace/negative-media - Trigger a new screening run

GET/v5/verifications/:trace/negative-media/latest

Get entity screening

Retrieve the latest negative media screening result for the verification entity.

Path parameters

  • Name
    trace
    Type
    string
    Description

    The unique identifier for the verification.

Response fields

FieldTypeDescription
screeningIdstringUnique identifier for the screening run.
tracestringThe verification trace.
totalArticlesnumberTotal number of articles returned by the upstream search.
findingCountnumberCount of articles flagged as negative by bronID's summarization layer.
hasFindingsbooleanConvenience flag — true when findingCount > 0.
isNegativebooleanOverall negative flag — true if any article in articles is negative.
summarystringOverall summary across all articles.
articlesarrayThe articles returned and analyzed. See Articles.
triggeredByActionstringWhat triggered the screening: "on-verified", "manual-api", "manual-portal", or "scheduled".
triggeredByUidstringUID of the user who triggered the screening (optional, present on manual triggers).
triggeredByEmailstringEmail of the user who triggered the screening (optional, present on manual triggers).
screenedAtnumberUnix timestamp of when the screening was performed (milliseconds).
screenedTimestringHuman-readable screening time.
createdAtnumberUnix timestamp of when the record was created (milliseconds).
createdTimestringHuman-readable creation time.

Error responses

Status CodeError TypeDescription
404not_foundNo negative media screening exists for this verification.

Request

GET
/v5/verifications/:trace/negative-media/latest
curl -X GET "https://api.bronid.com/v5/verifications/{trace}/negative-media/latest" \
  -H "Authorization: Basic {credentials}"

Response

{
  "timestamp": "2026-02-28T04:00:00.000Z",
  "serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
  "trace": "abc123-verification-trace",
  "path": "/v5/verifications/:trace/negative-media/latest",
  "pathParams": {
    "trace": "abc123-verification-trace"
  },
  "statusCode": 200,
  "message": "Negative media screening retrieved successfully.",
  "help": null,
  "status": "success",
  "data": {
    "screeningId": "scr-nm-abc123",
    "trace": "abc123-verification-trace",
    "totalArticles": 0,
    "findingCount": 0,
    "hasFindings": false,
    "isNegative": false,
    "summary": "",
    "articles": [],
    "triggeredByAction": "on-verified",
    "screenedAt": 1740715200000,
    "screenedTime": "28/02/2026 04:00:00",
    "createdAt": 1740715200000,
    "createdTime": "28/02/2026 04:00:00"
  },
  "error": null
}

Error response (404)

{
  "timestamp": "2026-02-28T04:00:00.000Z",
  "serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
  "trace": "abc123-verification-trace",
  "path": "/v5/verifications/:trace/negative-media/latest",
  "pathParams": {
    "trace": "abc123-verification-trace"
  },
  "statusCode": 404,
  "message": "Not found",
  "help": null,
  "status": "error",
  "data": null,
  "error": {
    "type": "not_found",
    "details": [
      {
        "message": "Negative media screening not found",
        "code": "not_found",
        "path": ["screening"]
      }
    ]
  }
}

GET/v5/verifications/:trace/stakeholders/:stakeholderId/negative-media/latest

Get stakeholder screening

Retrieve the latest negative media screening result for a specific stakeholder within a verification.

Path parameters

  • Name
    trace
    Type
    string
    Description

    The unique identifier for the verification.

  • Name
    stakeholderId
    Type
    string
    Description

    The unique identifier for the stakeholder.

Response fields

The response fields are identical to the entity screening response, with the addition of:

FieldTypeDescription
stakeholderIdstringThe stakeholder that was screened.

Error responses

Status CodeError TypeDescription
404not_foundNo negative media screening exists for this stakeholder.
422validation_errorInvalid stakeholder ID (e.g. empty or whitespace).

Request

GET
/v5/verifications/:trace/stakeholders/:stakeholderId/negative-media/latest
curl -X GET "https://api.bronid.com/v5/verifications/{trace}/stakeholders/{stakeholderId}/negative-media/latest" \
  -H "Authorization: Basic {credentials}"

Response

{
  "timestamp": "2026-02-28T04:00:00.000Z",
  "serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
  "trace": "abc123-verification-trace",
  "path": "/v5/verifications/:trace/stakeholders/:stakeholderId/negative-media/latest",
  "pathParams": {
    "trace": "abc123-verification-trace",
    "stakeholderId": "sth-director-001"
  },
  "statusCode": 200,
  "message": "Negative media screening retrieved successfully.",
  "help": null,
  "status": "success",
  "data": {
    "screeningId": "scr-nm-def456",
    "trace": "abc123-verification-trace",
    "stakeholderId": "sth-director-001",
    "totalArticles": 2,
    "findingCount": 1,
    "hasFindings": true,
    "isNegative": true,
    "summary": "One article references alleged misconduct involving the stakeholder.",
    "articles": [
      {
        "title": "Director linked to alleged misconduct",
        "link": "https://example.com/news/article-1",
        "displayLink": "example.com",
        "snippet": "An investigation alleges...",
        "summary": "The article describes an ongoing investigation into the stakeholder.",
        "isNegative": true,
        "publishedAt": "2026-02-15"
      },
      {
        "title": "Director appointed to advisory board",
        "link": "https://example.com/news/article-2",
        "displayLink": "example.com",
        "snippet": "The stakeholder has been appointed...",
        "summary": "The article reports a new advisory appointment.",
        "isNegative": false,
        "publishedAt": "2026-01-20"
      }
    ],
    "triggeredByAction": "on-verified",
    "screenedAt": 1740715200000,
    "screenedTime": "28/02/2026 04:00:00",
    "createdAt": 1740715200000,
    "createdTime": "28/02/2026 04:00:00"
  },
  "error": null
}

Articles

Each entry in articles represents a single search result analyzed by bronID's summarization layer.

FieldTypeDescription
titlestringArticle title.
linkstringArticle URL.
displayLinkstringDisplay-friendly URL (typically the host).
snippetstringSearch-result snippet.
summarystringbronID-derived per-article summary.
isNegativebooleanbronID-derived flag — true if the article describes a negative finding.
publishedAtstringISO 8601 publication date if exposed by the source (optional).

POST/v5/verifications/:trace/negative-media

Trigger a rescreen

Dispatches a negative media rescreen for an existing verification. This is an asynchronous operation — the endpoint returns a jobId immediately, and the full screening cascade (stakeholders → stakeholder risk → entity → entity risk) runs in the background.

Poll GET /v5/verifications/:trace/jobs/negativeMedia/:jobId to check lifecycle status. See the Jobs reference for the full status machine and the in-flight debounce behavior.

Path parameters

  • Name
    trace
    Type
    string
    Description

    The unique identifier for the verification to rescreen. Must refer to a v5 verification.

Request body

No fields. Send an empty JSON object ({}).

Response fields

FieldTypeDescription
triggeredbooleanAlways true on a 200 response.
jobIdstringThe dispatched job's ID. Use it to poll status via the jobs endpoint.

Error responses

Status CodeError TypeDescription
404not_foundNo v5 verification exists for the given trace.
429too_many_requestsA rescreen is already in flight for this verification. Response message includes the conflicting job's jobId; poll it instead of retrying immediately.

Request

POST
/v5/verifications/:trace/negative-media
curl -X POST "https://api.bronid.com/v5/verifications/{trace}/negative-media" \
  -H "Authorization: Basic {credentials}" \
  -H "Content-Type: application/json" \
  -d '{}'

Response

{
  "timestamp": "2026-02-28T04:00:00.000Z",
  "serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
  "trace": "abc123-verification-trace",
  "path": "/v5/verifications/:trace/negative-media",
  "pathParams": {
    "trace": "abc123-verification-trace"
  },
  "statusCode": 200,
  "message": "Negative media rescreen dispatched.",
  "help": null,
  "status": "success",
  "data": {
    "triggered": true,
    "jobId": "V1StGXR8_Z5jdHi6B-myT"
  },
  "error": null
}

Error response (429 – already in flight)

{
  "timestamp": "2026-02-28T04:00:00.000Z",
  "serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
  "trace": "abc123-verification-trace",
  "path": "/v5/verifications/:trace/negative-media",
  "pathParams": {
    "trace": "abc123-verification-trace"
  },
  "statusCode": 429,
  "message": "Negative media rescreen already in progress (jobId: V1StGXR8_Z5jdHi6B-myT). Poll its job doc for status.",
  "help": null,
  "status": "error",
  "data": null,
  "error": {
    "type": "too_many_requests",
    "details": [
      {
        "message": "Conflicting in-flight job: V1StGXR8_Z5jdHi6B-myT",
        "code": "too_many_requests",
        "path": ["trace"]
      }
    ]
  }
}

Result delivery

Negative media results are delivered through the same webhook channel as other risk events. When the cascade completes, the verification webhook fires with the updated idvRisk and a screening.negativeMedia summary. Use the jobId returned from the rescreen endpoint to follow lifecycle state via the Jobs endpoint while you wait.

Screening summary

The webhook payload's screening.negativeMedia field summarizes the latest screening outcome.

FieldTypeDescription
statusstring"not_screened", "clear", or "findings_present".
findingCountnumberCount of articles flagged as negative by bronID's summarization layer.
lastScreenedAtnumberUnix timestamp of when the screening was performed (milliseconds).
lastScreenedTimestringHuman-readable screening time.

IDV risk factor

Negative media contributes to the calculated IDV risk via the negativeMedia factor:

findingCountFactor statusFactor risk
null (never screened)not_screenedunknown
0clearlow
> 0findings_presentmedium_high

The final IDV risk is the maximum across all factors, so a high-risk country still dominates a medium_high negative-media factor. See IDV risks for the full risk model.


Stakeholders (KYB)

For KYB verifications, every stakeholder is screened in parallel with the entity. The cascade runs:

  1. Each stakeholder is screened and their stakeholder risk is recalculated.
  2. The entity is screened and the entity risk is recalculated.

Each stakeholder run is billed separately for parity with the watchlist cascade. See the per-service screening configuration in the bronID portal for details.

Was this page helpful?