Check a Listing
Intelligence
Check a Listing
Screen a whole product listing for trademark conflicts (beta)
POST
Check a Listing
Overview
POST /v1/screening/listings answers “is this LISTING risky?” — one level up
from screening a name. You send the
commerce text of a product listing (title, brand, description, keywords) and it:
- Extracts candidate marks deterministically (no LLM at request time), with provenance (source field + character span per candidate).
- Fans out each candidate through the screening core.
- Aggregates to one listing-level verdict (
clear/caution/high_risk), deduplicating conflicts across candidates.
Request
title is required. Fields are generic — there are no marketplace-specific
fields (Etsy/Amazon mappings live in docs recipes, not the schema).
| Field | Type | Notes |
|---|---|---|
title | string | Required. Split on hard delimiters, then n-grammed. |
brand | string | Always screened, never suppressed. |
description | string | High-precision markers only (quoted / ™®-adjacent / “compatible with X”). |
keywords | string[] | Platform-neutral tags/keywords/search terms. |
category | string | Context only — never itself a candidate. |
nice_classes | number[] | Hard filter + class-conditioned descriptive suppression. |
jurisdictions | string[] | Territory codes (e.g. US, EU). |
offices | string[] | Registering office codes (e.g. uspto). |
include | live | all | live (default) keeps live marks. |
sensitivity | strict | standard | broad | Primary-tier threshold; the title/keyword tier is always strict. |
Response
A bespoke envelope: a leadinglisting decision block, an evidence-first
matches[] payload, the back-compatible data[] of
listing_candidate (each conflict is byte-identical to a
screening hit), and a trailing
suppressed[] audit list explaining why candidates were not screened.
Reading the result
analysis_status is a closed completeness enum and is orthogonal to the
tri-state verdict. Automated approval must key off
auto_approve_eligible (equivalent to verdict === "clear" and
analysis_status === "complete") and must not use verdict alone. Incomplete
or unsupported analysis is never auto-approvable.
class_provenance explains where the class set came from;
provided_unverified means the caller supplied it and Signa has not verified it
against a platform taxonomy. resolved_nice_classes is the listing-level set
actually screened. dictionaries_version and decision_asset_version make the
deterministic decision assets auditable. There is no public risk_score.
The GA scope is English-only. When the title and brand are majority non-Latin
(CJK, Thai, Arabic, or Cyrillic), the endpoint returns
analysis_status: "unsupported_language", floors the verdict to caution, and
does not run the text through English screening.
Safety guarantees
- Never a false clear. Any search-backend error →
503(never a partial “clear”). If the candidate budget is exceeded, the listing can never beclear— it is forced tocautionwith acandidate_budget_cappedwarning. - Informational-only conflicts. A tier-S identical name in an unrelated
class (e.g. a famous word used descriptively) is surfaced with
"informational": truebut does not escalate the listing verdict.