Categorie Endpoint
Categorie
Gestire le categorie di prodotti con supporto gerarchico.
Panoramica
| Operazione | Metodo | Endpoint | Ambito |
|---|---|---|---|
| Esportazione | GET | /xpanel/xoport/export/json/categories | categories:read |
| Importazione | POST | /xpanel/xoport/import/json/categories | categories:write |
| Aggiornamento | PUT | /xpanel/xoport/import/json/categories | categories:write |
| Elimina | DELETE | /xpanel/xoport/delete/json/categories/{id} | categories:delete |
Esporta (GET)
Parametri di query
| Parametri | Tipo | Descrizione |
|---|---|---|
/categories/{id} | Percorso | Categoria singola: la categoria stessa, come segmento del percorso, non come parametro di query (i suoi elementi secondari tramite parent_id). v2.122.12 Il segmento è un numero intero; un valore diverso (/categories/5x, /categories/5.0) genera un errore HTTP 400 INVALID_RANGE |
parent_id | int | Solo sottocategorie di questo ID |
seo_string | Testo | NOVITÀ v2.122.11 Categoria sotto un indirizzo del negozio, percorso completo esatto |
recursive | 0/1 | Solo con parent_id: 1 restituisce l'intero albero secondario anziché solo i figli diretti. Impostazione predefinita 0; senza parent_id non ha alcun effetto |
status | int | Solo categorie con questo stato: 1 attivo, 0 inattivo. Senza il parametro, tutte le |
language | Lingua | In languages{} solo questa lingua, come codice (de) o ID. Senza il parametro, tutte le lingue. A partire dalla v2.122.10, una lingua non presente nel negozio genera un errore HTTP 400 INVALID_FILTER_VALUE |
limit | int | Numero massimo per pagina (al massimo 250). Senza limit vengono visualizzate fino a 250 categorie senza scorrimento; se sono di più, le prime 50 e stats.has_more |
offset | int | posizione iniziale; funziona solo con limit o in caso di più di 250 risultati |
v2.122.12 Lo spazio vuoto ai margini non conta; un valore vuoto significa «non impostato»: ?parent_id=5%00 restituisce i figli di 5 (fino alla v2.122.11 il filtro non era presente e veniva restituito l’intero albero), così come status e recursive; ?language=%20 restituisce tutte le lingue (finora un elenco vuoto).
NOVITÀ v2.122.11 Indirizzo del negozio → Categoria: ?seo_string= cerca esattamente l’intero percorso così come viene fornito dal negozio, senza host e senza il segmento di lingua lng/xx/ (in compenso ?language=xx, senza il parametro, in tutte le lingue); le barre esterne non hanno importanza. In caso di più risultati, vengono restituiti tutti; se due categorie condividono un indirizzo, il negozio effettua la selezione senza un ordine prestabilito e il primo risultato non è necessariamente la pagina che restituisce. Il filtro funziona anche con parent_id e status; su /categories/{id} restituisce un errore HTTP 400 FILTER_NOT_APPLICABLE. Fino alla versione v2.122.10, il nome veniva ignorato come UNKNOWN_FILTER e veniva restituita l’intera struttura.
# Kategorie zu https://shop.de/lng/en/fishing-rods/spinning-rods/
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
"https://shop.de/xpanel/xoport/export/json/categories?seo_string=fishing-rods/spinning-rods&language=en"Regole e casi di errore: API di esportazione; passo dopo passo dall’indirizzo all’ID: SEO History.
Campi della risposta
categories_id- ID univocoparent_id- Categoria padre (0 = radice)status- Attivo (1) o inattivo (0)sort_order- Ordine di ordinamentorestricted_customer_groups- ID dei gruppi di clienti che non vedono la categoria;[]se nessun gruppo è bloccato. Presente in ogni categoria (dalla v2.47.0). Se l'importazione blocca una categoria principale, blocca anche le sue sottocategorie attive per quel gruppo; queste appariranno quindi anch'esse quicategories_image,header_category,header_nav_template,template,sitemap,shop_ids,hide_subcategory_tiles,hide_page_title,show_last_modified,redirect_type,redirect_url,subs_block,tree_block- Impostazioni della categoria, presenti nell’importazione con lo stesso nomedate_added,last_modified,tagcloud,lft,rgt,path- solo in letturalanguages{}- Per lingua:categories_name,categories_heading,categories_short_description,categories_description,title_tag,desc_tag,keywords_tag,seo_name,seo_text, oltre acategories_id,language_idelanguage_code; di sola letturaseo_string(indirizzo della categoria) ecpath
Le colonne della categoria vengono riportate così come sono gestite dal negozio; una colonna che non è ancora presente in un'installazione precedente non compare nella risposta.
Importazione (POST/PUT)
Richiesta di esempio
curl -X POST "https://shop.de/xpanel/xoport/import/json/categories" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "categories",
"data": [{
"parent_id": 0,
"status": 1,
"sort_order": 10,
"languages": {
"de": {
"categories_name": "Neue Kategorie",
"categories_heading": "Neue Kategorie Überschrift"
}
}
}]
}'Elimina (DELETE)
curl -X DELETE "https://shop.de/xpanel/xoport/delete/json/categories/99" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Attenzione: viene eliminata solo una categoria vuota. Se contiene sottocategorie o prodotti, il negozio risponde con HTTP 409 (HAS_SUBCATEGORIES o HAS_PRODUCTS) e non elimina nulla. L’ID è presente nel percorso; senza di esso, ad esempio con ?categories_id=, viene restituito un errore HTTP 400 MISSING_ID.
Categorie Elenco prodotti NUOVO v2.12.0
Endpoint leggero per la mappatura categoria→prodotto. Ideale per strumenti di sincronizzazione che devono solo sapere quali prodotti si trovano in quali categorie.
| Endpoint | Descrizione | Esempio |
|---|---|---|
GET /categories/productlist | Tutte le categorie con prodotti | Mappatura completa |
GET /categories/productlist?categories_id={id} | Singola categoria | ?categories_id=73 |
GET /categories/productlist?status=1 | Solo categorie attive | Senza il parametro "tutte" |
GET /categories/productlist?include_inactive_products=1 | Includi anche i prodotti inattivi | Impostazione predefinita: solo attivi |
GET /categories/productlist?language=de | Filtro per lingua | Nome della categoria nella lingua; senza il parametro (a partire dalla v2.122.12 anche vuoto o solo spazio) nella lingua con l'languages_id più basso, solitamente 1 = inglese, indipendentemente dalla lingua predefinita del negozio. v2.122.13 Fino alla v2.122.12 era valida la prima riga della tabella delle lingue, non necessariamente l’ID più basso. |
GET /categories/{id}/productlist | Proprio questa categoria v2.122.13 | /categories/73/productlist |
GET /categories/{von}:{bis}/productlist | Categorie nell’intervallo di ID v2.122.13 | /categories/70:80/productlist |
GET /categories/{von}:/productlist | Categorie a partire da questo ID v2.122.13 | /categories/70:/productlist |
productlist. /categories/Productlist, /categories/5/Productlist e ulteriori segmenti successivi generano un errore HTTP 400 INVALID_RANGE. Fino alla v2.122.11, /categories/5/Productlist forniva comunque la categoria 5 anziché l’elenco dei prodotti.productlist costituisce il filtro di categoria; ?status=, ?include_inactive_products= e ?language= continuano a funzionare. Fino alla v2.122.12, /categories/{id}/productlist, /categories/{von}:{bis}/productlist e /categories/{von}:/productlist ignoravano l’indicazione nel percorso e restituivano con codice HTTP 200 gli elenchi dei prodotti di tutte le categorie; in caso di singolo ID e di intervallo aperto, veniva visualizzato l’avviso RANGE_START_NOT_SINGLE_RECORD.- ⚠️
?categories_id=insieme a un ID o a un intervallo nel percorso restituisce un codice HTTP 400FILTER_NOT_APPLICABLE, poiché la categoria verrebbe menzionata due volte. È consentito solo lo stesso valore dell’ID del percorso singolo:/categories/5/productlist?categories_id=5restituisce, come in precedenza, la categoria 5. Un?categories_id=vuoto non viene considerato. - ⚠️ Incompatibilità rispetto alla v2.122.12:
/categories/5/productlist?categories_id=7e/categories/5:10/productlist?categories_id=5fornivano finora la categoria del parametro, ora restituiscono un errore HTTP 400. Inviate la categoria nel percorso o come parametro; se li utilizzate entrambi, assicuratevi che abbiano lo stesso ID. Nei negozi precedenti alla versione 4.9.174 funziona solo il parametro. - Messaggio:
Filter(s) categories_id apply to the /categories/productlist list only, not to /categories/{id}/productlist or an id range. Drop the id from the path to use them.
Formato della risposta
{
"success": true,
"api_version": "2.122.12",
"type": "categories_productlist",
"data": [
{
"categories_id": 73,
"categories_name": "Drucker",
"products_count": 3,
"products": [
{ "id": 101, "model": "HP-LJ-4050" },
{ "id": 102, "model": "EP-WF-7840" },
{ "id": 103, "model": "BR-HL-L6400" }
]
}
],
"stats": {
"total": 1,
"count": 1,
"timestamp": "2026-10-18 14:00:00"
}
}La navigazione avviene come nell’elenco delle categorie: senza limit, vengono visualizzate fino a 250 categorie; se ce ne sono di più, vengono visualizzate le prime 50 e stats.has_more; con limit e offset, come di consueto.
categories:read.