DocumentationOuvrir Moon AI
Parcourir la documentation

OCR (texte d’un document)

Référence de POST /v1/ocr : extraire le texte d’un PDF ou d’une image avec moon-ocr-1, qui tourne sur nos serveurs en France sans rien envoyer à un fournisseur.

Sur cette page

POST /v1/ocr renvoie le texte d’un PDF ou d’une image, page par page, en Markdown. Une page qui a déjà une couche de texte (un PDF exporté depuis un traitement de texte) est lue directement ; une page scannée ou une photo est lue par reconnaissance de caractères.

HTTP
POST https://api.realmoon.ai/v1/ocr
  • Authentification : clé sk-moon-… avec la portée inference (voir Authentification).
  • Corps : multipart/form-data (avec l’en-tête Content-Length) ou JSON, dans la forme de l’API OCR de Mistral.
  • Réponse : le texte de chaque page lue.

Le seul modèle est moon-ocr-1. Il tourne sur nos serveurs en France : le document n’est envoyé à aucun fournisseur et n’est pas gardé une fois la réponse donnée.

ParamètresLien vers la section Paramètres

En multipartLien vers la section En multipart

ChampTypeObligatoireDescription
file (ou document)fichierouiLe PDF ou l’image (PNG, JPEG, WebP, GIF), 30 Mo au plus. Un seul fichier.
modelchaînenonmoon-ocr-1 (par défaut).
pageschaînenonLes pages à lire, numérotées à partir de 0 et séparées par des virgules : 0,2,5.

En JSONLien vers la section En JSON

ParamètreTypeObligatoireDescription
documentobjet ou chaîneoui{"type": "document_url", "document_url": "data:application/pdf;base64,..."} ou {"type": "image_url", "image_url": "data:image/png;base64,..."}. Une chaîne seule (URL data: ou base64) est aussi acceptée.
modelchaînenonmoon-ocr-1 (par défaut).
pagestableau d’entiersnonLes pages à lire, à partir de 0.
include_image_base64booléennonSeule la valeur false est acceptée : les images des pages ne sont pas renvoyées.
idchaînenonAccepté, sans effet.

En JSON, tout autre paramètre est refusé avec 400 unknown_parameter.

PagesLien vers la section Pages

  • Sans pages, tout le document est lu, jusqu’à 50 pages. Au-delà, l’API répond 400 too_many_pages : choisissez les pages, et faites plusieurs requêtes pour un long document.
  • Une image a une seule page, la page 0.
  • Une page déjà demandée n’est lue qu’une fois.

ExempleLien vers la section Exemple

Les SDK d’OpenAI n’ont pas de méthode pour ce point d’accès : appelez-le en HTTP.

cURL
curl https://api.realmoon.ai/v1/ocr \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -F model=moon-ocr-1 \
  -F file=@facture.pdf \
  -F pages=0,1
Python
import os
import requests

with open("facture.pdf", "rb") as document:
    response = requests.post(
        "https://api.realmoon.ai/v1/ocr",
        headers={"Authorization": f"Bearer {os.environ['MOONAI_API_KEY']}"},
        data={"model": "moon-ocr-1", "pages": "0,1"},
        files={"file": ("facture.pdf", document, "application/pdf")},
        timeout=100,
    )
response.raise_for_status()
for page in response.json()["pages"]:
    print(page["index"], page["source"])
    print(page["markdown"])
JavaScript
import fs from 'node:fs';

const form = new FormData();
form.append('model', 'moon-ocr-1');
form.append('pages', '0,1');
form.append('file', new Blob([fs.readFileSync('facture.pdf')], { type: 'application/pdf' }), 'facture.pdf');

