Pressfront API · Common questions

Is there an API that finds who started a rumor online?

Yes. Send the rumor, get back who said it first, who spread it, and whether they showed proof.

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.

  1. 1 Started@gossipdeskNov 3, 9:14 PM · no photo, no link · now gone
  2. 2 Spread190 accounts120 repeated it, 40 asked if it was real, 3 said it was not
  3. 3 Who7 in 10have “manon” in their name or bio
  4. 4 Before?31 of 140were in earlier waves (Jul 2, Sep 18)

An invented example, the same shape the API returns. Every stop links the real post.

  1. 1

    Send the rumor

    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.

  2. 2

    Wait a few minutes

    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.

  3. 3

    Read the answer

    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. ..."
    }
  4. 4

    Hand it to your AI, or check it yourself

    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.

0

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.

FAQ

Does the API say whether the rumor is true?

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.

Is the first post it returns really the first one?

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.

How far back does it look?

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.

What does it cost?

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.

Can I try it without paying?

Yes. The public demo key pf_live_DemoKeyForPressfrontTraceSample1 reads one invented trace, including its /case answer. It cannot start traces.