Detect near-duplicate passages (syndicated or copied text) so repeated sources are not counted as independent

$0.005 USDC per call · Agent infrastructure · POST /api/v1/syndication-hint · Id syndication-hint

Compares up to 30 passages an agent collected and reports which pairs share word-shingle content (Jaccard and containment), grouping them into clusters of probable copies so the number of independent sources can be stated honestly. Does not establish who copied whom, does not detect paraphrase or translation, and does not fetch anything; a high similarity is a hint that sources are not independent.

What you get

Stops five reprints of one wire story being counted as five sources. 30 passages per $0.005 call.

Call it

Send the JSON body below to https://agents.writerslogic.com/api/v1/syndication-hint. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.

curl -i -X POST https://agents.writerslogic.com/api/v1/syndication-hint \
  -H 'content-type: application/json' \
  -d '{"passages":[{"id":"wire","text":"The central bank raised interest rates by a quarter point on Wednesday, citing persistent inflation in services and a tight labor market."},{"id":"reprint","text":"Reuters: The central bank raised interest rates by a quarter point on Wednesday, citing persistent inflation in services and a tight labor market. Shares fell."},{"id":"other","text":"Economists at three universities published a study of regional housing prices and commuting patterns over the last decade."}]}'

Input

FieldTypeRequiredDescription
passagesarray<object>; max 30 itemsyesUp to 30; 300000 characters in total.
shingleWordsinteger; 2..12noWords per shingle. Default 5.
jaccardThresholdnumber; 0.05..1noPairs at or above this Jaccard similarity are flagged. Default 0.5.
containmentThresholdnumber; 0.05..1noPairs where this share of the smaller passage's shingles appear in the other are flagged (catches an excerpt of a longer copy). Default 0.8.

Example request body

{
  "passages": [
    {
      "id": "wire",
      "text": "The central bank raised interest rates by a quarter point on Wednesday, citing persistent inflation in services and a tight labor market."
    },
    {
      "id": "reprint",
      "text": "Reuters: The central bank raised interest rates by a quarter point on Wednesday, citing persistent inflation in services and a tight labor market. Shares fell."
    },
    {
      "id": "other",
      "text": "Economists at three universities published a study of regional housing prices and commuting patterns over the last decade."
    }
  ]
}

Result

The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.

FieldTypeRequiredDescription
statusstring; one of "pass", "fail", "unknown", "unsupported"nopass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass.
pairsarray<object>; max 435 itemsnoFlagged pairs only, most similar first.
clustersarray<object>; max 30 itemsnoGroups of passages linked by flagged pairs; singletons included.
independentGroupsintegernoNumber of clusters: the independent-source count after collapsing copies.
tooShortarray<string; length 0..100>; max 30 itemsnoPassages with fewer words than one shingle; they cannot be compared.
witnessesarray<object>no
versionsobjectnoEvery semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile).
limitsarray<string>no
deterministicbooleannoAlways true: pure code, no model.

Pay and connect

Available through: x402 (USDC on Base), MCP. MCP clients reach it through the context-evidence-kit package.

Machine-readable