prism

Screen a person's public social profiles for adverse posts, with every flag citing its post, for human review.

Reads the recent public posts of a person's own profiles (one per platform: linkedin, twitter, facebook, instagram, threads, tiktok, each a handle or a profile URL) and asks, post by post, whether the author engages in, admits, threatens or promotes each category you screen for: fraud_or_financial_crime, violence_or_threats, hate_or_harassment, drugs, sanctions_or_terror_links, sexual_misconduct, reputational_other (default: all). A separate check keeps posts that report, quote, warn about or condemn what someone else did (news, a scam warning) from counting as the author's conduct, and a severity level (1 minor, 2 serious, 3 severe) is given for every flagged post. Every entry of flags cites its post (platform, post_id, url, published_at, an excerpt) with the probability for each requested category; category_counts counts flagged and uncertain posts per category; requires_review is true when any post is flagged. With name (and optionally employer, city), each profile is first checked against the named person: only profiles judged to be the person's own are screened, the rest are listed in profiles with the identity verdict and are not screened (screen_unconfirmed=true screens possible matches too, never a profile judged to be someone else). These are automated labels for a human reviewer, not a decision: there is no summary, verdict or score about the person, and political opinion, religion, health, sexuality and other personal characteristics are never screened. Public posts only; private accounts return nothing. screen_complete is false when a profile or a post could not be screened, and _warnings says why.

get/prism/adverse-screen

Request

  • Base URL: https://www.socialcrawl.dev/v1
  • URL: https://www.socialcrawl.dev/v1/prism/adverse-screen
  • Auth: API key in header x-api-key

Query parameters

linkedinstring

LinkedIn profile URL (linkedin.com/in/...) or the profile slug. (one of: linkedin, twitter, facebook, instagram, threads, tiktok; at least one required)

twitterstring

X (Twitter) handle or profile URL. (one of: linkedin, twitter, facebook, instagram, threads, tiktok; at least one required)

facebookstring

Facebook profile or page URL, or its username. (one of: linkedin, twitter, facebook, instagram, threads, tiktok; at least one required)

instagramstring

Instagram handle or profile URL. (one of: linkedin, twitter, facebook, instagram, threads, tiktok; at least one required)

threadsstring

Threads handle or profile URL. (one of: linkedin, twitter, facebook, instagram, threads, tiktok; at least one required)

tiktokstring

TikTok handle or profile URL. (one of: linkedin, twitter, facebook, instagram, threads, tiktok; at least one required)

namestring

The person's full name. When set, each profile is checked against it before screening.

employerstring

Optional current employer, used only for the identity check.

citystring

Optional city or country, used only for the identity check.

categoriesstring

Comma-separated subset of fraud_or_financial_crime, violence_or_threats, hate_or_harassment, drugs, sanctions_or_terror_links, sexual_misconduct, reputational_other. Default: all. An unknown member is a 400.

sincestring

Only screen posts published on or after this date (YYYY-MM-DD).

limitinteger

Most recent posts screened per profile, 1 to 100 (default 50). One timeline page is read per profile.

screen_unconfirmedstring

Set true to also screen profiles whose identity is possible or could not be judged. Profiles judged to be someone else are never screened.

Headers

Cache-Controlstring

Send no-cache to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the no-cache directive triggers this. See the Response Schema guide for details.

Idempotency-Keystring

Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: credits_used becomes 0, idempotent_replay becomes true, and credits_remaining is refreshed to the current balance. A known current balance appears in both the body and X-Credits-Remaining header; no balance row resolves to 0. On a transient lookup failure, body credits_remaining is null and X-Credits-Remaining is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use Accept: application/json when sending this header. The unsupported key-plus-SSE combination is rejected before billing.

Response

Successful response

successboolean required

Whether the request succeeded

platformstring required

Platform name

endpointstring required

API endpoint path

credits_usedinteger required

Number of credits consumed

credits_remaininginteger nullable required

Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.

request_idstring required

Unique request identifier for support

cachedboolean required

Whether the response was served from cache

idempotent_replayboolean

True only when this response is an idempotency replay

Example response

{
  "success": true,
  "platform": "prism",
  "endpoint": "/v1/prism/adverse-screen",
  "credits_used": 1,
  "credits_remaining": 4999,
  "request_id": "req-abc123",
  "idempotent_replay": true,
  "meta": {
    "hint": {
      "code": "search_multi",
      "message": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged.",
      "method": "GET",
      "path": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.