ACCEDI  login to app
Compliance

Elaborazione documenti GDPR

Server UE, auto-delete 30 min, DPA su richiesta. Per aziende europee.

Leggi la guida compliance →
API v1

Documentazione API myocr.app

Una semplice REST API per trasformare PDF e immagini in Excel pulito e strutturato. Ti autentichi con un header, invii un file e ricevi un foglio di calcolo.

Panoramica

L'API di myocr.app converte file documentali (PDF, JPG, PNG) in Excel strutturato, CSV, testo o JSON. Invii un file e il nome di un modello; eseguiamo OCR e analisi del layout e restituiamo un risultato pulito.

Ogni richiesta è autenticata con una API key passata nell'header X-API-Key. Le risposte usano un envelope JSON prevedibile e ogni chiamata restituisce un request_id utile per supporto e debug.

Usa l'endpoint sincrono per file piccoli che ti servono subito, e l'endpoint asincrono dei job (con webhook opzionale) per file grandi o volumi elevati.

Base URL: https://api.myocr.app Autenticazione: X-API-Key

Autenticazione

Autentica ogni richiesta con l'header X-API-Key. Crea e gestisci le chiavi dalla dashboard su /account/api. Per emettere una chiave è richiesta una carta di pagamento verificata (anti-abuso).

Esistono due tipi di chiave: le chiavi di test (prefisso sk_test_) girano sulla stessa pipeline senza consumare quota a pagamento dove applicabile, e le chiavi live (prefisso sk_live_) per la produzione. Tieni le chiavi segrete e lato server — non includerle mai nel codice client.

Gli endpoint di gestione chiavi (/v1/keys) usano la sessione web del tuo login, non la API key.

curl https://api.myocr.app/v1/status \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx"
from myocr_client import MyOCRClient

client = MyOCRClient(api_key="sk_live_xxxxxxxxxxxx")
print(client.status())
const res = await fetch("https://api.myocr.app/v1/status", {
  headers: { "X-API-Key": "sk_live_xxxxxxxxxxxx" }
});
console.log(await res.json());

Quickstart

Converti il tuo primo documento in meno di un minuto. Ottieni una chiave dalla dashboard, poi invia una richiesta multipart con il file e il modello desiderato.

L'esempio qui sotto converte qualsiasi PDF o immagine con tabelle in un foglio .xlsx e lo salva in out.xlsx.

curl -X POST https://api.myocr.app/v1/convert \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "file=@invoice.pdf" \
  -F "model=tables" \
  -o out.xlsx
from myocr_client import MyOCRClient

client = MyOCRClient(api_key="sk_live_xxxxxxxxxxxx")
result = client.convert("invoice.pdf", model="tables")
result.save("out.xlsx")
import fs from "node:fs";

const form = new FormData();
form.append("file", new Blob([fs.readFileSync("invoice.pdf")]), "invoice.pdf");
form.append("model", "tables");

const res = await fetch("https://api.myocr.app/v1/convert", {
  method: "POST",
  headers: { "X-API-Key": "sk_live_xxxxxxxxxxxx" },
  body: form,
});
fs.writeFileSync("out.xlsx", Buffer.from(await res.arrayBuffer()));

Conversione sincrona

Metodo: POST /v1/convert Auth richiesta: Rate limit: 60/min

POST /v1/convert accetta un singolo file (max 5 MB, max 10 pagine) e restituisce direttamente il file risultato nel corpo della risposta — un .xlsx di default, oppure testo/JSON/CSV se imposti il parametro output.

È l'endpoint migliore quando ti serve la risposta immediata. Per file più grandi o batch, usa i job asincroni.

Parametri

NomeTipoObbligatorioDescrizione
filefileThe document to convert (PDF, JPG, PNG). Multipart field.
modelstringOne of: tables, text, invoice, receipt, bank_statement, business_card.
outputstringNoxlsx (default), txt, json or csv.

Job asincroni

Metodo: POST /v1/jobs Auth richiesta: Rate limit: 120/min

Per file fino a 50 MB (e PDF fino a 500 pagine) o throughput più alto, crea un job con POST /v1/jobs. La chiamata restituisce subito un request_id; il file viene elaborato in background. PDF oltre il cap pagine vengono rifiutati subito con TOO_MANY_PAGES — dividi il documento.