const response = await fetch('https://api.realmoon.ai/v1/ocr', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.MOONAI_API_KEY}` },
  body: form,
});
const result = await response.json();
for (const page of result.pages) console.log(page.index, page.source, page.markdown);

Le même appel en JSON, avec le document en base64 :

Corps JSON
curl https://api.realmoon.ai/v1/ocr \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\": \"moon-ocr-1\", \"document\": {\"type\": \"document_url\", \"document_url\": \"data:application/pdf;base64,$(base64 -w0 facture.pdf)\"}, \"pages\": [0, 1]}"

RéponseLien vers la section Réponse

Réponse
{
  "model": "moon-ocr-1",
  "pages": [
    {
      "index": 0,
      "markdown": "# Facture n° 2026-118\n\nDate : 4 novembre 2026\n\n| Désignation | Montant |\n| --- | --- |\n| Prestation | 1 200,00 € |",
      "source": "text",
      "images": [],
      "dimensions": null
    },
    {
      "index": 1,
      "markdown": "Conditions de paiement : 30 jours.",
      "source": "ocr",
      "images": [],
      "dimensions": null
    }
  ],
  "usage_info": { "pages_processed": 2, "doc_size_bytes": 184320 },
  "usage": { "pages": 2, "pages_not_read": 0, "credits": 0 }
}

La valeur de credits est fictive.

ChampTypeDescription
modelchaîneToujours moon-ocr-1.
pages[].indexentierNuméro de la page, à partir de 0.
pages[].markdownchaîneLe texte de la page, en Markdown.
pages[].sourcechaînetext : lue dans la couche de texte du PDF. ocr : lue par reconnaissance de caractères.
pages[].images, pages[].dimensionstableau, nullToujours [] et null, gardés pour la compatibilité avec la forme de Mistral.
usage_info.pages_processed, usage_info.doc_size_bytesentierPages lues et taille du document en octets, comme chez Mistral.
usage.pagesentierPages lues et facturées.
usage.pages_not_readentierPages demandées que le temps de la requête n’a pas permis de lire. Elles ne sont ni renvoyées ni facturées.
usage.creditsentierCrédits facturés.
En-têteValeur
X-Moon-Hostingfr : document lu sur nos serveurs en France.
X-Moon-Blurnot_needed : le document ne quitte pas nos serveurs, Moon Blur n’est pas nécessaire.
X-Moon-Request-Id, X-Moon-Prompt-StorageComme pour toute requête.

CoûtsLien vers la section Coûts

Le prix est fixe par page lue ; il figure dans GET /v1/models?type=ocr (pricing.credits_per_unit, billing: flat) et dans l’onglet « Modèles » du portail. La requête retient le prix des pages demandées, puis ne facture que les pages réellement lues. Un document illisible ou une requête qui échoue ne coûte rien.

LimitesLien vers la section Limites

LimiteValeur
Taille du document30 Mo
Pages par requête50
Durée d’une requête85 secondes environ ; les pages non lues à temps ne sont ni renvoyées ni facturées
Requêtes en cours par workspace2

Le service de lecture est partagé : quand il est occupé par d’autres requêtes, l’API répond 429 too_many_concurrent ou 503 ocr_busy. Pour un gros document, envoyez quelques pages à la fois et lancez les requêtes l’une après l’autre.

ErreursLien vers la section Erreurs

HTTPcodeSignification
400missing_required_parameterFichier ou document absent.
400unknown_parameterParamètre inconnu (en JSON).
400unsupported_parameterinclude_image_base64 à true.
400url_not_supportedDocument donné par une adresse https://.
400unsupported_formatNi un PDF, ni une image PNG, JPEG, WebP ou GIF.
400invalid_imageImage illisible, ou de plus de 40 mégapixels.
400encrypted_documentPDF protégé par un mot de passe.
400invalid_documentPDF sans aucune page.
400too_many_pagesPlus de 50 pages sans pages.
400nullNuméro de page qui n’existe pas, page autre que 0 pour une image, document vide, base64 invalide (param le nomme).
403org_policyLes règles de votre organisation refusent l’API ou ce modèle.
404model_not_foundModèle autre que moon-ocr-1.
411length_requiredEnvoi multipart sans en-tête Content-Length.
413file_too_large, request_too_largeDocument de plus de 30 Mo.
422unreadable_documentDocument illisible ou trop lourd à lire.
429too_many_concurrentTrop de requêtes OCR en cours pour ce workspace, ou pour le service.
503ocr_busyService de lecture occupé : réessayez après Retry-After (10 secondes).
504ocr_timeoutLecture trop longue : envoyez moins de pages.

Les erreurs de clé, de solde et de plafonds sont dans Erreurs.

Voir aussiLien vers la section Voir aussi

  • Confidentialité : ce que Moon AI garde, et ne garde pas, d’un document.
  • Modèles : les champs max_pages et max_file_mb.

Moon AI

Moon AI en action

0:00

À découvrir

Captures de chat.realmoon.ai du 29 octobre 2026, avec des données fictives.

Moon AI

Vos préférences

Aucun suivi publicitaire.

Ce site ne dépose aucun cookie publicitaire ni cookie de mesure d’audience : notre serveur compte les visites sans cookie. Votre thème et la fermeture de l’information sur les cookies sont mémorisés sur cet appareil.

L’application Moon AI possède ses propres réglages de confidentialité.