GET · Export · Read · v2.1.0Export API
Exportieren Sie Daten aus dem Shop. Seit v2.1.0 mit RESTful URL-Paths: /categories/{id} gibt die Kategorie selbst zurück.
GET /Export/JSON/categories # Alle
GET /Export/JSON/categories/128 # ID 128
GET /Export/JSON/categories?id=128
/categories/{id} = Single Resource
Die Kategorie mit dieser ID
GET /Export/JSON/categories/128
→ Kategorie 128 ("xoPort REST API")
?parent_id={id} = Children
Kinder der Eltern-Kategorie
GET /Export/JSON/categories?parent_id=128
→ Unterkategorien von 128
Breaking Change v2.1.0: /categories/{id} gab früher die Kinder zurück. Jetzt nutzen Sie ?parent_id={id} für Children.
| Endpoint | Beschreibung | Beispiel |
|---|
GET /categories | Alle Kategorien | Kompletter Kategoriebaum |
GET /categories/{id} | Einzelne Kategorie | /categories/128 → ID 128 |
GET /categories?id={id} | Alternative zu URL-Path | ?id=128 |
GET /categories?parent_id={id} | Direkte Kinder | ?parent_id=128 |
GET /categories?parent_id={id}&recursive=1 | Vollständiger Subtree | Alle Nachkommen |
GET /categories?status=1 | Nur aktive | Filterung |
GET /categories?language=de | Nur Deutsch | Sprach-Filter |
GET /categories/productlist | Lightweight: Kategorie→Produkt Mapping NEU v2.12.0 | Pro Kategorie: IDs + Models |
GET /categories/productlist?categories_id={id} | Produkte einer Kategorie | ?categories_id=73 |
| Media NEU v2.16.0 | GET /Export/JSON/medias | media:read |
| Entity | Alle | Single | Scope |
|---|
| Produkte SQL-Pagination v2.12.0 | GET /products | GET /product/{id} | products:read |
| Kunden | GET /customers | GET /customer/{id} | customers:read |
| Hersteller | GET /manufacturers | GET /manufacturer/{id} | manufacturers:read |
| Bestellungen | GET /orders | GET /order/{id} | orders:read |
Belegdokumente NEU v2.61.0 PDF als content_base64 – direkt als Ticket-Anhang verwendbar | – | GET /order_document/{id}?type=rg | orders:read |
| News | GET /newsdesks | GET /newsdesk/{id} | news:read |
| News-Kategorien | GET /newsdeskcats | GET /newsdeskcat/{id} | newscategories:read |
| FAQ | GET /faqs | GET /faq/{id} | faq:read |
| FAQ-Kategorien | GET /faqcats | GET /faqcat/{id} | faqcategories:read |
| SEO History | GET /seohistorys | GET /seohistory/{id} | seohistory:read |
| Contracts | GET /contracts | GET /contracts/{id} | contracts:read |
| Newsletter Subscribers | GET /newsletter_subscribers | GET /newsletter_subscriber/{id} | newsletter:read |
| Newsletter Campaigns | GET /newsletters | GET /newsletter/{id} | newsletters:read |
Tickets CRUD v2.11.0 Mit claim und edit_lock (v2.118.0) | GET /tickets | GET /ticket/{id} | tickets:read |
Ticket Attachments Schreiben: attachments[] an POST/PUT /Import/JSON/tickets (v2.60.0) | GET /ticket_attachments/{id} | GET /ticket_attachment/{id}?file=name | tickets:read |
| Slider NEU v2.22.0 | GET /sliders | GET /slider/{id} | slider:read |
| Projekte (xoCRM) NEU v2.35.0 | GET /projects | GET /project/{id} | projects:read |
| Projektaufgaben NEU v2.35.0 | GET /project_tasks | GET /project_task/{id} | project_tasks:read |
| Termine (xoCRM) NEU v2.44.0 | GET /appointments | GET /appointment/{id} | appointments:read |
| Merkmale & Optionswerte NEU v2.96.0 | GET /products_options
GET /products_options_values | GET /products_option/{id} | products:read |
| Lieferzeit-Profile NEU v2.94.0 | GET /shipping_profiles | GET /shipping_profile/{id} | products:read |
| Steuerklassen NEU v2.90.0 | GET /tax_classes | GET /tax_class/{id} | products:read |
| Filter der Kategorieseiten NEU v2.100.0 | GET /products_filters | GET /products_filter/{fid} | products:read |
| Gutscheine & Kupons NEU v2.102.0 | GET /coupons | GET /coupon/{id} | orders:read |
| Ticket-Abteilungen NEU v2.103.0 | GET /ticket_departments | GET /ticket_department/{id} | tickets:read |
| Einstellungen NEU v2.108.0 | GET /configuration | – | configuration:read |
| CSV-/XLS-Porter NEU v2.109.0 | GET /porters | GET /porter/{id} | porters:read |
| Bewertungen NEU v2.122.6 | GET /reviews | GET /review/{id} | products:read |
Die einzelnen Bewertungen der Produktseite mit Sterne-Wertung, Überschrift, Text und Antwort des Shops je Sprache. Ohne Filter liefert die Liste nur freigegebene Bewertungen, also dieselben wie die Produktseite. Die Einzelabfrage /review/{id} liefert eine Bewertung auch vor der Freigabe.
| Parameter | Wirkung | Beispiel |
|---|
products_id | Bewertungen eines oder mehrerer Artikel | ?products_id=104648,104650 |
status | 1 freigegeben (Vorgabe), 0 wartet auf Freigabe, all beide | ?status=all |
since | angelegt oder zuletzt geändert ab | ?since=2026-10-05 |
Beispiel – täglicher Abgleich, auch zurückgezogene Freigaben:
GET /reviews?status=all&since=2026-10-05&limit=250&page=1
Keine Kundendaten. author ist der Name, den auch die Produktseite zeigt. Kunden-ID, E-Mail und Bestellnummer gibt der Endpunkt nicht aus, nur verified_purchase (Bewertung zu einer Bestellung). Deshalb genügt der Scope products:read. Gelöschte Bewertungen erscheinen nicht mehr in der Liste. Wer einen Bestand spiegelt, gleicht deshalb gelegentlich alle IDs ab.
{
"success": true,
"api_version": "2.1.0",
"type": "categories",
"count": 1,
"data": [
{
"categories_id": 128,
"parent_id": 97,
"status": 1,
"languages": {
"de": {
"categories_name": "xoPort REST API",
"categories_description": "..."
}
}
}
],
"timestamp": "2026-01-27 14:00:00"
}
Export starten
Erstellen Sie einen OAuth2 Client mit :read Scopes.
OAuth2 Client erstellen
Alle Export-Endpoints unterstützen Pagination über Query-Parameter:
| Parameter | Default | Max | Beschreibung |
|---|
limit | 50 | 250 | Maximale Anzahl Datensätze pro Request |
offset | 0 | — | Startposition im Ergebnis |
Beispiel: GET /products?limit=50&offset=100
Die Response enthält im stats-Objekt:
count — Anzahl zurückgegebener Datensätzelimit — Angewandtes Limitoffset — Angewandter Offsethas_more — true wenn weitere Datensätze verfügbar
Defaults konfigurierbar via XOPORT_API_MAX_LIMIT und XOPORT_API_DEFAULT_LIMIT.
Der Produkt-Export lässt sich serverseitig einschränken, statt den gesamten Katalog seitenweise abzuholen. Ein Komma trennt eine Einschlussliste (höchstens 100 Werte), mehrere Filter werden UND-verknüpft.
| Parameter | Wirkung | Beispiel |
|---|
status | Artikelstatus | ?status=1 |
tax_class_id | Steuerklasse | ?tax_class_id=0,1 |
categories_id | Artikel liegt in einer der Kategorien | ?categories_id=10039,10104 |
ean_prefix | EAN beginnt mit … | ?ean_prefix=978,979,977 |
model_prefix | Artikelnummer beginnt mit … | ?model_prefix=166- |
last_modified | geändert seit … | ?last_modified=2026-08-19 |
Beispiel – alle kaufbaren Artikel mit Buch-EAN, die nicht im ermäßigten Steuersatz stehen:
GET /products?ean_prefix=978,979,977&tax_class_id=0,1&status=1&limit=250
stats.total nennt dabei die Treffermenge des Filters, nicht die Katalogröße.
Es gibt bewusst keinen „ungleich“-Operator. „Alles außer Steuerklasse 2“ schreibt man als Einschlussliste der übrigen Klassen (?tax_class_id=0,1). Ein unbrauchbarer Filterwert wird mit HTTP 400 abgewiesen und nicht still verworfen – sonst käme der ungefilterte Katalog zurück. Filter an einer Einzelressource (/products/{id}) oder an einem ID-Bereich werden aus demselben Grund abgewiesen.