Interroga GET /v1/jobs/{request_id} per lo stato (pending → processing → done/failed), poi scarica il risultato da GET /v1/jobs/{request_id}/result. Fornisci un webhook_url per essere notificato automaticamente a fine job, senza polling.

NomeTipoObbligatorioDescrizione
filefileDocument up to 50 MB.
modelstringConversion model (see Models).
webhook_urlstringNoHTTPS URL notified (signed) when the job finishes.
# 1. create the job
curl -X POST https://api.myocr.app/v1/jobs \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "file=@statement.pdf" -F "model=bank_statement"
# → {"success": true, "data": {"request_id": "abcd1234"}}

# 2. poll status, then download the result
curl https://api.myocr.app/v1/jobs/abcd1234 -H "X-API-Key: sk_live_xxxxxxxxxxxx"
curl https://api.myocr.app/v1/jobs/abcd1234/result -H "X-API-Key: sk_live_xxxxxxxxxxxx" -o out.xlsx
job = client.create_job("statement.pdf", model="bank_statement")
job.wait()                     # polls with backoff until done
job.result().save("out.xlsx")

Conversione batch

Metodo: POST /v1/batch Auth richiesta: Rate limit: 30/min

POST /v1/batch accetta 1–20 file in un'unica richiesta multipart, tutti elaborati con lo stesso modello. Ogni file è riportato in modo indipendente; i fallimenti per singolo file vengono restituiti in un array errors senza far fallire l'intero batch.

curl -X POST https://api.myocr.app/v1/batch \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "files=@a.pdf" -F "files=@b.pdf" -F "files=@c.jpg" \
  -F "model=invoice"

Modelli

Passa uno di questi valori model. tables e text girano sul nostro motore OCR; i modelli specializzati restituiscono campi specifici del dominio.

ModelloCosa estrae
tablesQualsiasi documento con tabelle → un foglio per tabella, layout preservato. Il default tuttofare.
textEstrazione completa del testo (OCR) da qualsiasi documento. Restituisce sempre txt.
invoiceCampi fattura: fornitore, data, totali, IVA e righe di dettaglio.
receiptCampi scontrino: esercente, data, totale, imposta e voci — ideale per le note spese.
bank_statementRighe dell'estratto conto: data, descrizione, dare, avere e saldo progressivo. Include la verifica automatica dei saldi (quadratura).
business_cardCampi contatto dai biglietti da visita: nome, azienda, ruolo, email, telefono.

Formati di output

Imposta il parametro output per scegliere il formato della risposta: xlsx (default, foglio strutturato), txt (testo semplice), json (campi estratti come JSON) o csv. Il modello text restituisce sempre txt.

