Invia e monitora gli ordini di traduzione certificata di documenti in modo programmatico. Un'API REST su HTTPS, autenticata tramite token bearer e con risposta in formato JSON, con webhook firmati per ogni evento.
curl -X POST https://www.rapidtranslate.org/api/v1/orders \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "reference=APO-10432" \
-F "source_language=Spanish" \
-F "target_language=English (US)" \
-F "translation_type=certified" \
-F "files[]=@document.pdf"
→ {
"id": "9b1c2d3e-…",
"status": "pending",
"livemode": true
} L'API RapidTranslate consente alla tua applicazione di inviare documenti per la traduzione certificata, recuperare informazioni aggiornate sullo stato e sui prezzi e ricevere i file finiti, senza che il tuo team debba interagire con la nostra procedura di pagamento. È pensata per le aziende che effettuano ordini di traduzione per conto dei propri clienti.
Tutte le richieste vanno inviate a https://www.rapidtranslate.org/api/v1 tramite HTTPS. Le richieste e le risposte sono in formato JSON, ad eccezione della creazione dell'ordine, che prevede il caricamento di file come multipart/form-data. Tutti gli importi vengono restituiti come centesimi interi in USD, e tutti i timestamp sono espressi in UTC secondo lo standard ISO-8601.
Preferisci esplorare l'API prima di scrivere qualsiasi codice? La nostra raccolta Postman contiene tutti gli endpoint preconfigurati, con autenticazione, corpi di esempio e parametri di query inclusi.
apiKey a una chiave da Impostazioni aziendali → Chiavi API.baseUrl per il tuo ambiente — l'impostazione predefinita è "produzione".Autentica ogni richiesta utilizzando la tua chiave API segreta come token bearer e richiedi una risposta in formato JSON. Entrambe le intestazioni sono obbligatorie:
Autorizzazione: Bearer YOUR_API_KEY
Accept: application/json È possibile generare e aggiornare le chiavi nella dashboard alla voce Impostazioni aziendali → Chiavi API. Le chiavi vengono visualizzate una sola volta al momento della creazione e vengono memorizzate in forma hash: se si perde una chiave, è necessario aggiornarla. Ogni chiave appartiene a una modalità (Live o Sandbox) e presenta un insieme fisso di ambiti.
Ogni endpoint richiede una specifica funzionalità della chiave. Una chiave priva dell'ambito richiesto restituisce 403 ambito non consentito.
| Ambito di applicazione | Sovvenzioni |
|---|---|
ordini:scrivere | Creare e approvare gli ordini |
ordini:lettura | Recupera ed elenca gli ordini |
prezzo:leggi | Leggi il listino prezzi |
La modalità di prova è una proprietà della chiave, non del tuo account. Una chiave Sandbox opera in un ambiente completamente simulato; una chiave Live effettua ordini reali e fatturabili. Puoi utilizzare entrambe contemporaneamente.
Gli ordini in modalità sandbox utilizzano le stesse procedure di convalida, mappatura dei campi e prezzi reali, ma tralasciano l’archiviazione dei file, l’OCR e l’evasione dell’ordine. Al momento della creazione, un ordine in modalità sandbox percorre automaticamente il proprio ciclo di vita (in elaborazione → completato), attivando gli stessi webhook di un ordine effettivo e, infine, fornendo un documento di esempio statico.
Ogni risposta e ogni webhook contiene un modalità live Imposta questo flag in modo che la tua integrazione possa creare un ramo senza verificare la chiave:
livemode: true — ordine effettivo e fatturabilelivemode: false — sandbox / ordine di provaLe richieste sono soggette a un limite di frequenza per ogni organizzazione. La quota predefinita è 120 richieste al minuto. Se viene superato, restituisce 429 rate_limited; riprovare dopo una breve pausa. Se la vostra integrazione richiede un limite più alto, contattate support@rapidtranslate.org.
Ogni risposta riuscita racchiude il proprio payload in un dati chiave. Gli endpoint dell'elenco aggiungono un meta blocco con impaginazione.
{
"data": {
"id": "9b1c...-uuid",
"reference": "APO-10432",
"status": "processing",
"total": 11270,
"currency": "USD"
}
} {
"data": [ ... ],
"meta": {
"current_page": 1,
"per_page": 25,
"total": 134,
"last_page": 6
}
} Gli errori utilizzano i codici di stato HTTP standard e restituiscono un formato stabile e leggibile dal computer codice_errore insieme a un messaggio scritto a mano. Gli errori di convalida aggiungono un campo con chiave errori oggetto.
{
"message": "The given data was invalid.",
"error_code": "validation_failed",
"errors": {
"source_language": ["The selected source language is invalid."]
}
} | HTTP | codice_errore | Significato |
|---|---|---|
| 400 | richiesta_non_valida | Corpo della richiesta non valido |
| 401 | non autenticato | Chiave mancante, non valida o revocata |
| 402 | pagamento_non_riuscito | L'ordine è stato approvato, ma non è stato possibile riscuotere il pagamento |
| 402 | credit_hold | L'ordine supera il tuo limite di credito |
| 403 | ambito_proibito | Key non ha la portata richiesta |
| 403 | account_sospeso | Organizzazione sospesa per fatture non pagate |
| 404 | not_found | Non esiste alcun ordine di questo tipo per questa organizzazione |
| 409 | riferimento_duplicato | Riferimento riutilizzato per un ordine diverso |
| 409 | non_in_attesa_di_approvazione | L'ordine non è in attesa della tua approvazione |
| 422 | convalida_non_riuscita | Campi mancanti o non validi |
| 429 | rate_limited | Limite di rate superato |
| 500 | errore_server | Errore imprevisto del server |
| 503 | elaborazione_fallita | L'elaborazione a valle (OCR / determinazione dei prezzi) non è andata a buon fine |
Un ordine stato segue un ciclo di vita stabile. Questi cinque valori sono anche quelli adottati dal stato filtra per Elenco degli ordini:
| Stato | Significato |
|---|---|
in sospeso | Ricevuto; il preventivo non è ancora pronto. totale potrebbe essere nullo. |
in attesa di approvazione | Il prezzo è stato calcolato e siamo in attesa della tua approvazione dell'importo totale (solo se è richiesta l'approvazione). |
elaborazione | Approvato e attivo; traduzione in corso. |
completato | Fatto; i documenti tradotti sono disponibili. |
annullato | L'ordine è stato annullato. |
Mentre un ordine è in corso di elaborazione, vengono visualizzate etichette più dettagliate (ad esempio Assegnato al traduttore, Tradurre, Spedito) potrebbero comparire. Quando è richiesta l'approvazione, un ordine può riportare brevemente pagamento_non_riuscito o credit_hold se non fosse stato possibile riscuotere l'importo, definire la modalità di pagamento e approvare nuovamente.
GET /lingue
Restituisce tutte le lingue supportate. Utilizzare il nome riportare testualmente come lingua_di_origine / lingua_di_destinazione al momento della creazione di un ordine: gli ordini vengono abbinati in base al nome della lingua, non al codice.
Richiede una chiave autenticata.
curl https://www.rapidtranslate.org/api/v1/languages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" {
"data": [
{ "code": "english-uk", "name": "English (UK)", "active": true },
{ "code": "spanish", "name": "Spanish", "active": true }
]
} GET /prezzi
Restituisce il listino prezzi di riferimento statunitense, in USD, in base al quale vengono fatturati i tuoi ordini. Gli importi sono stringhe decimali. I prezzi sono raggruppati per traduzione tipo (ciascuno con un regolare e rapido per‑unità prezzo), consegna metodo, e apostille — gli stessi valori che si inseriscono al momento della creazione di un ordine.
Ambito di applicazione: prezzo:leggi
{
"data": {
"country": { "code": "US", "name": "United States" },
"currency": { "code": "USD", "symbol": "$" },
"translation": {
"certified": { "unit": "page", "regular": "27.99", "rapid": "37.99" },
"standard": { "unit": "word", "regular": "0.11", "rapid": "0.15" },
"specialized": { "unit": "page", "regular": "47.99", "rapid": "57.99" },
"naati": { "unit": "page", "regular": "42.99", "rapid": "52.99" },
"sworn": {
"unit": "page",
"note": "Sworn pricing depends on the language pair.",
"language_pairs": [
{ "languages": ["Spanish","English"], "unit": "page", "regular": "57.99", "rapid": "67.99" },
{ "languages": ["Polish","English"], "unit": "page", "regular": "46.99", "rapid": "56.99" }
]
}
},
"delivery": {
"email": "0.00", "notarized_email": "19.99",
"mail_standard": "29.99", "mail_next_day": "55.00"
},
"apostille": { "base": "79.00", "additional_document": "15.00" }
}
} Prezzi dichiarati. Il prezzo della traduzione giurata varia a seconda della coppia linguistica. coppie_linguistiche elenca tutte le coppie aventi diritto al giuramento con il proprio regolare/rapido prezzo. È accettata qualsiasi variante dell'inglese (inglese (USA/Regno Unito/Australia/Canada)) e ogni coppia funziona in entrambe le direzioni, a meno che non contenga "bidirezionale": false.
POSTA /ordini
Crea un ordine di traduzione e carica i file di origine. Poiché comporta il trasferimento di file, questo endpoint utilizza multipart/form-data (non JSON). I campi annidati utilizzano la notazione tra parentesi quadre, ad esempio: cliente[nome].
Ambito di applicazione: ordini:scrivere
| Campo | Tipo | Note |
|---|---|---|
riferimento | campo obbligatorio | Il tuo codice ordine univoco. Se lo riutilizzi, viene restituito l'ordine esistente (vedi idempotenza). |
cliente[nome] | campo obbligatorio | Nome e cognome completi del cliente finale. |
cliente[email] | campo obbligatorio | Indirizzo e-mail del cliente finale. |
lingua_di_origine | campo obbligatorio | Testo esatto nome da Elenco delle lingue. |
lingua_di_destinazione | campo obbligatorio | Testo esatto nome da Elenco delle lingue. |
tipo_di_traduzione | campo obbligatorio | Uno dei certificato, standard, specializzato, giurato, naati. |
inversione di tendenza | campo obbligatorio | regolare o rapido. |
consegna[metodo] | campo obbligatorio | Uno dei e-mail, e-mail autenticata, mail_standard, consegna_il_giorno_successivo. |
consegna[indirizzo][...] | oggetto | Necessario per mail_standard / consegna_il_giorno_successivo: strada, città, codice_postale, paese (stato (facoltativo). paese è un codice ISO, ad esempio STATI UNITI. |
apostille[abilitata] | booleano | Aggiungere la procedura di apostille. Vedi le norme riportate di seguito. |
apostille [documenti] | numero intero | Numero di documenti da apostillare. Obbligatorio se l'opzione è attivata. |
apostille [paese_di_destinazione] | stringa | Paese per il quale è richiesta l'apostille. |
note | stringa | Istruzioni in formato testo libero. |
codice_sconto | stringa | Un codice sconto da applicare. I codici chiaramente non validi o non applicabili vengono rifiutati al momento della creazione con 422 Errore di convalida; lo sconto viene definito definitivamente una volta stabilito il prezzo dell'ordine (vedi nota sotto). |
files[] | file[] obbligatorio | Da 1 a 20 file. Formati consentiti: pdf, jpg, jpeg, png, doc, docx, tiff, heic. Massimo 20 MB ciascuno. |
riferimento è unico per ogni organizzazione. Se si ripete un'operazione di creazione con lo stesso riferimento restituisce l'ordine esistente con 200 invece di creare un duplicato (un nuovo ordine restituisce 201). mail_standard modalità di consegna. consegna_il_giorno_successivo È riservato esclusivamente agli indirizzi negli Stati Uniti. curl -X POST https://www.rapidtranslate.org/api/v1/orders \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" \
-F "reference=APO-10432" \
-F "customer[name]=Jane Doe" \
-F "customer[email]=jane@example.com" \
-F "source_language=spagnolo" \
-F "target_language=inglese (USA)" \
-F "tipo_traduzione=certificata" \
-F "tempi_di_consegna=normali" \
-F "consegna[metodo]=e-mail" \
-F "file[]=@/path/to/birth-certificate.pdf" {
"data": {
"id": "9b1c2d3e-...-uuid",
"reference": "APO-10432",
"livemode": true,
"status": "pending",
"source_language": "Spanish",
"target_language": "English (US)",
"translation_type": "certified",
"turnaround": "regular",
"total": null,
"currency": "USD",
"created_at": "2026-08-28T10:15:00+00:00"
}
} Un ordine appena creato inizia come in sospeso con un nullo totale durante il calcolo del prezzo. Sondaggio Recuperare un ordine oppure prestare attenzione al stato_ordine webhook per visualizzare l'aggiornamento del prezzo e dello stato.
Buoni sconto. A codice_sconto viene verificato in due fasi. Al momento della creazione verifichiamo gli aspetti che non dipendono dalla lunghezza del documento — la validità del codice, i limiti di utilizzo e i tipi di traduzione/servizio a cui si applica — e rifiutiamo immediatamente un codice non valido. Le regole che dipendono dal numero di pagine o di parole (e dall’importo dello sconto stesso) vengono applicate dopo il conteggio del documento, quindi lo sconto appare sul prezzo totale, non iniziale in sospeso risposta. Se, una volta accertato il numero di pezzi, risulta che il buono sconto non sia applicabile, l'ordine viene comunque effettuato a prezzo pieno e contrassegnato affinché venga esaminato dal nostro team.
GET /ordini/{id}
Recupera un singolo ordine in base al suo id (l'UUID restituito al momento della creazione). Restituisce 404 non trovato se l'ordine non appartiene alla tua organizzazione.
Ambito di applicazione: ordini:lettura
curl https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" GET /ordini
Restituisce gli ordini della tua organizzazione, in ordine cronologico (dal più recente al più vecchio), con impaginazione in meta. Tutti i parametri di query sono facoltativi.
Ambito di applicazione: ordini:lettura
| Richiesta | Note |
|---|---|
stato | Uno dei in sospeso, in attesa di approvazione, elaborazione, completato, annullato. |
riferimento | Filtra in base al tuo codice di riferimento. |
lingua_di_origine / lingua_di_destinazione | Filtra per nome della lingua. |
creato_da / created_to | Intervallo di date (compresi i giorni di inizio e fine). |
ordina | -data_creazione (impostazione predefinita, più recenti per primi) oppure created_at (in ordine cronologico, dal più vecchio al più recente). |
per pagina | 1–100. Per impostazione predefinita, viene utilizzato il formato pagina standard. |
pagina | Numero di pagina. |
curl "https://www.rapidtranslate.org/api/v1/orders?status=completed&per_page=50" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" POSTA /ordini/{id}/approva
Approva l'importo totale calcolato per un ordine che è in attesa di approvazione, attivandola per renderla effettiva. Ciò è necessario solo quando il tuo account richiede un’approvazione prima dell’inizio dei lavori. La chiamata è idempotente.
Ambito di applicazione: ordini:scrivere
curl -X POST https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid/approve \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" In caso di esito positivo, viene restituito l'ordine aggiornato. Se l'ordine non è in attesa di approvazione, si ottiene 409 non_in_attesa_di_approvazione; se è richiesta un'operazione che però non va a buon fine, si ottiene 402 pagamento_non_riuscito o 402 credito_in sospeso.
I set fissi accettati al momento della creazione di un ordine.
| Valore | Descrizione |
|---|---|
certificato | Traduzione certificata (tariffa a pagina). |
standard | Traduzione standard (tariffa a parola). |
specializzato | Traduzione specialistica / di settore (per pagina). |
giurato | Traduzione giurata (per pagina). |
naati | Traduzione certificata NAATI (per pagina). |
| Valore | Descrizione |
|---|---|
regolare | Tempi di consegna standard. |
rapido | Tempi di consegna rapidi. |
| Valore | Indirizzo | Descrizione |
|---|---|---|
e-mail | No | Consegna digitale via e-mail (gratuita). |
e-mail autenticata | No | Consegna digitale autenticata. |
mail_standard | Sì | Posta ordinaria; spedizione nei paesi supportati. |
consegna_il_giorno_successivo | Sì | Spedizione con consegna il giorno lavorativo successivo (solo indirizzi negli Stati Uniti). |
Invece di effettuare il polling, configura un endpoint webhook per ricevere gli eventi in tempo reale. Imposta il tuo URL e visualizza il tuo segreto di firma in Impostazioni aziendali → Webhook. I webhook sono una soluzione pratica: il recupero di un ordine è sempre attendibile.
| Evento | Inviato quando |
|---|---|
stato_ordine | Lo stato di un ordine cambia. |
recensione_del_cliente | Un ordine è stato quotato ed è in attesa della tua approvazione (solo in modalità di approvazione). |
consegna_documenti | I documenti tradotti sono pronti, con i link per il download. |
pagamento_non_riuscito | Non è stato possibile riscuotere l'importo relativo a un ordine approvato — ciò comporta un fallimento blocco (motivo, messaggio). Aggiorna la scheda del portafoglio e approva nuovamente. |
credit_hold | Un ordine approvato supererebbe il tuo limite di credito — comporta un credit_hold blocco (messaggio). Pagare le fatture o richiedere un limite più alto. |
Ogni spedizione viene spedita con la stessa busta: una evento blocco (compreso modalità live) e uno specifico per l'evento dati blocco.
{
"event": {
"type": "order_status",
"id": "evt_9b1c...",
"livemode": true,
"sent_at": "2026-08-28T10:20:00+00:00"
},
"data": {
"order": {
"id": "9b1c2d3e-...-uuid",
"reference": "APO-10432",
"status": "completed"
}
}
} Il consegna_documenti L'evento aggiunge un documenti array (ciascuno con nome, download_url, versione, stato) e un portale link. Il recensione_del_cliente L'evento aggiunge una voce dettagliata prezzi blocco e un azioni.approva oggetto contenente l'URL da chiamare.
Ogni richiesta è firmata, in modo da poter verificare che provenga da RapidTranslate. Inviamo tre intestazioni:
| Intestazione | Valore |
|---|---|
X-RapidTranslate-Firma | sha256=<hmac> |
X-RapidTranslate-Timestamp | Timestamp Unix utilizzato nella firma |
X-RapidTranslate-Event | L'ID univoco dell'evento |
Calcolare la firma prevista come HMAC-SHA256 della stringa "{timestamp}.{raw_request_body}" utilizzando il segreto di firma del tuo webhook, quindi confrontalo con il valore dell'intestazione:
// PHP
$expected = 'sha256=' . hash_hmac(
'sha256',
$timestamp . '.' . $rawBody,
$webhookSecret
);
$valid = hash_equals($expected, $signatureHeader); Node.js (Express) — associare la route a un parser del corpo grezzo in modo da preservare esattamente i byte:
// app.use('/webhooks/rapidtranslate', express.raw({ type: 'application/json' }))
const crypto = require('crypto');
const timestamp = req.get('X-RapidTranslate-Timestamp');
const received = req.get('X-RapidTranslate-Signature'); // "sha256=..."
const rawBody = req.body; // Buffer, untouched
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
const valid = received &&
crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected)); Ci sono tre cose che mettono in difficoltà le persone:
X-RapidTranslate-Firma L'intestazione riporta un sha256= prefisso. Effettuare il confronto con 'sha256=' + yourHmac (come sopra) oppure rimuovere il prefisso prima di effettuare il confronto — non confrontare il valore esadecimale "nudo" con l'intera intestazione.hash_equals / crypto.timingSafeEqual), mai con == o ===.Il {timestamp} fa parte della stringa firmata, quindi leggila dall’intestazione e inseriscila all’inizio prima di eseguire l’hash. Consente inoltre di rifiutare le consegne obsolete o riprodotte — ad esempio, qualsiasi timestamp più vecchio di cinque minuti.
Le consegne non andate a buon fine vengono riprovate con un back-off esponenziale (fino a 5 tentativi). Rispondere con un 2xx stato per confermare la ricezione.