Documentazione

Documentazione per sviluppatori

Tutti gli strumenti di raiai.cloud usano la stessa porta d’ingresso: una sola chiamata HTTP che riceve il nome dello strumento, i file e le opzioni, e restituisce il file lavorato. È la stessa che usa il sito quando premi “Elabora”: non c’è un’API separata, né una versione “ridotta” per gli sviluppatori.

POST https://raiai.cloud/wp-json/raiai/v1/process

Non serve una chiave, non serve un account, non c’è una registrazione da fare. Quello che vedi qui sotto è stato provato davvero il 28 settembre 2026, con i comandi che trovi scritti nel capitolo delle prove: se un comando è qui, ha risposto 200 e ha prodotto il file che diciamo.

Provalo adesso

Serve curl (è già su Linux e macOS; su Windows c’è in PowerShell). Questo comando unisce due PDF e salva il risultato in unito.pdf:

curl -o unito.pdf -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=merge" \
  -F "files[]=@primo.pdf" \
  -F "files[]=@secondo.pdf"

La risposta è il file, non un JSON: curl lo scrive direttamente su unito.pdf. Il nome che il server suggerisce è nell’intestazione Content-Disposition (per l’unione: raiai-merged.pdf).

Come è fatta la richiesta

  • Metodo: POST obbligatorio. Una GET sull’indirizzo risponde 404, perché non c’è nulla da leggere.
  • Tipo: multipart/form-data. È lo stesso tipo di un modulo con allegati: in curl si usa -F, in Python files= di requests, in PHP curl_setopt(CURLOPT_POSTFIELDS, $dati) con un array.
  • tool: il nome del motore che deve lavorare il file. La tabella completa è in fondo a questa pagina.
  • files[]: uno o più file. Si ripete il campo per ogni file, nell’ordine in cui devono essere usati (per l’unione l’ordine conta).
  • Opzioni: si aggiungono come campi normali, con il nome che trovi nella tabella (pages, level, rotation…). Se non le metti, si usano i valori predefiniti.
  • Codici QR e codici a barre (qr, barcode) sono gli unici due strumenti che non hanno bisogno di un file: il contenuto arriva dal campo text.

Le prove fatte, con i risultati veri

Questi comandi sono stati eseguiti uno per uno il 28 settembre 2026 contro il sito in produzione. Accanto c’è quello che è tornato indietro.

1. Unire due PDF (merge)

curl -o unito.pdf -D intestazioni.txt -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=merge" -F "files[]=@prova-uno.pdf" -F "files[]=@prova-due.pdf"

Risultato: HTTP 200, content-type: application/pdf, content-disposition: attachment; filename="raiai-merged.pdf", 1.088 byte. Aprendo il file: 2 pagine, con il testo di entrambi i documenti di partenza nell’ordine giusto.

2. Generare un codice QR (qr)

curl -o codice.png -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=qr" -F "text=https://raiai.cloud" -F "size=512" -F "format=png"

Risultato: HTTP 200, image/png, immagine di 522×522 pixel in scala di grigi, 538 byte. Il file esce un po’ più grande del valore chiesto perché il codice include il margine bianco di silenzio attorno (con size=200 escono 209 pixel).

Con -F "format=svg" torna un SVG vettoriale (1.269 byte) e con -F "format=pdf" un PDF di una pagina (1.413 byte): utili per la stampa.

3. Comprimere un PDF (compress)

curl -o compresso.pdf -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=compress" -F "level=ebook" -F "files[]=@prova-uno.pdf"

Risultato: HTTP 200, application/pdf, 2.703 byte, una pagina. Il campo level accetta screen (compressione media), ebook (massima compressione), printer (alta qualità) e prepress (qualità massima).

4. PDF in immagini (pdf2img)

curl -o pagina.png -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=pdf2img" -F "format=png" -F "dpi=100" -F "files[]=@prova-uno.pdf"

Risultato: HTTP 200, image/png, 827×1170 pixel. format accetta jpeg o png; dpi decide la risoluzione (più alto = file più pesante).

