Skip to content

Results and reports

Use completion callbacks before retrieving results. With Analyst Assistance, Redressing means review is outstanding; Redressed and Complete notify you of reviewed completion. Without Analyst Assistance, Complete indicates successful processing. Handle duplicate completion notifications idempotently.

Use the status delivered in the notification; a status recheck after each callback is unnecessary.

GET /api/Subjects/{subjectId}/backgroundCheckResults
GET /api/Subjects/getByExternalId/{externalId}/backgroundCheckResults

Results describe the most recently completed screening. The endpoint returns 400 when there is no completed screening or a screening is currently in progress. Do not depend on retrieving an older result while a new screening is running.

Keep the returned subject identifier and available timestamps aligned with the workflow you are tracking. The API does not advertise a run-ID parameter on these endpoints.

FieldMeaning
subjectIdFerretly subject identifier
subjectExternalSystemIdYour external identifier, when supplied
initiatedWhen the returned screening was initiated
scoreCalculated screening score
flaggedPostsCount of posts with flags
flagCountTotal number of flags, which can differ from flagged-post count
riskMakeupsFlag counts grouped by risk
channelVolumesPost counts by platform
totalPostsTotal post count
runStatusDetailed RunStatusEnum, distinct from workflow BackgroundCheckStatus
postSummaryTextOptional AI-generated summary of recent flagged posts
isRedressedWhether the subject was marked as reviewed
lastMarkAsRedressedOnMost recent review timestamp, when present

See BackgroundCheckResults for the complete schema. Aggregated results do not contain a collection of full flagged-post payloads.

GET /api/Subjects/{subjectId}/filteredPosts
GET /api/Subjects/{externalId}/filteredPostsByExternalId

Both return arrays of Post. See Posts and media to interpret authorship, sentiment, keywords, and media-level flags. Use these query parameters:

ParameterValuesDefault
typeFilterAll, NegativeSentiment, PositiveSentiment, Flagged, WebNews, Tagged, SavedSearch, SanctionsSearchAll
dateFilterNone, ThirtyDays, SincePrevious, CustomNone

Use the values exactly as shown. These endpoints do not accept a platform filter, start/end dates, or pagination parameters. Although Custom is a valid dateFilter value, you cannot supply a custom date range through these endpoints.

Example flagged-post request:

Terminal window
curl --fail -sS "https://api.ferretly.com/api/Subjects/SUBJECT_ID/filteredPosts?typeFilter=Flagged&dateFilter=None" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Accept: application/json"

The endpoint returns an empty post array when the subject has no most-recent run ID. An empty array is not proof that a completed screening found no posts.

Terminal window
curl --fail -sS "https://api.ferretly.com/api/Subjects/SUBJECT_ID/downloadBackgroundReport" \
-H "X-Api-Key: YOUR_API_KEY" \
-o report.bin

The response content type is application/octet-stream. Write it as binary, check the HTTP status, and use the response’s filename when supplied. Do not parse the file as JSON or infer its extension from the MIME type alone.

StatusMeaning
200Binary report returned
400No current report, or report is being regenerated
404Subject or report file not found

Analyst review can regenerate the report. Treat temporary report unavailability separately from screening completion; do not rerun a screening just to recover a missing report.

See Download a report for response details.