Appearance
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.
| Methode | Pfad | Anmeldung |
|---|---|---|
GET | /articles | keine |
GET | /articles/{ordernumber} | keine |
GET | /content/articles | Token mit content:catalog:read |
GET | /content/articles/{ordernumber} | Token mit content:catalog:read |
Felder eines Artikels
| Feld | Typ | Bedeutung |
|---|---|---|
id | Integer | Interne ID |
type | String | main (Hauptartikel), accessory (Zubehör) oder spare (Ersatzteil) |
type_code | String | null | Typcode aus dem ERP: 130 Ersatzteil, 131 und 133 Konfigurator-/Bestellartikel, 141 Merchandise |
ordernumber | String | Bestellnummer, kann Leerzeichen enthalten (z. B. 131 7810) |
names | Objekt | Bezeichnung je Sprache |
short_names | Objekt | Kurzbezeichnung je Sprache |
descriptions | Objekt | Beschreibung je Sprache |
weight | String | null | Gewicht in kg als Dezimaltext mit drei Nachkommastellen, z. B. "12.500" |
customs_tariff_number | String | null | Zolltarifnummer |
sale_start | Datum | null | Verkaufsstart |
end_of_life | Datum | null | Auslaufdatum |
products | Produkt[] | Nur in der Detailansicht |
manufacturers | Hersteller[] | Nur in der Detailansicht |
tractor_models | Traktormodell[] | Nur in der Detailansicht |
taxons | Term[] | 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
| Parameter | Typ | Bedeutung |
|---|---|---|
search | String | Teiltreffer in ordernumber oder im deutschen Namen. Keine Synonyme, keine Schlagwörter, keine Wort-Zerlegung |
page | Integer | Seite, Standard 1 |
per_page | Integer | Standard 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
| Status | code | Wann |
|---|---|---|
| 405 | method_not_allowed | andere Methode als GET |
| 500 | server_error | Fehler auf dem Server |
Einen Artikel abrufen
GET /articles/{ordernumber}
Pfad-Parameter
| Parameter | Typ | Bedeutung |
|---|---|---|
ordernumber | String | Bestellnummer. 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
| Status | code | Wann |
|---|---|---|
| 404 | not_found | Keine Bestellnummer dieser Art, oder der Artikel ist inaktiv |
| 405 | method_not_allowed | andere Methode als GET |
| 500 | server_error | Fehler 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
| Status | code | Wann |
|---|---|---|
| 401 | unauthenticated | Token fehlt oder ist ungültig |
| 403 | forbidden | Token hat nicht content:catalog:read |