Codici di errore.
Ogni errore di subkit e shopkit ha un codice e rimanda qui – in docsUrl dell’errore sollevato e nel campo docs delle risposte HTTP. Cerca il codice, leggi la causa, applica la soluzione.
Agenti di coding: il server MCP della documentazione su https://agentkit.ch/mcp spiega un codice con explain_error.
subkit
Abbonamenti, fatture e API self-service.
- CUSTOMER_NOT_FOUNDHTTP 404
Causa: Nessun cliente di fatturazione con questo
externalId– viene creato al primo abbonamento o conupsertCustomer().Soluzione: Chiama prima
upsertCustomer({ externalId, email, name }), oppure controlla l’id.- PLAN_NOT_FOUNDHTTP 404
Causa: Il
planIdnon è tra iplanspassati asubkit().Soluzione: Usa un id dei piani configurati (lo strumento MCP
list_plansli elenca).- PLAN_NOT_PURCHASABLEHTTP 400
Causa: Il piano non ha un prezzo per questo intervallo, oppure è nascosto (non più in vendita).
Soluzione: Offri solo gli intervalli di
plan.prices. Un piano nascosto resta ai suoi abbonati ma non si può più acquistare.- SUBSCRIPTION_EXISTSHTTP 400
Causa: Il cliente ha già un abbonamento in corso.
Soluzione: Cambia piano con
changePlan()invece di chiamaresubscribe().- NO_SUBSCRIPTIONHTTP 400
Causa: L’azione richiede un abbonamento in corso e il cliente non ne ha (mai abbonato, oppure è terminato).
Soluzione: Avviane uno con
subscribe().getOverview()mostra lo stato attuale.- INVALID_STATEHTTP 400
Causa: Non possibile nello stato attuale: il checkout dell’abbonamento non è concluso, oppure una fattura aperta va saldata prima di un cambio di piano.
Soluzione: Concludi o annulla il checkout, oppure paga la fattura aperta, poi riprova.
- PAYMENT_METHOD_REQUIREDHTTP 400
Causa: Un upgrade viene addebitato subito e richiede una carta o TWINT salvati – non ce ne sono.
Soluzione: Fai aggiungere al cliente un mezzo di pagamento (
POST …/payment-method) oppure passa alla fattura.- PAYMENT_FAILEDHTTP 400
Causa: L’addebito di un upgrade è stato rifiutato (carta rifiutata, fondi insufficienti, TWINT rifiutato). Il piano resta invariato.
Soluzione: Chiedi al cliente di aggiornare il mezzo di pagamento, poi riprova.
- PROVIDER_UNAVAILABLEHTTP 503
Causa: Il fornitore di pagamento non era raggiungibile o ha risposto con un errore (non si tratta di una carta rifiutata).
Soluzione: Riprova più tardi. Controlla lo stato del fornitore e la chiave API (zahls.ch: istanza e chiave).
- INVOICE_NOT_FOUNDHTTP 404
Causa: Nessuna fattura con questo id per questo cliente – oppure, al momento del pagamento, nessuna fattura aperta.
Soluzione: Controlla l’id e che la fattura appartenga al cliente connesso.
- OVERDUE_INVOICEHTTP 402
Causa: Una fattura del cliente è scaduta o stralciata; finché non è pagata non si vende nulla di nuovo.
Soluzione: Pagala prima (
POST …/invoices/:id/payo con fattura QR), poi riprova.- COLLECTION_METHOD_UNAVAILABLEHTTP 400
Causa: Questa modalità di pagamento (carta / TWINT o fattura) non è attivata in
collectionMethodsdell’handler.Soluzione: Aggiungila a
collectionMethods, oppure offri solo le modalità attivate.- BUSYHTTP 409
Causa: Un’altra richiesta sta modificando nello stesso momento lo stesso abbonamento, ordine, carrello o stock (p. es. un rinnovo o un webhook).
Soluzione: Riprova tra un attimo – non si perde nulla.
- RATE_LIMITEDHTTP 429
Causa: Il tuo callback
rateLimitha rifiutato la richiesta, oppure sono arrivati troppi webhook per un pagamento.Soluzione: Attendi i secondi indicati in
Retry-After. Se clienti reali raggiungono il limite, aumentalo.- WEBHOOK_INVALIDHTTP 400
Causa: Un webhook non ha potuto essere verificato: transazione sconosciuta, importo o valuta diversi, oppure il corpo non è JSON.
Soluzione: Fai puntare il webhook del fornitore (formato JSON) a
…/webhooke usa la stessa istanza e la stessa chiave API del kit. Le richieste falsificate finiscono qui di proposito.- UNAUTHORIZEDHTTP 401
Causa: Il callback
authorize(oidentify) dell’handler non ha accettato la richiesta – nessuna sessione o nessun accesso.Soluzione: Invia il cookie di sessione o il token con la richiesta e controlla il callback.
- UNSUPPORTED_MEDIA_TYPEHTTP 415
Causa: Un POST senza
Content-Type: application/json. Gli handler lo richiedono come protezione CSRF.Soluzione: Invia JSON con esattamente questo content type – i client React dei kit lo fanno già.
- INVALID_JSONHTTP 400
Causa: Il corpo della richiesta non è JSON valido.
Soluzione: Invia un oggetto JSON come corpo.
- INVALID_INPUTHTTP 400
Causa: Un campo manca, ha il tipo sbagliato o è fuori dall’intervallo ammesso (p. es. intervallo sconosciuto, importo negativo, link non http(s)).
Soluzione: Confronta il campo indicato nel messaggio con il README del kit.
- NOT_FOUNDHTTP 404
Causa: Nessuna route per questo metodo e percorso sotto il
basePathdell’handler.Soluzione: Verifica che
basePathcorrisponda al punto in cui è montata la route, e il metodo HTTP.- INTERNAL_ERRORHTTP 500
Causa: Un errore imprevisto (database, bug). I dettagli non vengono inviati al client.
Soluzione: Guarda
onErrore il log del server. Un bug in un kit: segnalalo con lo stack trace.
shopkit
Catalogo, carrello, checkout, ordini e API di back office.
- PRODUCT_NOT_FOUNDHTTP 404
Causa: Nessun prodotto con questo id o slug.
Soluzione: Controlla id o slug. I prodotti archiviati sono solo nel back office.
- VARIANT_NOT_FOUNDHTTP 404
Causa: Nessuna variante con questo id.
Soluzione: Usa un id di
product.variants.- NOT_FOR_SALEHTTP 400
Causa: Il prodotto o la variante è una bozza o è archiviato.
Soluzione: Attivalo nel back office, oppure toglilo dal carrello.
- OUT_OF_STOCKHTTP 409
Causa: In magazzino ci sono meno articoli di quelli richiesti (lo stock viene riservato al checkout).
Soluzione: Riduci la quantità – il messaggio indica quanti ne restano.
- INVALID_QUANTITYHTTP 400
Causa: Una quantità inferiore a 1 o superiore al massimo per riga, oppure troppi articoli nel carrello.
Soluzione: Usa un numero intero entro il limite indicato nel messaggio.
- CART_NOT_FOUNDHTTP 404
Causa: Nessun carrello con questo token (token errato, oppure un vecchio carrello abbandonato).
Soluzione: Crea un nuovo carrello – il provider React lo fa da solo.
- CART_EMPTYHTTP 400
Causa: Checkout di un carrello senza articoli.
Soluzione: Aggiungi prima degli articoli.
- CART_CLOSEDHTTP 409
Causa: Il carrello è già stato trasformato in un ordine.
Soluzione: Mostra l’ordine, oppure inizia un nuovo carrello.
- DISCOUNT_INVALIDHTTP 400
Causa: Codice sconto sconosciuto, scaduto, inattivo o esaurito.
Soluzione: Controlla il codice nel back office (
list_discounts).- DISCOUNT_NOT_APPLICABLEHTTP 400
Causa: Il codice è valido, ma questo carrello non soddisfa le condizioni (importo minimo, prodotti).
Soluzione: Soddisfa le condizioni, oppure rimuovi il codice.
- GIFT_CARD_INVALIDHTTP 400 · 404
Causa: Carta regalo sconosciuta, bloccata o scaduta, oppure saldo insufficiente.
Soluzione: Controlla il codice (trattini e maiuscole non contano) e il saldo.
- EMAIL_REQUIREDHTTP 400
Causa: Checkout senza indirizzo e-mail.
Soluzione: Imposta
emailnei dettagli del carrello (updateCartDetails()).- ADDRESS_REQUIREDHTTP 400
Causa: Gli articoli fisici richiedono un indirizzo di consegna.
Soluzione: Imposta
shippingAddressnei dettagli del carrello.- SHIPPING_RATE_REQUIREDHTTP 400
Causa: Articoli fisici, ma nessuna modalità di spedizione scelta.
Soluzione: Imposta
shippingRateIdsu una delle tariffe offerte.- SHIPPING_RATE_UNAVAILABLEHTTP 400
Causa: La modalità di spedizione scelta non esiste o non è adatta a questo carrello.
Soluzione: Scegli una delle
shippingOptionsdel carrello.- FULFILLMENT_DATE_REQUIREDHTTP 400
Causa: La modalità di spedizione scelta ha un calendario (
schedule), ma il carrello non ha ancora un giorno di ritiro o consegna – o nessuna fascia oraria, anche se ce ne sono.Soluzione: Imposta un giorno da
shippingOptions[].schedule.dates(e una fascia datimeWindows) conupdateCartDetails({ fulfillmentDate, fulfillmentWindow }).- FULFILLMENT_DATE_UNAVAILABLEHTTP 400
Causa: Il giorno o la fascia oraria non è (più) offerto: prima del preavviso, dopo l’orario limite, in un giorno di chiusura o oltre
maxDays.Soluzione: Scegli un giorno tra le
schedule.datesattuali della modalità di spedizione – l’elenco cambia nel tempo e con i prodotti nel carrello.- PAYMENT_METHOD_UNAVAILABLEHTTP 400
Causa: Il metodo di pagamento (online o fattura) non è offerto per questo shop o questo ordine, oppure non è configurato alcun fornitore.
Soluzione: Configura il fornitore e i metodi di pagamento in
createShop(), oppure scegli un altro metodo.- PAYMENT_METHOD_NOT_FOUNDHTTP 404
Causa: Il cliente non ha (questo) metodo di pagamento salvato: nessuno ancora salvato, rimosso, rifiutato dal fornitore e disattivato, oppure appartiene a un altro cliente.
Soluzione: Ordina senza
useSavedPaymentMethod(link di pagamento) e lascia che il cliente ne salvi uno consavePaymentMethod: true.- AMOUNT_CHANGEDHTTP 409
Causa: L’importo dovuto è diverso da quello confermato dal cliente (
expectedAmount), ad esempio perché è cambiato un prezzo, uno sconto o la spedizione. Non è stato addebitato nulla.Soluzione: Ricalcola l’ordine (
quoteOrder/quote_order), mostra al cliente il nuovo importo e ordina di nuovo con l’importo confermato.- ORDER_NOT_FOUNDHTTP 404
Causa: Nessun ordine con questo id, oppure il token del link dell’ordine non corrisponde.
Soluzione: Controlla l’id e il
tokendel link dell’ordine.- INVALID_STATEHTTP 409
Causa: Non possibile nello stato dell’ordine: già pagato, non pagabile, non ancora pagato (rimborso), annullato.
Soluzione: Leggi prima
status,paymentStatusefulfillmentStatusdell’ordine.- REFUND_TOO_HIGHHTTP 400
Causa: Il rimborso supera l’importo ancora rimborsabile, oppure le carte regalo dell’ordine sono già state usate.
Soluzione: Rimborsa al massimo l’importo indicato nel messaggio.
- DUPLICATEHTTP 409
Causa: Esiste già uno slug di prodotto, uno SKU o un codice sconto con questo valore.
Soluzione: Scegline un altro, oppure modifica la voce esistente.
- PROVIDER_UNAVAILABLEHTTP 503
Causa: Il fornitore di pagamento non era raggiungibile o ha risposto con un errore (non si tratta di una carta rifiutata).
Soluzione: Riprova più tardi. Controlla lo stato del fornitore e la chiave API (zahls.ch: istanza e chiave).
- BUSYHTTP 409
Causa: Un’altra richiesta sta modificando nello stesso momento lo stesso abbonamento, ordine, carrello o stock (p. es. un rinnovo o un webhook).
Soluzione: Riprova tra un attimo – non si perde nulla.
- RATE_LIMITEDHTTP 429
Causa: Il tuo callback
rateLimitha rifiutato la richiesta, oppure sono arrivati troppi webhook per un pagamento.Soluzione: Attendi i secondi indicati in
Retry-After. Se clienti reali raggiungono il limite, aumentalo.- WEBHOOK_INVALIDHTTP 400
Causa: Un webhook non ha potuto essere verificato: transazione sconosciuta, importo o valuta diversi, oppure il corpo non è JSON.
Soluzione: Fai puntare il webhook del fornitore (formato JSON) a
…/webhooke usa la stessa istanza e la stessa chiave API del kit. Le richieste falsificate finiscono qui di proposito.- NO_PAYMENT_SLIPHTTP 400
Causa: Un’importazione bancaria, ma l’handler del back office non ha una polizza di versamento per calcolare i riferimenti.
Soluzione: Passa
receipts.paymentSlip(p. es.swissQrBill()) acreateShopAdminHandler().- INVALID_CAMTHTTP 400
Causa: Il file bancario non è un documento XML camt.053 o camt.054.
Soluzione: Esporta il camt.054 (o camt.053) in XML dall’e-banking e invialo come
{ "camt": "<?xml …" }.- HSSOFT_REJECTEDHTTP 502
Causa: HS-Soft (WaWiAssist) ha rifiutato la richiesta: chiave API non valida, un canale che la chiave non può scrivere, data d’ordine bloccata, ordine già fatturato o articolo sconosciuto.
error.details.typeindica il motivo.Soluzione: Correggi la causa (verifica la chiave API presso HS-Soft, correggi la data o l’articolo) e invia di nuovo l’ordine con
syncOrder(id, { force: true }). Ripetere senza modifiche non serve.- HSSOFT_UNAVAILABLEHTTP 503
Causa: HS-Soft non era raggiungibile o aveva un disturbo temporaneo (503, timeout, errore del gateway).
Soluzione:
syncOrders()riprova da solo doporetryMinutes. Se l’ordine èuncertain, controlla prima in WaWiAssist se è arrivato – solo dopo invialo di nuovo.- HSSOFT_UNMAPPEDHTTP 422
Causa: Una posizione o le spese di spedizione dell’ordine non hanno un articolo HS-Soft – il prodotto non proviene dall’importazione.
Soluzione: Importa il prodotto da HS-Soft, imposta
orders.articleIdoorders.shippingArticleId, oppure escludi l’ordine conorders.filter.- SWISSPOST_REJECTEDHTTP 502
Causa: La Posta ha rifiutato la richiesta: client o scope della Digital Commerce API, licenza d’affrancatura, combinazione di prestazioni non possibile per l’invio, indirizzo a cui la Posta non può recapitare – o invio all’estero (le etichette sono per la Svizzera e il Liechtenstein).
error.details.errorsindica i codici della Posta (E2001…).Soluzione: Correggi la causa (verifica client e scope presso la Posta, la licenza, le prestazioni della modalità di spedizione o l’indirizzo) e crea di nuovo l’etichetta. Ripetere senza modifiche non serve.
- SWISSPOST_UNAVAILABLEHTTP 503
Causa: La Posta non era raggiungibile o aveva un disturbo temporaneo (timeout, 5xx, E9999).
Soluzione: Crea l’etichetta più tardi. Le proposte e la verifica dell’indirizzo nel checkout non falliscono per questo – l’ordine prosegue senza.
- UNAUTHORIZEDHTTP 401
Causa: Il callback
authorize(oidentify) dell’handler non ha accettato la richiesta – nessuna sessione o nessun accesso.Soluzione: Invia il cookie di sessione o il token con la richiesta e controlla il callback.
- UNSUPPORTED_MEDIA_TYPEHTTP 415
Causa: Un POST senza
Content-Type: application/json. Gli handler lo richiedono come protezione CSRF.Soluzione: Invia JSON con esattamente questo content type – i client React dei kit lo fanno già.
- INVALID_JSONHTTP 400
Causa: Il corpo della richiesta non è JSON valido.
Soluzione: Invia un oggetto JSON come corpo.
- INVALID_INPUTHTTP 400
Causa: Un campo manca, ha il tipo sbagliato o è fuori dall’intervallo ammesso (p. es. intervallo sconosciuto, importo negativo, link non http(s)).
Soluzione: Confronta il campo indicato nel messaggio con il README del kit.
- NOT_FOUNDHTTP 404
Causa: Nessuna route per questo metodo e percorso sotto il
basePathdell’handler.Soluzione: Verifica che
basePathcorrisponda al punto in cui è montata la route, e il metodo HTTP.- METHOD_NOT_ALLOWEDHTTP 405
Causa: L’API di back office accetta solo GET e POST.
Soluzione: Usa POST per le modifiche.
- TOO_LARGEHTTP 413
Causa: Il corpo della richiesta è troppo grande (100 kB; file bancari 20 MB).
Soluzione: Invia meno dati – per esempio dividi un file bancario grande.
- INTERNAL_ERRORHTTP 500
Causa: Un errore imprevisto (database, bug). I dettagli non vengono inviati al client.
Soluzione: Guarda
onErrore il log del server. Un bug in un kit: segnalalo con lo stack trace.