Export-API: Shop-Daten per GET abrufen

GET · Export · Read · v2.1.0

Export 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

RESTful URL-Paths (v2.1.0)

Intuitive Ressourcen-Adressierung:

/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.

Categories Export

EndpointBeschreibungBeispiel
GET /categoriesAlle KategorienKompletter 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=1Vollständiger SubtreeAlle Nachkommen
GET /categories?status=1Nur aktiveFilterung
GET /categories?language=deNur DeutschSprach-Filter
GET /categories/productlistLightweight: Kategorie→Produkt Mapping NEU v2.12.0Pro Kategorie: IDs + Models
GET /categories/productlist?categories_id={id}Produkte einer Kategorie?categories_id=73
Media NEU v2.16.0GET /Export/JSON/mediasmedia:read

Weitere Export-Endpoints

EntityAlleSingleScope
Produkte SQL-Pagination v2.12.0GET /productsGET /product/{id}products:read
KundenGET /customersGET /customer/{id}customers:read
HerstellerGET /manufacturersGET /manufacturer/{id}manufacturers:read
BestellungenGET /ordersGET /order/{id}orders:read
Belegdokumente NEU v2.61.0
PDF als content_base64 – direkt als Ticket-Anhang verwendbar
–GET /order_document/{id}?type=rgorders:read
NewsGET /newsdesksGET /newsdesk/{id}news:read
News-KategorienGET /newsdeskcatsGET /newsdeskcat/{id}newscategories:read
FAQGET /faqsGET /faq/{id}faq:read
FAQ-KategorienGET /faqcatsGET /faqcat/{id}faqcategories:read
SEO HistoryGET /seohistorysGET /seohistory/{id}seohistory:read
ContractsGET /contractsGET /contracts/{id}contracts:read
Newsletter SubscribersGET /newsletter_subscribersGET /newsletter_subscriber/{id}newsletter:read
Newsletter CampaignsGET /newslettersGET /newsletter/{id}newsletters:read
Tickets CRUD v2.11.0
Mit claim und edit_lock (v2.118.0)
GET /ticketsGET /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=nametickets:read
Slider NEU v2.22.0GET /slidersGET /slider/{id}slider:read
Projekte (xoCRM) NEU v2.35.0GET /projectsGET /project/{id}projects:read
Projektaufgaben NEU v2.35.0GET /project_tasksGET /project_task/{id}project_tasks:read
Termine (xoCRM) NEU v2.44.0GET /appointmentsGET /appointment/{id}appointments:read
Merkmale & Optionswerte NEU v2.96.0GET /products_options
GET /products_options_values
GET /products_option/{id}products:read
Lieferzeit-Profile NEU v2.94.0GET /shipping_profilesGET /shipping_profile/{id}products:read
Steuerklassen NEU v2.90.0GET /tax_classesGET /tax_class/{id}products:read
Filter der Kategorieseiten NEU v2.100.0GET /products_filtersGET /products_filter/{fid}products:read
Gutscheine & Kupons NEU v2.102.0GET /couponsGET /coupon/{id}orders:read
Ticket-Abteilungen NEU v2.103.0GET /ticket_departmentsGET /ticket_department/{id}tickets:read
Einstellungen NEU v2.108.0GET /configuration–configuration:read
CSV-/XLS-Porter NEU v2.109.0GET /portersGET /porter/{id}porters:read
Bewertungen NEU v2.122.6GET /reviewsGET /review/{id}products:read

Produktbewertungen v2.122.6

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.

ParameterWirkungBeispiel
products_idBewertungen eines oder mehrerer Artikel?products_id=104648,104650
status1 freigegeben (Vorgabe), 0 wartet auf Freigabe, all beide?status=all
sinceangelegt 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.

Response-Format

{
  "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

Pagination v2.10.0

Alle Export-Endpoints unterstützen Pagination über Query-Parameter:

ParameterDefaultMaxBeschreibung
limit50250Maximale Anzahl Datensätze pro Request
offset0—Startposition im Ergebnis

Beispiel: GET /products?limit=50&offset=100

Die Response enthält im stats-Objekt:

  • count — Anzahl zurückgegebener Datensätze
  • limit — Angewandtes Limit
  • offset — Angewandter Offset
  • has_more — true wenn weitere Datensätze verfügbar

Defaults konfigurierbar via XOPORT_API_MAX_LIMIT und XOPORT_API_DEFAULT_LIMIT.


Produktfilter v2.65.0

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.

ParameterWirkungBeispiel
statusArtikelstatus?status=1
tax_class_idSteuerklasse?tax_class_id=0,1
categories_idArtikel liegt in einer der Kategorien?categories_id=10039,10104
ean_prefixEAN beginnt mit …?ean_prefix=978,979,977
model_prefixArtikelnummer beginnt mit …?model_prefix=166-
last_modifiedgeä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.

Sichere API-Authentifizierung

Die xoPort API verwendet ein mehrschichtiges Sicherheitskonzept, das sowohl einfache als auch hochsichere Authentifizierungsmethoden unterstützt. Von der IP-basierten Whitelist für interne Server bis hin zu Scope-beschränkten API-Keys für Drittanbieter-Integrationen.

Best Practices

  • Verwenden Sie für jede Integration einen separaten API-Key
  • Beschränken Sie Scopes auf das notwendige Minimum (Principle of Least Privilege)
  • Setzen Sie Ablaufdaten für temporäre Integrationen
  • Überwachen Sie die Usage-Logs regelmäßig
  • Rotieren Sie API-Keys periodisch