Vai al contenuto

API Prodotti

🤖 Spiega con l'intelligenza artificiale

L’API Prodotti è progettata per gestire i dati dei prodotti in modo efficiente all’interno di un ambiente e-commerce. Supporta la creazione, la modifica e l’eliminazione dei prodotti, gestendo i dettagli dei prezzi, le informazioni sulle scorte, le impostazioni di ricorrenza, le tasse e la gestione delle immagini.

L’API garantisce risposte chiare e coerenti, inclusa una gestione dettagliata degli errori e il supporto per più valute con una corretta validazione della precisione.

Creare un prodotto

Endpoint

POST /v1/products/

Questo endpoint consente di creare un nuovo prodotto nel sistema inviando una richiesta POST con i dettagli del prodotto, come nome, descrizione, prezzo, valuta, scorte, tasse, immagini e impostazioni di ricorrenza.

Parametri di query:

Parametro Descrizione Tipo Obbligatorio
test Indica se il prodotto è in modalità test boolean false

Campi del corpo della richiesta:

Parametro Descrizione Tipo Obbligatorio
name Nome del prodotto (max 50 caratteri) string true
short_description Breve descrizione del prodotto (max 100 caratteri) string false
description Descrizione dettagliata del prodotto (max 300 caratteri) string false
price Prezzo del prodotto (validato dalla valuta) decimal true
currency Codice valuta (USD, EUR, CRC, ecc.) string false
stock Numero di articoli in magazzino integer false
is_physical Se il prodotto è fisico (true/false) boolean false
bar_code Codice a barre del prodotto string false
sku Unità di gestione scorte (Stock keeping unit) string false
taxes ID delle tasse separati da virgola string false
recurrence Impostazioni di ricorrenza (oggetto JSON) object false

Formato dell’oggetto di ricorrenza:

{
  "recurrence": "period",           // o "specific_billing_day"
  "duration_period": 1              // Valido: 1, 2, 3, 4, 6, 12 (mesi)
}

Oppure:

{
  "recurrence": "specific_billing_day",
  "payday": 15                       // Valido: 1-28
}

Parametri di caricamento file:

Parametro Descrizione Tipo Obbligatorio
image_default Immagine predefinita del prodotto (file) file false
images Immagini aggiuntive del prodotto (max 4) file false

Richiesta:

curl -X POST 'https://api.4geeks.io/v1/products/?test=false' \
     -u 'sk_test_51O62xYzAbcDef123:' \
     -F 'name=Premium Widget' \
     -F 'description=This is a premium widget product' \
     -F 'price=99.99' \
     -F 'currency=USD' \
     -F 'stock=50' \
     -F 'is_physical=true' \
     -F 'taxes=1,3' \
     -F 'sku=PREMIUM-WIDGET-001' \
     -F 'image_default=@/path/to/image.jpg' \
     -F 'recurrence={"recurrence":"period","duration_period":3}'

Risposta (201 Created):

{
  "code": 201,
  "title": "Registrazione completata",
  "content": "La registrazione è stata completata con successo.",
  "type": "success",
  "data": {
    "id": "d36a4a5c-9fa9-4d55-b47f-4f1d50f2a180"
  }
}

Ottenere tutti i prodotti

Endpoint

GET /v1/products/

Questo endpoint recupera un elenco paginato di tutti i prodotti con supporto per il filtraggio avanzato. Supporta paginazione, ricerca, filtraggio per tipo, intervallo di prezzo e livelli di scorte.

Parametri di query:

Parametro Descrizione Tipo Obbligatorio
page Il numero della pagina da recuperare (default: 1) integer false
page_size Prodotti per pagina (default: 10, max: 100) integer false
test Filtra per modalità test (true/false) boolean false
search Cerca per nome o SKU string false
type Filtra per tipo (fisico/digitale) string false
stock_min Livello minimo di scorte integer false
stock_max Livello massimo di scorte integer false
price_min Prezzo minimo (nella valuta del prodotto) decimal false
price_max Prezzo massimo (nella valuta del prodotto) decimal false

Richiesta:

curl -X GET 'https://api.4geeks.io/v1/products/?page=1&page_size=10&test=false' \
     -u 'sk_test_51O62xYzAbcDef123:'

Richiesta (Con filtri):

