Skip to content

Artikel ​

Artikel sind die bestellbaren Einheiten: Hauptartikel, Zubehör und Ersatzteile. Sie werden über ihre Bestellnummer (ordernumber) angesprochen.

Die API liefert nur Artikel mit is_active. Artikel nach ihrem Auslaufdatum (end_of_life) bleiben drin, weil Ersatzteile für Maschinen gesucht werden, die nicht mehr verkauft werden. Preise, Preislisten und Lagerbestand kommen nie mit.

MethodePfadAnmeldung
GET/articleskeine
GET/articles/{ordernumber}keine
GET/content/articlesToken mit content:catalog:read
GET/content/articles/{ordernumber}Token mit content:catalog:read

Felder eines Artikels ​

FeldTypBedeutung
idIntegerInterne ID
typeStringmain (Hauptartikel), accessory (Zubehör) oder spare (Ersatzteil)
type_codeString | nullTypcode aus dem ERP: 130 Ersatzteil, 131 und 133 Konfigurator-/Bestellartikel, 141 Merchandise
ordernumberStringBestellnummer, kann Leerzeichen enthalten (z. B. 131 7810)
namesObjektBezeichnung je Sprache
short_namesObjektKurzbezeichnung je Sprache
descriptionsObjektBeschreibung je Sprache
weightString | nullGewicht in kg als Dezimaltext mit drei Nachkommastellen, z. B. "12.500"
customs_tariff_numberString | nullZolltarifnummer
sale_startDatum | nullVerkaufsstart
end_of_lifeDatum | nullAuslaufdatum
productsProdukt[]Nur in der Detailansicht
manufacturersHersteller[]Nur in der Detailansicht
tractor_modelsTraktormodell[]Nur in der Detailansicht
taxonsTerm[]Nur in der Detailansicht, ohne taxonomy_slug

Die Wenn-Dann-Regeln eines Artikels (erfordert/empfiehlt/schließt aus) gibt die API derzeit nicht aus.


Artikel auflisten ​

GET /articles

Liefert aktive Artikel, sortiert nach ordernumber, seitenweise. Die Liste enthält keine Relationen.

Query-Parameter ​

ParameterTypBedeutung
searchStringTeiltreffer in ordernumber oder im deutschen Namen. Keine Synonyme, keine Schlagwörter, keine Wort-Zerlegung
pageIntegerSeite, Standard 1
per_pageIntegerStandard 15, keine Obergrenze im Code (bitte höchstens 100)

Einen Filter nach Typ oder Produkt gibt es nicht. Die Artikel eines Produkts holen Sie über GET /products/{slug}.

Beispiel ​

bash
curl -sS 'https://admin.matev.eu/api/v1/articles?search=7810&per_page=20' \
  -H 'Accept: application/json'
js
const params = new URLSearchParams({ search: '7810', per_page: '20' })
const res = await fetch(`https://admin.matev.eu/api/v1/articles?${params}`, {
  headers: { Accept: 'application/json' },
})
const { data: articles } = await res.json()
php
use Illuminate\Support\Facades\Http;

$articles = Http::acceptJson()
    ->get('https://admin.matev.eu/api/v1/articles', ['search' => '7810', 'per_page' => 20])
    ->throw()
    ->json('data');

Antwort 200 ​

json
{
  "data": [
    {
      "id": 1201,
      "type": "main",
      "type_code": "131",
      "ordernumber": "131 7810",
      "names": { "de": "Schneepflug SP 250 Grundgerät", "en": "Snow plough SP 250 base unit" },
      "short_names": { "de": "SP 250" },
      "descriptions": { "de": "" },
      "weight": "320.000",
      "customs_tariff_number": "84303100",
      "sale_start": null,
      "end_of_life": null
    }
  ],
  "links": { "first": "…?page=1", "last": "…?page=1", "prev": null, "next": null },
  "meta": { "current_page": 1, "from": 1, "last_page": 1, "path": "https://admin.matev.eu/api/v1/articles", "per_page": 20, "to": 1, "total": 1, "links": [] }
}

Fehler ​

