Inserimento ordini - POST

Inserisce uno o più ordini in Store360, oppure aggiorna o annulla ordini già inviati.

Metodo HTTP

POST


Endpoint

https://MIOSERVER/store360_api/orders

Header Richiesti

Content-Type: application/json
Authorization: Bearer {access_token}

Il body è solo JSON.

JSON di Richiesta

{
  "Ordini": [
    {
      "Provenienza": "MOBILE",
      "external_orderid": "APP-10045",
      "DataOrdine": "2026-11-11 15:30:00",
      "Stato": "PAGATO",
      "Cliente": "Mario Rossi",
      "Email": "[email protected]",
      "Telefono": "3331234567",
      "Indirizzo": "Via Roma 1",
      "Citta": "Genova",
      "Cap": "16100",
      "Provincia": "GE",
      "Nazione_ISO2": "IT",
      "IndirizzoSpedizione": "Via Milano 5",
      "CittaSpedizione": "Genova",
      "CapSpedizione": "16121",
      "ProvinciaSpedizione": "GE",
      "MetodoPagamento": "Carta di credito",
      "MetodoSpedizione": "Corriere espresso",
      "CostoSpedizione": 5.00,
      "Note": "Consegnare dopo le 15",
      "Prodotti": [
        { "Codice": "SKU123", "Qta": 2, "Prezzo": 9.90 },
        { "Codice": "SKU456", "Qta": 1, "Prezzo": 15.50 }
      ]
    }
  ]
}

Esempio minimo (solo i campi obbligatori)

{ "Ordini": [ { "Provenienza": "MOBILE", "external_orderid": "APP-10046", "Cliente": "Laura Bianchi",
                "Prodotti": [ { "Codice": "SKU123", "Qta": 1, "Prezzo": 9.90 } ] } ] }

Campi dell'oggetto Ordine

CampoTipoObbligatorioDescrizione
ProvenienzastringsìTipo d'ordine, come il campo Provenienza del GET /orders (maiuscole e minuscole indifferenti). Deve essere un tipo d'ordine attivo della vostra installazione
external_orderidstringsìId dell'ordine nel vostro sistema (massimo 64 caratteri). Serve a riconoscere un ordine già inviato
ClientestringsìNome e cognome, o ragione sociale
ProdottiarraysìAlmeno una riga (vedi sotto)
DataOrdinestringnoFormato AAAA-MM-GG HH:MM:SS. Se manca, la data della chiamata
StatostringnoNUOVO (predefinito), PAGATO, SPEDITO, PAGATOESPEDITO, ANNULLATO (solo su un ordine già inviato)
EmailstringnoSe presente il cliente viene cercato per email e creato se non esiste
Telefonostringno
Azienda, PartitaIva, CodiceFiscalestringnoDati di fatturazione
Indirizzo, Citta, Cap, ProvinciastringnoIndirizzo del cliente
Nazione_ISO2stringnoCodice ISO a 2 lettere, predefinito IT
ClienteSpedizione, AziendaSpedizione, IndirizzoSpedizione, CittaSpedizione, CapSpedizione, ProvinciaSpedizione, NazioneSpedizione_ISO2stringnoIndirizzo di spedizione. I campi non indicati prendono il valore di quelli del cliente
MetodoPagamentostringnoPredefinito: la Provenienza
MetodoSpedizionestringno
CostoSpedizionenumbernoIVA inclusa, predefinito 0
ValutastringnoCodice a 3 lettere, predefinito EUR
NotestringnoSalvate nello storico dell'ordine

Campi della riga Prodotti

CampoTipoObbligatorioDescrizione
CodicestringsìCodice (SKU) del prodotto in Store360. Se non esiste, la riga viene inserita lo stesso senza prodotto collegato e senza movimenti di magazzino; la risposta lo segnala in Messaggio
QtaintegersìNumero intero maggiore di zero
PrezzonumbersìPrezzo unitario IVA inclusa
NomestringnoSe manca, il nome del prodotto in Store360 (o il Codice, se il prodotto non esiste)
IvanumbernoAliquota in percentuale (es. 22), usata solo se il Codice non esiste in Store360; se manca si usa l'aliquota ordinaria. Per i prodotti esistenti vale l'aliquota del prodotto

Comportamento

  • Ogni ordine viene elaborato in modo indipendente: un ordine non valido viene scartato e segnalato nella risposta, senza bloccare gli altri.
  • Subtotale, IVA e totale vengono calcolati dalle righe più il costo di spedizione.
  • Ordine già inviato (stesso external_orderid e stessa Provenienza): non viene inserito di nuovo, quindi una chiamata ripetuta (per esempio dopo un timeout) non crea doppioni. Invece:
    • lo Stato viene aggiornato solo se avanza (NUOVO → PAGATO → SPEDITO → PAGATOESPEDITO), mai all'indietro; Note viene aggiunta allo storico;
    • dati del cliente e indirizzi vengono aggiornati solo per i campi inviati e solo finché l'ordine non è spedito;
    • righe e totali non vengono modificati.
  • Annullamento: inviare l'ordine con "Stato": "ANNULLATO". L'ordine viene annullato e non compare più nel GET /orders. Non si può inviare un ordine nuovo già annullato, e un ordine annullato non viene più modificato.
{ "Ordini": [ { "Provenienza": "MOBILE", "external_orderid": "APP-10046", "Cliente": "Laura Bianchi",
                "Stato": "ANNULLATO", "Note": "Annullato dal cliente",
                "Prodotti": [ { "Codice": "SKU123", "Qta": 1, "Prezzo": 9.90 } ] } ] }

JSON di Risposta

{
  "ResponseTo": "Orders",
  "Timestamp": "1794410919",
  "Ack": "OK",
  "MessaggioErrore": "",
  "CodiceErrore": "0",
  "Output": {
    "TotaleOrdini": "2",
    "Inseriti": "1",
    "Aggiornati": "0",
    "Annullati": "0",
    "Esistenti": "0",
    "Scartati": "1",
    "Ordini": {
      "Ordine": [
        { "Posizione": "1", "external_orderid": "APP-10045", "Esito": "INSERITO", "OrdineId": "6061", "Messaggio": "Ordine inserito" },
        { "Posizione": "2", "external_orderid": "APP-10046", "Esito": "SCARTATO", "OrdineId": "", "Messaggio": "Riga 1 (SKU123): Prezzo obbligatorio" }
      ]
    }
  }
}
EsitoSignificato
INSERITOOrdine creato; OrdineId è l'id in Store360
AGGIORNATOOrdine già presente: aggiornati stato e/o dati del cliente
ANNULLATOOrdine già presente, annullato
ESISTENTEOrdine già presente, nessuna modifica (il motivo è in Messaggio)
SCARTATOOrdine non valido, nessun dato salvato (il motivo è in Messaggio)

Se tutti gli ordini sono scartati Ack è KO con CodiceErrore 700. Con un solo ordine Ordine è un oggetto, con più ordini una lista.