5. Due immagini in un PDF (img2pdf)

curl -o foto.pdf -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=img2pdf" -F "files[]=@foto-uno.png" -F "files[]=@foto-due.png"

Risultato: HTTP 200, application/pdf, 2 pagine. È lo stesso motore che sta dietro Scansione in PDF.

6. Codice a barre (barcode)

curl -o ean13.png -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=barcode" -F "text=800123456789" -F "format=ean13"

Risultato: HTTP 200, image/png, 523×223 pixel. format accetta ean13, ean8, code128, code39, itf, upca, gs1_128.

7. Proteggere un PDF con password (protect)

curl -o protetto.pdf -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=protect" -F "password=prova1234" -F "files[]=@prova-uno.pdf"

Risultato: HTTP 200, application/pdf. Il file prodotto contiene un blocco di cifratura e si apre con la password indicata.

8. Word in PDF con LibreOffice (office2pdf)

curl -o documento.pdf -X POST "https://raiai.cloud/wp-json/raiai/v1/process" \
  -F "tool=office2pdf" -F "files[]=@relazione.docx"

Risultato (prova fatta con un file di testo, per non aspettare la conversione di un documento vero): HTTP 200, application/pdf, 14.842 byte. Accetta doc, docx, odt, rtf, txt, xls, xlsx, ods, csv, ppt, pptx, odp, html. Lo stesso motore sta dietro PDF in Word, PDF in Excel e PDF in PowerPoint.

Altri strumenti provati nello stesso giro

  • split con pages=1 → 200, PDF di una pagina.
  • rotate con rotation=90 → 200, PDF ruotato.
  • watermark con text=BOZZA → 200, filigrana applicata.
  • pdf_info (Referto PDF) → 200, PDF con il referto del file.
  • metadata con text=Documento di prova → 200, metadati ripuliti.
  • pdf2txt → 200, text/plain, testo estratto.
  • img_compress con quality=60 su una PNG → 200, immagine compressa.
  • chiedi con una domanda su un PDF → 200 in 0,5 secondi, PDF con i passaggi trovati.
  • translate con target=inglese su un PDF di 2 pagine → 200 in 1 minuto e 26 secondi. È lo strumento più lento del sito, perché il modello linguistico gira sulla nostra macchina in CPU: metti un timeout generoso, almeno 5 minuti.

La risposta quando va bene

Non è un JSON: è il file. Il corpo della risposta sono i byte del risultato, e le informazioni utili stanno nelle intestazioni:

HTTP/2 200
content-type: application/pdf
content-disposition: attachment; filename="raiai-merged.pdf"
content-length: 1088
cache-control: no-cache, must-revalidate, max-age=0, no-store, private
x-robots-tag: noindex

Il content-type cambia con il risultato: application/pdf, image/png, image/svg+xml, text/plain, application/zip (per gli strumenti che producono più file). Il nome del file è in content-disposition: leggilo se vuoi salvare con il nome giusto.

La risposta quando va male

In caso di errore la risposta è un JSON con status e message. Questi sono gli errori che abbiamo visto davvero, non quelli che immaginiamo:

Codice Cosa succede Risposta
400 Non hai allegato nessun file {"status":"error","message":"Nessun file ricevuto"}
400 Manca il campo tool {"status":"error","message":"Parametro tool mancante"}
400 Formato non ammesso per quello strumento Formato .txt non ammesso per questo strumento. Ammessi: …
400 Il nome del motore non esiste {"status":"error","message":"Tool sconosciuto: non_esiste"}
400 Il file non è leggibile dal motore {"status":"error","message":"Stream has ended unexpectedly"}
400 Il PDF richiede una password per aprirsi {"status":"error","message":"Sblocco fallito: File has not been decrypted"}
500 Guasto del nostro server (il caso raro) {"status":"error","message":"…"}

Dal 28 settembre 2026 la distinzione è netta: 400 vuol dire «la richiesta non va bene» (manca un parametro, il formato è sbagliato, il file non si legge, il motore non esiste, il PDF è protetto da password), 500 vuol dire «si è rotto qualcosa da noi» e in quel caso conviene riprovare. Tutti i casi della tabella che prima rispondevano 500 per colpa della richiesta ora rispondono 400, misurati uno per uno.