Per model=bank_statement puoi impostare output anche su csv_quickbooks (CSV a 4 colonne per l'import bancario), csv_xero (template di import Xero) o ofx (file OFX standard per la maggior parte dei gestionali). Con output=json la risposta include anche un oggetto reconciliation: saldi iniziale/finale, totale accrediti e addebiti, la differenza calcolata e ok=true quando le transazioni estratte quadrano con i saldi del documento.

Risposte e header

Le risposte JSON seguono un envelope fisso: un booleano success, un oggetto data (oppure un oggetto error) e un request_id. Le risposte file restituiscono il binario direttamente con il Content-Type appropriato.

Ogni risposta include l'header X-MyOCR-Request-Id. Le risposte file includono anche X-MyOCR-Pages-Used (pagine fatturate) e X-MyOCR-Model (il modello usato).

{
  "success": true,
  "data": { "request_id": "abcd1234" },
  "request_id": "abcd1234"
}

Errori

Gli errori restituiscono success: false con un error.code e un error.message leggibile, più il request_id. Usa il code (stabile) per i rami logici, il message (può cambiare) per le persone.

CodiceHTTPSignificato
MISSING_API_KEY401Nessun header X-API-Key inviato.
INVALID_API_KEY401La API key è sconosciuta, revocata o malformata.
UNSUPPORTED_MODEL400Il valore model non è tra i modelli supportati.
UNSUPPORTED_FILE_TYPE400Estensione/tipo file non accettato (usa PDF, JPG, PNG).
MISSING_FILE400Nessun file incluso nella richiesta.
FILE_TOO_LARGE413Il file supera il limite di dimensione dell'endpoint.
TOO_MANY_PAGES413Il documento ha più pagine di quelle consentite dall'endpoint.
INVALID_WEBHOOK_URL400Il webhook_url manca o non è un URL HTTPS valido.
INSUFFICIENT_PAGES402Crediti pagina insufficienti per elaborare la richiesta.
QUOTA_EXCEEDED402Quota mensile pagine esaurita — restituisce un upgrade_url.
CARD_REQUIRED402Serve una carta di pagamento verificata prima di creare API key o usare la prova.
NO_ACTIVE_PLAN403Nessun piano attivo su questo account — abbonati a un piano per usare l'API.
SPEND_CAP_REACHED402Raggiunto il tetto di spesa mensile — alza il tetto o passa a un piano superiore.
NOT_READY409Il job non è ancora finito; il risultato non è disponibile.
NOT_FOUND404Il job o la risorsa richiesta non esiste.
OCR_ERROR502Il motore OCR a monte non è riuscito a elaborare il documento.
STORAGE_ERROR502Lo storage temporaneo (upload/risultato) è fallito — si può ritentare.
SERVICE_NOT_READY503Un servizio richiesto non è ancora configurato/abilitato.
INTERNAL_ERROR500Errore server inatteso — riprova, poi contatta il supporto con il request_id.

Rate limit e quota

I rate limit sono applicati per API key (non per IP), così i client dietro un proxy condiviso non condividono il limite: /v1/convert 60 req/min, /v1/jobs 120 req/min, /v1/batch 30 req/min.

Fatturazione per pagina, non per chiamata. Piani: Free 10 pagine totali (una-tantum, carta richiesta), Starter €29/mese (2.500), Pro €99/mese (10.000), Scale €190/mese (20.000). Il servizio non si interrompe mai: a pagine del mese esaurite ti avvisiamo via email e addebitiamo un pacchetto extra al costo-pagina del tuo piano — Starter 500 a €0,0116, Pro 2.000 a €0,0099, Scale 4.000 a €0,0095 — fino a un tetto mensile di ricarica che imposti tu (e puoi disattivare). Raggiunto il tetto l'API restituisce 402 con un upgrade_url. Controlla l'uso con GET /v1/usage.

Webhook

Quando passi un webhook_url a /v1/jobs, inviamo una POST con payload JSON a quell'URL quando il job raggiunge done o failed. Le consegne vengono ritentate con backoff in caso di errore.

Ogni consegna è firmata: verifica l'header della firma con il tuo webhook signing secret (mostrato in dashboard) per confermare che la richiesta arrivi davvero da myocr.app. L'SDK Python include l'helper verify_webhook_signature.

SDK

L'SDK Python ufficiale (myocr-client) avvolge ogni endpoint con metodi ed eccezioni tipizzati, polling automatico Job.wait() con backoff e verifica della firma webhook.

Preferisci l'HTTP grezzo? Va bene qualsiasi client HTTP — vedi gli esempi cURL e Node in questa guida e la reference interattiva completa.

pip install myocr-client

Spec OpenAPI

Scarica spec OpenAPI

OpenAPI 3.1 (openapi.json) · Postman · Insomnia · code generators

Scarica spec OpenAPI

FAQ

Quali tipi e dimensioni di file sono supportati?

PDF, JPG e PNG. /v1/convert sincrono consente fino a 5 MB e 10 pagine; /v1/jobs asincrono gestisce file fino a 50 MB.

Come viene fatturato l'uso?

Per pagina elaborata, conteggiata su tutti gli endpoint e azzerata ogni mese. L'header X-MyOCR-Pages-Used indica quante pagine ha fatturato ogni chiamata.

Che differenza c'è tra chiavi di test e live?

Le chiavi di test (sk_test_) servono per sviluppo e test di integrazione; le chiavi live (sk_live_) per il traffico di produzione. Entrambe si autenticano allo stesso modo.

Meglio sincrono o asincrono?

Usa /v1/convert per file piccoli che ti servono subito. Usa /v1/jobs (eventualmente con webhook) per file grandi, batch o elaborazione in background.

Dove vedo ogni parametro e schema?

Ogni endpoint, parametro e risposta è documentato nelle sezioni qui sopra. Per uso automatico, scarica lo spec OpenAPI (openapi.json) e importalo in Postman, Insomnia o un generatore di client.

Produttività

100 fatture in 10 minuti

Tips e template per elaborazioni in batch. Guida gratuita.

Leggi la guida →