Pressfront API · Common questions
Is there an API that finds who started a rumor online?
The Pressfront Trace API takes a rumor the way people post it and returns the earliest public post we could find, how many accounts repeated it, asked if it was real or said it was not, and whether the first post had a photo or link or is now gone. It reads X and Bluesky first, plus Reddit, forums, archives and other sites we read. It never decides whether the rumor is true.
Read the API docsA key comes with Trace, $149 a month.The “Lara went partying after the concert was cancelled” story started with one post with no photo or link, and that post is now gone.
An invented example, the same shape the API returns. Every stop links the real post.
Pass the story as the few words people post (claim), or tell it in your own words (text, up to 6,000 characters, pasted post links help). Over REST you can add up to 5 screenshots or PDFs as files.
curl https://pressfront.co/api/v1/traces \ -H "Authorization: Bearer pf_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"claim": "Lara went partying after the concert was cancelled"}'
202 Accepted{ "id": "01JF3K8Q2V7N5T0R4W6Y9ZB1CD", "status": "queued", "kind": "origin", "query": "Lara went partying after the concert was cancelled", "since": null, "link": "https://pressfront.co/trace.html?id=01JF3K8Q2V7N5T0R4W6Y9ZB1CD", "etaSec": 300, "next": "GET /v1/traces/01JF3K8Q2V7N5T0R4W6Y9ZB1CD?wait=25 (repeat until done), then GET /v1/traces/01JF3K8Q2V7N5T0R4W6Y9ZB1CD/case; or the trace.done webhook" }
Not sure what to send? POST /v1/understand with your text says back what we would look up (the person, or the story in a few words) and starts nothing.
GET /v1/traces/{id}?wait=25 holds the answer until the trace finishes or 25 seconds pass, so you repeat it instead of polling. Or set a webhook link in Settings and get trace.done.
GET /v1/traces/{id}/case is the card above as data: one headline built by fixed rules from our counts, then four stops in order. You can try this call now with the public demo key (it reads one invented trace of a name, so its stops describe posts about a name rather than a story).
curl https://pressfront.co/api/v1/traces/01JDEM0SAMP1E000000000000T/case \
-H "Authorization: Bearer pf_live_DemoKeyForPressfrontTraceSample1"For a story trace, the answer looks like this (abridged):
200 OK{ "kind": "origin", "headline": "The \"Lara went partying after the concert was cancelled\" story started with one post with no photo or link, and that post is now gone.", "stops": [ { "n": 1, "label": "Started", "text": "@gossipdesk · Nov 3, 9:14 PM · no photo, no link · now gone · a Community Note says: misleading", "sub": "The earliest public post we could find.", "url": "https://x.com/gossipdesk/status/1850000000000000001", "known": true }, { "n": 2, "label": "Spread", "text": "190 accounts · 120 repeated it, 40 asked if it was real, 3 said it was not", "sub": "We read 180 of 212 posts. Sorted by AI: about 9 in 10 match a careful check.", "known": true }, { "n": 3, "label": "Who", "text": "7 in 10 have \"manon\" in their name or bio", "known": true }, { "n": 4, "label": "Before?", "text": "31 of 140 were in earlier waves (Jul 2, Sep 18)", "known": true } ], "huh": { "big": "14", "line": "14 accounts posted the exact same sentence." }, "data": { "started": { "author": "gossipdesk", "platform": "x", "ts": "2026-11-03T21:14:00Z", "proof": "none", "gone": true }, "spread": { "posts": 212, "accounts": 190, "read": 180, "repeats": 120, "questions": 40, "denies": 3, "withProof": 0 }, "before": { "accounts": 140, "seenBefore": 31 } }, "note": "We show who said what and when. We never decide who is right. ..." }
GET /v1/traces/{id}/brief returns the same answer as Markdown facts for a language model to explain. Every stop carries the link to the real post, so you can open it before you act on it. A stop we could not fill says so and has known: false.
words of the headline are written by an AI. It is built by fixed rules from our counts. A language model only sorts the posts (repeated, asked, denied), and about 9 in 10 of those sorts match a careful check.
No. It shows who said what and when, and whether they showed a photo, video or link. It never decides who is right or whether a story is true.
It is the earliest public post we could find. Private accounts, group chats and posts deleted before we looked are out of reach, and the answer says when a stop could not be filled.
With a key from a Trace plan, as far back as the story goes, or as far back as your text says it has gone on (“for 10 months”, say). Through a marketplace, up to 90 days.
A key comes with Trace at $149 a month, with up to 20 traces a day through the API. Pay per call on the Apify Store (Monid listing on the way): $4.99 a trace and $0.05 a read.
Yes. The public demo key pf_live_DemoKeyForPressfrontTraceSample1 reads one invented trace, including its /case answer. It cannot start traces.