curl -X GET 'https://api.4geeks.io/v1/products/?page=1&search=widget&type=physical&price_min=10&price_max=100&stock_min=5' \
     -u 'sk_test_51O62xYzAbcDef123:'

Risposta (200 OK):

{
  "count": 25,
  "current_page": 1,
  "total_pages": 3,
  "results": [
    {
      "id": "a232cccc-956a-44ca-a2e8-d763afddc89f",
      "name": "Premium Widget",
      "short_description": "Widget di alta qualità",
      "description": "Questo è un prodotto widget premium con funzionalità avanzate",
      "stock": 50,
      "price": "99.99",
      "currency": "USD",
      "total_price": "109.99",
      "is_physical": true,
      "bar_code": "123456789012",
      "sku": "PREMIUM-WIDGET-001",
      "recurrence": {
        "recurrence": "period",
        "duration_period": 3
      },
      "images": {
        "default": "https://storage.googleapis.com/bucket/image-default.jpg",
        "additional_images": [
          {"image": "https://storage.googleapis.com/bucket/image-1.jpg"},
          {"image": "https://storage.googleapis.com/bucket/image-2.jpg"}
        ]
      },
      "payment_link": false,
      "created_on": "2025-12-04T10:30:00Z",
      "test": false,
      "taxes": [
        {"id": 1, "name": "IVA", "value": 10.0}
      ]
    }
  ]
}

Ottenere un prodotto specifico

Endpoint

GET /v1/products/{id}/

Questo endpoint recupera i dettagli completi di un prodotto specifico tramite il suo ID univoco.

Parametri di percorso:

Parametro Descrizione Tipo Obbligatorio
id L’identificatore univoco di un prodotto (UUID) string true

Parametri di query:

Parametro Descrizione Tipo Obbligatorio
test Filtra per modalità test (true/false) boolean false

Richiesta:

curl -X GET 'https://api.4geeks.io/v1/products/f9b77185-a62e-4da9-a056-3c7b812ca334/?test=false' \
     -u 'sk_test_51O62xYzAbcDef123:'

Risposta (200 OK):

{
  "id": "f9b77185-a62e-4da9-a056-3c7b812ca334",
  "name": "Premium Widget",
  "short_description": "Widget di alta qualità",
  "description": "Questo è un prodotto widget premium con funzionalità avanzate",
  "stock": 50,
  "price": "99.99",
  "currency": "USD",
  "total_price": "109.99",
  "is_physical": true,
  "bar_code": "123456789012",
  "sku": "PREMIUM-WIDGET-001",
  "recurrence": {
    "recurrence": "period",
    "duration_period": 3
  },
  "images": {
    "default": "https://storage.googleapis.com/bucket/image-default.jpg",
    "additional_images": [
      {"image": "https://storage.googleapis.com/bucket/image-1.jpg"},
      {"image": "https://storage.googleapis.com/bucket/image-2.jpg"}
    ]
  },
  "payment_link": false,
  "created_on": "2025-12-04T10:30:00Z",
  "test": false,
  "taxes": [
    {"id": 1, "name": "IVA", "value": 10.0}
  ]
}

Aggiornare un prodotto

Endpoint

PUT /v1/products/{id}/

Aggiorna un prodotto esistente con nuovi dettagli. È possibile aggiornare i singoli campi senza influenzare gli altri.

Parametri di percorso:

Parametro Descrizione Tipo Obbligatorio
id L’identificatore univoco di un prodotto (UUID) string true

Parametri di query:

Parametro Descrizione Tipo Obbligatorio
test Filtra per modalità test (true/false) boolean false

Campi del corpo della richiesta (tutti opzionali):

Parametro Descrizione Tipo
name Nome del prodotto (max 50 caratteri) string
short_description Breve descrizione del prodotto (max 100 caratteri) string
description Descrizione dettagliata del prodotto (max 300 caratteri) string
price Prezzo del prodotto (validato dalla valuta) decimal
currency Codice valuta (USD, EUR, CRC, ecc.) string
stock Numero di articoli in magazzino integer
is_physical Se il prodotto è fisico (true/false) boolean
bar_code Codice a barre del prodotto string
sku Unità di gestione scorte (Stock keeping unit) string
taxes ID delle tasse separati da virgola string
payment_link Abilita come link di pagamento boolean

