Numéro de compte
account_numberRègle appliquéeUne vraie valeur l'emporte sur une valeur vide. La demande a laissé la case vide, donc elle n'avait rien à fournir et on ne lui a pas demandé de deviner.
Avec la preuve jointe. Envoyez un fichier et la forme que vous voulez recevoir. Chaque champ revient cité à la page d'où il vient, ou déclaré absent. Jamais deviné.
Un seul appel. Un fichier, la forme voulue, et un interrupteur pour la preuve. Ce qui revient, c'est du JSON exactement dans cette forme.
Une URL, ou l'identifiant d'un fichier déjà téléversé. Puis un schéma JSON, ou le nom d'une action enregistrée pour que la requête tienne en deux champs. Jusqu'à 100 documents tiennent dans un seul appel.
Les pages nativement numériques sont lues directement. Les numérisations passent par la ROC. Les enregistrements sont transcrits. Vous n'appelez jamais parse vous-même. Extract le fait au passage.
Marquez un champ comme montant, date, téléphone ou adresse. 1 234,56 $ revient en 1234.56. Une date revient au format ISO. Une date que personne ne peut trancher, comme 03/04/2026, revient telle qu'écrite au lieu d'être devinée dans le mauvais mois.
Activez les citations et chaque valeur pointe vers sa page et le cadre sur cette page, ou vers un repère temporel dans un enregistrement. Un champ sans preuve revient à null, avec une entrée qui le dit.
L'appel attend jusqu'à 120 secondes. Une exécution plus longue revient en 202 avec un identifiant, jamais en expiration. Interrogez-la, ou laissez un webhook vous apporter le résultat.
Vous choisissez les champs. Extract les remplit, peu importe l'allure du fichier à son arrivée.
Une citation porte le fichier, la page et le cadre sur cette page. La valeur qui vous fait douter se vérifie en un clic. Vérifiée d'un coup d'œil. Jamais inventée.
Champs extraits
const run = await client.extract({
file: { url: "https://example.com/invoice-4471.pdf" },
schema: invoiceSchema,
citations: true, // off by default; ask for the evidence
});
// Every field is cited, or declared absent. Nothing in between.
for (const [field, cited] of Object.entries(run.output?.citations ?? {})) {
for (const c of cited) {
if (c.notFound) console.log(field, "not in the document");
else console.log(field, c.page, c.bbox, c.text, c.confidence);
}
}La plupart des extractions échouent en silence, avec un chiffre plausible dans le mauvais champ. Voici les endroits où Extract est conçu pour échouer bruyamment.
Trois façons de dire ce que vous voulez recevoir. C'est une seule rampe, pas trois produits.
Envoyez des fichiers liés avec unit across_documents. Chacun est extrait séparément, puis les résultats fusionnent en un dossier selon des règles fixes. Une valeur est prise entière, avec sa citation, dans un seul document.
Règle appliquéeUne vraie valeur l'emporte sur une valeur vide. La demande a laissé la case vide, donc elle n'avait rien à fournir et on ne lui a pas demandé de deviner.
Règle appliquéeLa citation la plus solide l'emporte. Le talon de paie a désigné la ligne d'où vient le montant. La demande n'a fait qu'affirmer un chiffre.
Règle appliquéeLes deux citaient l'adresse aussi clairement, donc l'égalité est allée au fichier envoyé en premier. L'ordre de téléversement a tranché celui-ci.
Jamais mélangé, jamais moyenné, et les listes ne sont jamais fusionnées entre fichiers. Même entrée, même réponse, chaque fois. Comme l'égalité va au fichier envoyé en premier, l'ordre d'envoi est un choix. Mettez en premier le document qui doit gagner.
Rien ne s'accumule. Rien n'expire en route.
Les valeurs qu'Extract tire sont ce dont l'étape suivante a besoin. Un seul pipeline CloudRaker, aucun outil cousu ensemble.
Mêmes champs, même preuve. Commencez dans l'un, passez à l'autre.
Envoyez le fichier et le schéma avec les citations activées. Le JSON revient exactement dans cette forme, avec la preuve indexée par champ.
import { CloudRakerClient } from "@cloudraker/api";
const client = new CloudRakerClient({ token: "YOUR_API_KEY" });
const run = await client.extract({
file: { url: "https://example.com/invoice-4471.pdf" },
citations: true, // off by default; ask for the evidence
schema: {
type: "object",
properties: {
vendor: { type: ["string", "null"] },
due_date: { type: ["string", "null"], format: "date" },
total: { type: ["number", "null"], "x-cr-kind": "currency" },
po_number: { type: ["string", "null"] },
},
},
});
if (run.status === "processed") {
console.log(run.output?.value);
// { vendor: "Northwind Supply Co.", due_date: "2026-11-14",
// total: 14600, po_number: null }
console.log(run.output?.citations?.po_number);
// [{ fileId: "...", notFound: true }]
}from cloudraker import CloudRaker
client = CloudRaker(token="YOUR_API_KEY")
run = client.extract(
file={"url": "https://example.com/invoice-4471.pdf"},
citations=True, # off by default; ask for the evidence
schema={
"type": "object",
"properties": {
"vendor": {"type": ["string", "null"]},
"due_date": {"type": ["string", "null"], "format": "date"},
"total": {"type": ["number", "null"], "x-cr-kind": "currency"},
"po_number": {"type": ["string", "null"]},
},
},
)
if run.status == "processed":
print(run.output.value)
# {"vendor": "Northwind Supply Co.", "due_date": "2026-11-14",
# "total": 14600.0, "po_number": None}
print(run.output.citations["po_number"])
# [{"fileId": "...", "notFound": True}]La même fondation sous chacune. Choisissez la porte qui convient au travail.
Pointez Extract vers votre pire document avec les citations activées. Lisez ce qui revient, puis ouvrez la page derrière toute valeur qui vous fait douter.