StatuscodeWann
405method_not_allowedandere Methode als GET
500server_errorFehler auf dem Server

Einen Artikel abrufen ​

GET /articles/{ordernumber}

Pfad-Parameter ​

ParameterTypBedeutung
ordernumberStringBestellnummer. Leerzeichen URL-kodieren: 131%207810

Die Detailansicht enthält products, manufacturers, tractor_models und taxons. Die Produkte darin sind schlank: Bilder sind dabei, aber keine taxons, kein articles_count und keine weiteren Relationen. Die Traktormodelle haben kein manufacturer und keine series.

Beispiel ​

bash
curl -sS 'https://admin.matev.eu/api/v1/articles/131%207810' \
  -H 'Accept: application/json'
js
const nr = '131 7810'
const res = await fetch(`https://admin.matev.eu/api/v1/articles/${encodeURIComponent(nr)}`, {
  headers: { Accept: 'application/json' },
})
const { data: article } = await res.json()
php
use Illuminate\Support\Facades\Http;

$nr = '131 7810';
$article = Http::acceptJson()
    ->get('https://admin.matev.eu/api/v1/articles/'.rawurlencode($nr))
    ->throw()
    ->json('data');

Antwort 200 ​

json
{
  "data": {
    "id": 1201,
    "type": "main",
    "type_code": "131",
    "ordernumber": "131 7810",
    "names": { "de": "Schneepflug SP 250 Grundgerät" },
    "short_names": { "de": "SP 250" },
    "descriptions": { "de": "" },
    "weight": "320.000",
    "customs_tariff_number": "84303100",
    "sale_start": null,
    "end_of_life": null,
    "products": [
      {
        "id": 41,
        "slug": "schneepflug-sp-250",
        "objekttyp": "produkt",
        "ordernumber": "SP-250",
        "names": { "de": "Schneepflug SP 250" },
        "descriptions": { "de": "<p>…</p>" },
        "product_page_url": null,
        "features": null,
        "sale_start": null,
        "end_of_life": null,
        "primary_image": null,
        "images": [],
        "created_at": "2026-01-15T10:30:00+00:00",
        "updated_at": "2026-09-30T14:22:00+00:00"
      }
    ],
    "manufacturers": [
      { "id": 4, "slug": "john-deere", "short_name": "JD", "names": { "de": "John Deere" } }
    ],
    "tractor_models": [
      { "id": 230, "identifier": "JD-3038E", "model": "3038E", "type_of_tractor": "Kompakttraktor", "manufacturer_id": 4, "tractor_series_id": 17 }
    ],
    "taxons": [
      { "id": 88, "taxonomy_id": 3, "parent_id": 80, "slug": "schneepfluege", "names": "Schneepflüge", "position": 2 }
    ]
  }
}

Fehler ​

StatuscodeWann
404not_foundKeine Bestellnummer dieser Art, oder der Artikel ist inaktiv
405method_not_allowedandere Methode als GET
500server_errorFehler auf dem Server

Mit Token: /content/articles ​

GET /content/articles und GET /content/articles/{ordernumber} sind identisch mit den öffentlichen Endpunkten, brauchen aber ein Token mit content:catalog:read.

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

curl -sS 'https://admin.matev.eu/api/v1/content/articles/131%207810' \
  -H 'Accept: application/json' \
  -H "Authorization: Bearer $MATEV_TOKEN"
js
// Serverseitig ausführen; das Token gehört nicht in den Browser.
const headers = { Accept: 'application/json', Authorization: `Bearer ${process.env.CONTENT_API_TOKEN}` }
const list = await (await fetch('https://admin.matev.eu/api/v1/content/articles?search=7810', { headers })).json()
const one = await (await fetch(`https://admin.matev.eu/api/v1/content/articles/${encodeURIComponent('131 7810')}`, { headers })).json()
php
use Illuminate\Support\Facades\Http;

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

$list = $api->get('/content/articles', ['search' => '7810'])->throw()->json('data');
$one = $api->get('/content/articles/'.rawurlencode('131 7810'))->throw()->json('data');

Zusätzliche Fehler ​

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