Due cose da sapere sugli errori. La prima: i codici non sono sempre precisi. Se sbagli il nome dello strumento o il formato del file, il motore risponde 500 anche se la colpa è della richiesta: guarda sempre il campo message, non solo il numero. La seconda: anche gli errori arrivano subito, senza file parziali — quello che il motore aveva prodotto a metà viene cancellato insieme alla cartella di lavoro.

Limiti veri della chiamata

  • Dimensione: 512 MB per richiesta (somma di tutti i file allegati). È il tetto configurato sul server: sopra quella soglia la richiesta viene rifiutata prima di arrivare al motore.
  • Tempo: 300 secondi per la richiesta normale. Gli strumenti che girano su Python hanno un tetto più alto (fino a 15 minuti) per non interrompere le traduzioni. Se chiami translate, metti un timeout di almeno 5 minuti.
  • Nessuna quota: oggi non ci sono chiavi, non ci sono contatori e non c’è un numero massimo di chiamate. Non significa che si possa martellare il servizio: le stesse macchine servono il sito ai visitatori.
  • Un lavoro per richiesta: per elaborare 100 file fai 100 chiamate (o usa una chiamata per ogni gruppo di file che vuoi unire insieme).

Chiamarla da un programma

Python

import requests

with open("primo.pdf", "rb") as a, open("secondo.pdf", "rb") as b:
    risposta = requests.post(
        "https://raiai.cloud/wp-json/raiai/v1/process",
        data={"tool": "merge"},
        files=[("files[]", ("primo.pdf", a, "application/pdf")),
               ("files[]", ("secondo.pdf", b, "application/pdf"))],
        timeout=300,
    )
risposta.raise_for_status()
open("unito.pdf", "wb").write(risposta.content)

PHP

$ch = curl_init("https://raiai.cloud/wp-json/raiai/v1/process");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    "tool"    => "compress",
    "level"   => "ebook",
    "files[]" => new CURLFile("/percorso/documento.pdf"),
]);
$pdf = curl_exec($ch);
file_put_contents("/percorso/compresso.pdf", $pdf);

Dentro una pagina web (JavaScript)

Una chiamata fetch() verso questo indirizzo da un altro sito non funziona: la risposta dell’elaborazione non porta l’intestazione Access-Control-Allow-Origin, quindi il browser blocca la lettura del file (la verifica preliminare passa, la risposta no). Non è una svista nascosta: la risposta viene inviata direttamente, saltando il giro normale di WordPress, e quell’intestazione non ci finisce.

Se ti serve dall’interfaccia di un tuo sito, fai passare la chiamata da un tuo programma sul server (PHP, Python, Node): il tuo script parla con raiai.cloud, il browser parla con il tuo script. Così funziona senza intoppi.

Elenco degli strumenti: il nome da usare in tool

Attenzione a non confondere due nomi diversi: l’indirizzo pubblico della pagina web (/strumenti/unisci-pdf/) e il nome del motore da mettere nel campo tool (merge). Nella tabella ci sono entrambi.

Le opzioni crescono di settimana in settimana. Nella colonna “Opzioni” qui sotto c’è il minimo che serve per iniziare; l’elenco completo e aggiornato è il modulo della pagina web di ogni strumento (per esempio /strumenti/dividi-pdf/ per Dividi PDF): i nomi dei campi che vedi lì sono gli stessi da usare nella chiamata.

I 50 strumenti pubblici sono serviti da 47 motori: alcuni motori reggono più indirizzi — per esempio office2pdf sta dietro Word in PDF, PowerPoint in PDF ed Excel in PDF.