Flag di gestione immagini:

Parametro Valore Azione
default -1 Mantieni l’immagine predefinita esistente
default -remove- Rimuovi l’immagine predefinita
default <file> Sostituisci con una nuova immagine
additional_images -1 Mantieni le immagini aggiuntive esistenti
additional_images -remove- Rimuovi tutte le immagini aggiuntive
additional_images <files> Sostituisci con nuove immagini (max 4)

Richiesta:

curl -X PUT 'https://api.4geeks.io/v1/products/f9b77185-a62e-4da9-a056-3c7b812ca334/?test=false' \
     -u 'sk_test_51O62xYzAbcDef123:' \
     -F 'name=Updated Widget Name' \
     -F 'description=Updated description' \
     -F 'price=79.99' \
     -F 'stock=100' \
     -F 'default=-1'

Risposta (200 OK):

{
  "code": 200,
  "title": "Prodotto aggiornato",
  "content": "Il prodotto è stato aggiornato con successo.",
  "type": "success",
  "data": {
    "id": "f9b77185-a62e-4da9-a056-3c7b812ca334",
    "name": "Updated Widget Name",
    "description": "Updated description",
    "price": "79.99",
    "stock": 100,
    "total_price": "87.99"
  }
}

Eliminare un prodotto

Endpoint

DELETE /v1/products/{id}/

Elimina definitivamente un prodotto e lo disattiva.

Parametri di percorso:

Parametro Descrizione Tipo Obbligatorio
id L’identificatore univoco di un prodotto (UUID) string true

Parametri di query:

Parametro Descrizione Tipo Obbligatorio
test Filtra per modalità test (true/false) boolean false

Richiesta:

curl -X DELETE 'https://api.4geeks.io/v1/products/f9b77185-a62e-4da9-a056-3c7b812ca334/?test=false' \
     -u 'sk_test_51O62xYzAbcDef123:'

Risposta (200 OK):

{
  "code": 200,
  "title": "Prodotto eliminato",
  "content": "Il prodotto è stato eliminato con successo.",
  "type": "success"
}

Gestione degli errori

L’API restituisce codici di stato HTTP standard per indicare il successo o il fallimento di una richiesta. Di seguito sono riportati gli errori comuni specifici per i prodotti:

400 Bad Request

Si verifica quando la richiesta è malformata o contiene dati non validi.

Scenari:

Scenario Messaggio di errore Soluzione
Formato prezzo non valido "Price validation error: {message}" Verifica la precisione del prezzo per la valuta (es. JPY utilizza 0 decimali)
JSON ricorrenza non valido "Please check the format of recurrence, remember that it is a JSON object." Assicurati che la ricorrenza sia in un formato JSON valido
Periodo di durata non valido "The duration_period can contain only the following values 1, 2, 3, 4, 6, 12" Usa durate mensili valide: 1, 2, 3, 4, 6 o 12
Giorno di paga non valido "The payday has to be greater than 0 and less than or equal to 28." Usa un giorno tra 1 e 28

Esempio di risposta di errore:

{
  "code": 400,
  "title": "Formato prezzo non valido",
  "content": "Errore di validazione del prezzo: JPY richiede 0 posizioni decimali. Per favore regola il prezzo in base ai requisiti della valuta.",
  "type": "danger"
}

401 Unauthorized

Autenticazione fallita. La chiave API non è valida, è mancante o è formattata male.

Esempio:

{
  "detail": "Le credenziali di autenticazione non sono state fornite."
}

Soluzione: - Verifica di aver incluso il parametro -u 'sk_test_...: o l’header Authorization: Basic - Assicurati che la tua chiave API sia corretta e attiva - Testa con Postman utilizzando Basic Auth

404 Not Found

Il prodotto richiesto non esiste.

Esempio:

{
  "code": 404,
  "title": "Il prodotto non esiste",
  "content": "L'id 'f9b77185-a62e-4da9-a056-3c7b812ca334' non corrisponde ad alcun prodotto",
  "type": "danger"
}

Soluzione: - Verifica che l’ID del prodotto esista - Usa l’endpoint di elenco per trovare l’ID prodotto corretto - Assicurati che il prodotto appartenga al tuo account sviluppatore

406 Not Acceptable

