MMoovExpressDocs

Autenticazione

Autentica le richieste con la tua API key

Tutte le richieste alle API MoovExpress vanno autenticate con una API key, passata nell'header Authorization come Bearer token.

Authorization: Bearer mvx_live_xxxxxxxxxxxxxxxxxxxxxxxx
▲

La API key vale come una password: dà accesso a creare spedizioni e addebitare credito sul contratto collegato. Non condividerla e non inserirla in codice lato browser o in repository pubblici.

Ottenere la API key

  1. Accedi al portale MoovExpress.
  2. Vai in Impostazioni → API Key.
  3. Scegli il contratto e premi Genera API key.
  4. Copia la chiave: viene mostrata una sola volta.

Ogni chiave è legata a un contratto. Se usi più contratti, genera una chiave per ciascuno.

Verifica connessione

Per testare che la chiave sia valida (utile in fase di collegamento con un'altra piattaforma) usa GET /api/v1/account: con API key valida risponde 200 con i dati del contratto, altrimenti 401.

curl https://moovexpress.com/api/v1/account \
  -H "Authorization: Bearer mvx_live_xxxxxxxxxxxxxxxxxxxxxxxx"
{ "ok": true, "account": "Cliente Demo Srl", "contratto": "Standard Nazionale",
  "contratto_attivo": true, "listino_attivo": true, "credito": 150.00, "valuta": "EUR" }
▲

Gli endpoint operativi (/rates, /shipments, /pickups, /shipping-lists) vanno chiamati in POST. Chiamarli in GET restituisce 405 Method Not Allowed. Per una verifica in GET usa /account.

Esempio di richiesta autenticata

curl -X POST https://moovexpress.com/api/v1/rates \
  -H "Authorization: Bearer mvx_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "packages": [{ "weight": 2.5, "length": 30, "width": 20, "height": 15 }],
    "shipTo": { "postalCode": "00100", "state": "RM", "country": "IT" }
  }'
const res = await fetch("https://moovexpress.com/api/v1/rates", {
  method: "POST",
  headers: {
    "Authorization": "Bearer mvx_live_xxxxxxxxxxxxxxxxxxxxxxxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    packages: [{ weight: 2.5, length: 30, width: 20, height: 15 }],
    shipTo: { postalCode: "00100", state: "RM", country: "IT" },
  }),
});
const data = await res.json();
$ch = curl_init("https://moovexpress.com/api/v1/rates");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer mvx_live_xxxxxxxxxxxxxxxxxxxxxxxx",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "packages" => [["weight" => 2.5, "length" => 30, "width" => 20, "height" => 15]],
    "shipTo" => ["postalCode" => "00100", "state" => "RM", "country" => "IT"],
  ]),
]);
$data = json_decode(curl_exec($ch), true);

Revocare una chiave

Puoi eliminare una API key in qualsiasi momento dalla stessa pagina API Key del portale. Una volta revocata, i sistemi che la usano smettono immediatamente di funzionare: genera prima la nuova chiave, poi revoca quella vecchia.

Risposte di errore di autenticazione

CodiceSignificato
401API key mancante, non valida o revocata
{ "error": "API key non valida o mancante" }

Limiti di frequenza

Le richieste sono soggette a un limite di frequenza per API key. Superata la soglia, la risposta è 429 Too Many Requests con l'header Retry-After (secondi da attendere prima di riprovare). Lo stesso 429 viene restituito quando la quota del pacchetto è esaurita o non pagata: il campo codice distingue i casi.

codiceSignificato
rate_limitTroppe richieste in poco tempo: rallenta e riprova
pacchetto_esauritoSpedizioni del piano finite: passa a un pacchetto più grande
non_pagatoPagamento del pacchetto non riuscito: sistemalo dal portale
{ "error": "Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo.", "codice": "rate_limit" }
▲

Per gli aggiornamenti di stato usa il tracking a intervalli ragionevoli (o, meglio, i webhook che ti notifichiamo noi): non interrogare /tracking in loop stretto. Rispetta sempre l'header Retry-After.