Extract claims
Get the handful of statements in an argument that are actually true or false, such as a figure that rose or fell, without the opinion, framing and rhetorical questions wrapped around them. It gives a fact-checker the list to work from. You pay per use, with no subscription.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
An opinion piece, a press release or a debate transcript is a mix of framing, opinion and a handful of concrete assertions that are actually true or false — and separating that handful from everything around it is usually the slowest part of fact-checking.
Claim or opinion: where the line falls
Not every sentence in an argumentative text is a claim in the useful sense. This is deeply concerning is an opinion; unemployment rose by two points last quarter is a claim, because it asserts something specific enough to be checked against evidence. The tool keeps statements that carry a verifiable assertion and leaves aside the framing, the tone and the rhetorical questions around them. When a sentence bundles both, as in predictably, the report shows revenue fell 12 percent, it isolates the revenue figure without treating the word predictably as a fact.
Who uses a list of claims
Fact-checkers build a prioritized queue of statements to verify from a speech transcript. Editors pull the separate claims out of a press release before publishing, so each one can be matched to a source on file. Researchers separate claims from opinion across a body of opinion columns to study persuasive writing, and communications teams scan a draft statement for anything that could be challenged or misquoted before it goes out under the company's name. Each claim comes back as a standalone statement, phrased close to the original wording.
What you can do with it
Building a fact-check queue from a speech
Extract every checkable claim from a political speech transcript to build a prioritized list of statements a fact-checking team should verify first.
Pre-publication source review
Pull the discrete claims out of a press release before publishing so an editor can confirm each one has a supporting source on file.
Argumentative structure analysis
Separate claims from opinion and framing in a corpus of opinion columns as part of a research project studying persuasive writing techniques.
Internal comms risk review
Scan a draft public statement for factual claims that could be challenged or misquoted before it goes out under the company's name.
FAQ
Does it fact-check the claims it finds?
No, it isolates and returns the checkable statements themselves; verifying whether each claim is true is a separate step left to the fact-checker or researcher using the output.
Is there a free tier for testing this out?
There's no free tier — free tiers get abused and slow everyone down. No subscription, no tokens, no invented credits, and a failed task is never charged.
Does it preserve the original wording of each claim?
Extracted claims stay close to the original phrasing rather than being rewritten, which keeps them attributable back to the exact statement in the source text.
What happens with sentences that mix a claim and an opinion?
The extraction isolates the checkable portion of the sentence and leaves the opinion or framing language aside, rather than returning the whole sentence as if all of it were verifiable.
What counts as a claim and what counts as opinion?
A claim asserts something specific enough to be checked against evidence, such as unemployment rising by two points last quarter. A line like this is deeply concerning is opinion, so it is left aside together with framing and rhetorical questions.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/text/extract-claims \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"El informe trimestral cerró con 1,2 M€ de ingresos."}'const res = await fetch("https://api.kit.forhosting.com/text/extract-claims", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "El informe trimestral cerró con 1,2 M€ de ingresos."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/extract-claims",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "El informe trimestral cerró con 1,2 M€ de ingresos."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/extract-claims", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"El informe trimestral cerró con 1,2 M€ de ingresos."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"El informe trimestral cerró con 1,2 M€ de ingresos."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/extract-claims", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "El informe trimestral cerró con 1,2 M€ de ingresos."
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.extract_claims",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_tokens | 20000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
422 | task_failed | The task failed after 3 retries. You are never charged for it. |
Technical notes
This claim extraction endpoint reads an argument and returns only the discrete, checkable statements it makes, stripped of the rhetoric wrapped around them.
What we mean by a claim
Not every sentence in an argumentative text is a claim in the useful sense — 'this is deeply concerning' is opinion, while 'unemployment rose by two points last quarter' is a claim, because it asserts something specific enough that it could, in principle, be checked against evidence. This endpoint is built to separate the two, returning statements that carry a verifiable assertion and leaving aside the framing, tone and rhetorical questions that surround them.
Who spends hours doing this by hand today
Fact-checkers building a queue of statements to verify from a politician's speech, journalists preparing to source-check a press release before publishing, researchers coding argumentative structure in persuasive writing, and PR or comms teams auditing their own draft statements for anything that could be challenged all currently do this manually — reading line by line and pulling out anything that sounds like an assertion of fact.
How the extraction reads an argument
Where a sentence bundles a claim together with an opinion — 'predictably, the report shows revenue fell 12 percent' — the extraction isolates the checkable part, the revenue figure, without also asserting the framing word 'predictably' as if it were a fact. POST /text/extract-claims returns each claim as a standalone statement, phrased close to the original wording so the extracted version can still be attributed accurately to the source text.
A brief note on claim versus opinion
The distinction between fact and opinion has been a working concern of argumentation theory and journalism ethics for a long time, well before automated tools existed to help with it, precisely because the two get blended constantly in persuasive writing — sometimes deliberately, to lend the weight of fact to a subjective judgment. Reading for that boundary consistently, across a large volume of text, is the specific job this endpoint does.
Where it fits into a verification or editorial pipeline
The call is asynchronous: submit an article or transcript, get a task_id immediately, and receive the extracted claims by signed webhook once processing finishes, or via a signed link held for 24 hours. Pricing runs per request plus a per-word rate, so a short press release costs a fraction of a long transcript, and a task that fails after its retries is never charged — you only pay for claims actually delivered.
Technical questions
How does the claim extraction API work?
Send text to POST /text/extract-claims, receive a task_id immediately, and get the list of extracted claims by webhook or a signed link once the task completes.
How is a claim different from an opinion in this context?
A claim asserts something specific enough to be checked against evidence, like a statistic or an event; an opinion expresses a judgment that can't be verified the same way, and the endpoint is built to separate the two rather than extract every sentence indiscriminately.
What does claim extraction cost?
It's $0.003 per request plus $0.0135 per 1,000 words of input, and billing applies only to tasks that complete — a failed task after retries is never charged.
Can I run this on a large batch of articles at once?
Yes, each document is submitted as an independent asynchronous task, so you can process many articles or transcripts in parallel and collect results as each webhook arrives.