Nome Campo tool File Opzioni Pagina
Unisci PDF merge più file — unisci-pdf
Dividi PDF split un file pages dividi-pdf
Comprimi PDF compress un file level comprimi-pdf
Ruota PDF rotate un file rotation, pages ruota-pdf
Organizza PDF organize un file pages organizza-pdf
Numero di pagine page_numbers un file — numero-di-pagine
Filigrana watermark un file text filigrana
Firma PDF sign un file text firma-pdf
Proteggi PDF protect un file password proteggi-pdf
Sblocca PDF unlock un file — (vedi nota) sblocca-pdf
Ripara PDF repair un file — ripara-pdf
Ritaglia PDF crop un file crop ritaglia-pdf
Censura PDF redact un file redact censura-pdf
Modifica PDF edit un file text modifica-pdf
PDF in PDF/A pdfa un file — pdf-in-pdf-a
Togli pagine vuote blank_pages un file — togli-pagine-vuote
PDF per il web linearize un file — pdf-per-il-web
Estrai note annotations un file — estrai-note
Pagine per foglio nup un file pages pagine-per-foglio
Cambia formato pagesize un file format cambia-formato
Pulisci metadati metadata un file text pulisci-metadati
Word in PDF office2pdf un file — word-in-pdf
PowerPoint in PDF office2pdf un file — powerpoint-in-pdf
Excel in PDF office2pdf un file — excel-in-pdf
PDF in Word pdf2word un file — pdf-in-word
PDF in Excel pdf2excel un file — pdf-in-excel
PDF in PowerPoint pdf2ppt un file — pdf-in-powerpoint
HTML in PDF html2pdf un file — html-in-pdf
PDF in JPG pdf2img un file format, dpi pdf-in-jpg
JPG in PDF img2pdf più file — jpg-in-pdf
Scansione in PDF img2pdf più file — scansione-in-pdf
PDF in Testo pdf2txt un file — pdf-in-testo
PDF in Markdown markdown un file — pdf-in-markdown
Estrai immagini extract_images un file — estrai-immagini
OCR PDF ocr un file lang ocr-pdf
Confronta PDF compare due file — confronta-pdf
Riassumi PDF summarize un file size (quante frasi) riassumi-pdf
Traduci PDF translate un file target traduci-pdf
Chiedi al PDF chiedi un file text (la domanda) chiedi-al-pdf
Referto PDF pdf_info un file — referto-pdf
Codice QR qr nessun file text, size, format codice-qr
Codice a barre barcode nessun file text, format codice-a-barre
Comprimi immagine img_compress un file quality comprimi-immagine
Ridimensiona immagine img_resize un file size ridimensiona-immagine
Converti immagine img_convert un file format converti-immagine
Ruota immagine img_rotate un file rotation ruota-immagine
Ritaglia immagine img_crop un file crop ritaglia-immagine
Filigrana immagine img_watermark un file text filigrana-immagine
Bianco e nero img_grayscale un file — bianco-e-nero
Miniatura img_thumbnail un file size miniatura

Due cose da sapere prima di appoggiarti a questo servizio

  • Il servizio è aperto e senza chiave. Oggi chiunque può chiamarlo: per noi è una scelta, perché rende utile l’API a chi vuole solo provarla. Se ti serve per un volume importante — migliaia di file al giorno — scrivici prima: così sappiamo cosa aspettarci e non ci troviamo il sito lento per i visitatori.
  • Le funzioni cambiano in fretta. Questo sito cresce di settimane in settimane: se un campo o un comportamento non corrisponde a quello che leggi qui, la colpa è del documento che è invecchiato, non tua. Scrivicelo e lo aggiorniamo.

Un’ultima nota onesta su unlock: Sblocca PDF funziona sui PDF protetti da permessi (niente stampa, niente copia), mentre su un file che chiede una password per aprirsi restituisce un errore, perché il motore non usa il campo password. Lo sistemeremo; fino ad allora, non contarci in un automatismo.

Serve aiuto?

Se ti serve una mano per far funzionare una chiamata, o vuoi uno strumento che non c’è, scrivi a info@rairaiai.com raccontando cosa stai costruendo e cosa ti aspetti. Le richieste degli sviluppatori sono quelle che pesiamo di più quando decidiamo cosa fare dopo.