Skip to content

Taxonomien ​

Die Taxonomie ordnet Produkte, Artikel und Medien nach Dimensionen: Produktkategorie, Anwendungsbereich, Leistungsklasse und so weiter. Eine Taxonomie ist eine Dimension, ein Term (taxon) ein Eintrag darin.

Die API liefert nur Dimensionen, die im PIM als „Im Frontend nutzbar“ markiert sind. Dimensionen mit Personen, Orten oder Wetter sind aus Datenschutzgründen ausgeschlossen.

MethodePfadAnmeldung
GET/taxonomieskeine
GET/taxonomies/{slug}keine
GET/content/taxonomiesToken mit content:catalog:read
GET/content/taxonomies/{slug}Token mit content:catalog:read

Felder ​

Taxonomie

FeldTypBedeutung
idIntegerID
slugStringKennung der Dimension, z. B. produktkategorie. Wird im Produktfilter als dimension verwendet
labelsString | nullBezeichnung in der Server-Sprache (derzeit Text, kein Sprach-Objekt)
hierarchicalBooleantrue, wenn die Terme einen Baum bilden
taxonsTerm[]Nur in der Detailansicht

Term

FeldTypBedeutung
idIntegerID
taxonomy_idIntegerZu welcher Taxonomie er gehört
taxonomy_slugStringNur wo die Taxonomie mitgeladen ist (bei Produkten). In der Taxonomie-Detailansicht fehlt das Feld
parent_idInteger | nullÜbergeordneter Term
slugStringKennung des Terms
namesString | nullBezeichnung in der Server-Sprache (derzeit Text, kein Sprach-Objekt)
positionIntegerSortierung unter Geschwistern

Taxonomien auflisten ​

GET /taxonomies

Alle frontend-nutzbaren Taxonomien, sortiert nach slug, ohne Terme. Nicht paginiert, keine Parameter.

Beispiel ​

bash
curl -sS https://admin.matev.eu/api/v1/taxonomies -H 'Accept: application/json'
js
const { data: taxonomies } = await (await fetch('https://admin.matev.eu/api/v1/taxonomies', {
  headers: { Accept: 'application/json' },
})).json()
php
use Illuminate\Support\Facades\Http;

$taxonomies = Http::acceptJson()->get('https://admin.matev.eu/api/v1/taxonomies')->throw()->json('data');

Antwort 200 ​

json
{
  "data": [
    { "id": 5, "slug": "anwendungsbereich", "labels": "Anwendungsbereich", "hierarchical": true },
    { "id": 6, "slug": "leistungsklasse", "labels": "Leistungsklasse", "hierarchical": false },
    { "id": 3, "slug": "produktkategorie", "labels": "Produktkategorie", "hierarchical": true }
  ]
}

Fehler ​

StatuscodeWann
405method_not_allowedandere Methode als GET

Eine Taxonomie mit Termen abrufen ​

GET /taxonomies/{slug}

Liefert die Taxonomie und alle ihre Terme als flache Liste, sortiert nach parent_id und position. Den Baum baut der Client selbst über parent_id zusammen.

Der Wurzel-Term der Dimension selbst (der Knoten, der im PIM die Taxonomie darstellt) ist nicht in der Liste. Terme der ersten Ebene haben deshalb als parent_id die ID dieses nicht gelieferten Knotens. Behandeln Sie jeden Term, dessen parent_id nicht in der Liste vorkommt, als obersten Eintrag.

Pfad-Parameter ​

ParameterTypBedeutung
slugStringSlug der Taxonomie, z. B. produktkategorie

Beispiel ​

bash
curl -sS https://admin.matev.eu/api/v1/taxonomies/produktkategorie -H 'Accept: application/json'
js
const { data: tax } = await (await fetch('https://admin.matev.eu/api/v1/taxonomies/produktkategorie', {
  headers: { Accept: 'application/json' },
})).json()

// Build the tree from the flat list
const ids = new Set(tax.taxons.map((t) => t.id))
const byParent = Object.groupBy(tax.taxons, (t) => (ids.has(t.parent_id) ? t.parent_id : 'root'))
const roots = byParent.root ?? []
php
use Illuminate\Support\Facades\Http;

$taxonomy = Http::acceptJson()
    ->get('https://admin.matev.eu/api/v1/taxonomies/produktkategorie')
    ->throw()
    ->json('data');

$ids = array_column($taxonomy['taxons'], 'id');
$roots = array_filter($taxonomy['taxons'], fn (array $t): bool => ! in_array($t['parent_id'], $ids, true));

Antwort 200 ​

json
{
  "data": {
    "id": 3,
    "slug": "produktkategorie",
    "labels": "Produktkategorie",
    "hierarchical": true,
    "taxons": [
      { "id": 80, "taxonomy_id": 3, "parent_id": 79, "slug": "winterdienst", "names": "Winterdienst", "position": 1 },
      { "id": 81, "taxonomy_id": 3, "parent_id": 79, "slug": "gruenpflege", "names": "Grünpflege", "position": 2 },
      { "id": 88, "taxonomy_id": 3, "parent_id": 80, "slug": "schneepfluege", "names": "Schneepflüge", "position": 2 }
    ]
  }
}

Fehler ​

StatuscodeWann
404not_foundKeine Taxonomie mit diesem Slug, oder sie ist nicht frontend-nutzbar
405method_not_allowedandere Methode als GET

Mit Token: /content/taxonomies ​

GET /content/taxonomies und GET /content/taxonomies/{slug} sind identisch mit den öffentlichen Endpunkten, brauchen aber ein Token mit content:catalog:read. Kirby nutzt sie für Vorschläge im Feld pimtaxon.

bash
curl -sS https://admin.matev.eu/api/v1/content/taxonomies \
  -H 'Accept: application/json' -H "Authorization: Bearer $MATEV_TOKEN"

curl -sS https://admin.matev.eu/api/v1/content/taxonomies/produktkategorie \
  -H 'Accept: application/json' -H "Authorization: Bearer $MATEV_TOKEN"
js
const headers = { Accept: 'application/json', Authorization: `Bearer ${process.env.CONTENT_API_TOKEN}` }
const all = await (await fetch('https://admin.matev.eu/api/v1/content/taxonomies', { headers })).json()
const one = await (await fetch('https://admin.matev.eu/api/v1/content/taxonomies/produktkategorie', { headers })).json()
php
use Illuminate\Support\Facades\Http;

$api = Http::baseUrl('https://admin.matev.eu/api/v1')->acceptJson()->withToken(config('services.matev.token'));

$all = $api->get('/content/taxonomies')->throw()->json('data');
$one = $api->get('/content/taxonomies/produktkategorie')->throw()->json('data');

Zusätzliche Fehler ​

StatuscodeWann
401unauthenticatedToken fehlt oder ist ungültig
403forbiddenToken hat nicht content:catalog:read