La richiesta viola le regole aziendali o i vincoli di validazione.

Esempio:

{
  "code": 406,
  "title": "Registrazione del prodotto fallita",
  "content": "Impossibile registrare il prodotto, per favore controlla: Valori dei campi non validi",
  "type": "danger"
}

Note importanti

Validazione del prezzo

  • I prezzi sono validati in base alle posizioni decimali della valuta
  • JPY, CLP e valute simili utilizzano 0 posizioni decimali
  • USD, EUR, GBP utilizzano 2 posizioni decimali
  • KWD e valute simili utilizzano 3 posizioni decimali

Gestione immagini

  • Immagine predefinita: Visualizzata come immagine principale del prodotto
  • Immagini aggiuntive: Supportate fino a 4 immagini supplementari
  • Formati supportati: JPEG, PNG
  • Dimensione massima del file: 10MB per immagine
  • Usa flag speciali (-1, -remove-) per gestire le immagini esistenti

Tasse

  • Ai prodotti possono essere applicate più tasse
  • Il prezzo totale include il calcolo delle tasse
  • Le tasse sono collegate tramite i loro ID
  • Invia gli ID delle tasse separati da virgola: "taxes": "1,3,5"

Impostazioni di ricorrenza

  • period: Ricorrenza mensile fissa (1, 2, 3, 4, 6 o 12 mesi)
  • specific_billing_day: Mensile in un giorno specifico (1-28)
  • Queste impostazioni si applicano quando il prodotto è utilizzato negli abbonamenti

Test vs Produzione

  • Usa la tua Chiave di Test (sk_test_...) per lo sviluppo e il testing
  • Usa la tua Chiave Live (sk_live_...) per le transazioni reali
  • Il parametro di query ?test=true o ?test=false controlla la modalità
  • Il sistema rileva automaticamente la modalità in base alla Chiave API utilizzata

Migliori pratiche

  1. Valida i prezzi attentamente - Assicurati che i prezzi corrispondano ai requisiti delle posizioni decimali della valuta
  2. Usa nomi descrittivi - Aiuta i clienti a comprendere chiaramente i prodotti
  3. Imposta scorte accurate - Mantieni aggiornati i conteggi dell’inventario
  4. Aggiungi immagini - Le immagini dei prodotti aumentano i tassi di conversione
  5. Usa gli SKU - Gli SKU univoci aiutano nella gestione dell’inventario
  6. Applica le tasse correttamente - Includi tutti gli ID delle tasse applicabili
  7. Testa prima della produzione - Usa la modalità test con le chiavi API di test per la validazione
  8. Usa la ricorrenza con saggezza - Imposta la ricorrenza solo per i prodotti idonei all’abbonamento

Risoluzione dei problemi

Problema: “Errore di validazione del prezzo: JPY richiede 0 posizioni decimali”

Causa: Utilizzo di posizioni decimali non supportate dalla valuta
Soluzione: - JPY: Usa numeri interi (senza decimali) - USD/EUR: Usa 2 posizioni decimali (99.99) - KWD: Usa 3 posizioni decimali (99.999)

Problema: “Il duration_period può contenere solo i seguenti valori 1, 2, 3, 4, 6, 12”

Causa: Periodo di ricorrenza non valido fornito
Soluzione: - Usa solo: 1 (mensile), 2 (bimestrale), 3 (trimestrale), 4 (quadrimestrale), 6 (semestrale) o 12 (annuale)

Problema: “Il payday deve essere maggiore di 0 e minore o uguale a 28”

Causa: Giorno di fatturazione non valido fornito
Soluzione: - Il giorno di paga deve essere compreso tra 1 e 28 - I giorni 29-31 non sono supportati per garantire la coerenza mensile

Problema: “Il prodotto non esiste”

Causa: L’ID del prodotto non esiste o appartiene a un diverso account sviluppatore
Soluzione: - Verifica l’ID del prodotto utilizzando l’endpoint di elenco - Assicurati di utilizzare la chiave API corretta - Controlla che il prodotto non sia stato eliminato

Problema: “Lo stato specificato non è valido”

Causa: Tipo di prodotto o valore di filtro non valido
Soluzione: - Usa valori di tipo validi: “physical” o “digital” - Assicurati che i parametri del filtro siano formattati correttamente