Online-Shop

Eigenen Shop über die API mit easySales verbinden

Eigenen Shop über die API mit easySales verbinden

Verbinden Sie jeden eigenen oder nicht unterstützten Shop über die API mit easySales: die zwei nötigen Zugangsdaten, Produkte und Bestände übertragen, Bestellungen übergeben und Änderungen zurückbekommen.

Wann Sie das brauchen

easySales bietet fertige Konnektoren für die gängigen Shop-Plattformen. Wenn Sie etwas Eigenes betreiben — einen intern entwickelten Shop oder eine Plattform, für die wir keine Integration haben —, können Sie ihn selbst über die API anbinden.

Das ist eine Entwickleraufgabe. Sie schreiben Code, der Ihren Katalog in easySales überträgt und Bestellungen übergibt, und easySales ruft Ihren Shop zurück, sobald sich etwas ändert. Nichts davon setzt ein installiertes Plugin voraus.

Wie die Verbindung funktioniert

Zwei Zugangsdaten sind im Spiel, und sie zu verwechseln ist der häufigste Grund, warum eine erste Integration 403 zurückgibt.

Zugangsdatum Woher es kommt Wie es gesendet wird Wenn es fehlt
Zugriffstoken POST /oauth/token, mit dem OAuth-Client, den Sie in den API-Einstellungen anlegen Header Authorization: Bearer <token> 401
Website-Token Der Schritt Konfiguration im Verbindungsassistenten Ein Feld website_token im Anfrage-Body, kein Header 403 Invalid website token
Die zwei Zugangsdaten und wofür jede gedacht ist

Beide werden bei jedem Schreibvorgang benötigt. Das Zugriffstoken belegt, wer aufruft; das Website-Token sagt, zu welchem Shop die Daten gehören.

Schritt 1 — Website anlegen

Gehen Sie zu Integrationen → Websites, klicken Sie auf Website verbinden, füllen Sie das Formular aus und wählen Sie anschließend die Kachel API und darunter die Version API V2.

Das Formular Website verbinden in easySales mit ausgewählter API-Kachel und grünem Haken, darunter die Versionskachel API V2 unter der Überschrift Wählen Sie die Plattformversion, die Ihre Website verwendet.
Wählen Sie die Kachel API und darunter API V2.
Feld Wirkung
Website-Name Ihre eigene Bezeichnung. Daran unterscheiden Sie Ihre Shops später.
Website-URL Die Adresse Ihres Shops, mit dem richtigen Protokoll.
Land Legt fest, welche Steuersätze das nächste Feld anbietet. Dauerhaft.
Preis-MwSt. Die Mehrwertsteuer für Produkte, die ohne eine solche eintreffen. Wird aus einer Liste gewählt, nicht getippt.
Versand-MwSt. Die Mehrwertsteuer auf die Lieferung, wenn eine Bestellung keine mitbringt.
Sprache / Währung Die Sprache des Shops und die Währung Ihrer Preise. Beide dauerhaft.
Benutzerdefinierter Status für neue Bestellung Optional. Legt jede importierte Bestellung in einen Ihrer eigenen Status.
Bestandsquelle Wo der maßgebliche Bestandswert liegt. Standardmäßig easySales.
Standard-Pakettyp Die Vorgabe beim Erzeugen von Versandlabels für diese Bestellungen.
Rechnungsserie Die Rechnungsserie, die verwendet wird, wenn Ihr Payload keine mitliefert.
Das Verbindungsformular

Schritt 2 — Website-Token kopieren

Der Schritt Konfiguration im Assistenten zeigt ein Token mit 60 Zeichen. Genau dieses erwähnt der alte Artikel nie, und genau dieses braucht jeder Schreibaufruf.

Der Schritt Konfiguration im easySales-Verbindungsassistenten für API V2 mit dem schreibgeschützten, 60 Zeichen langen erzeugten Website-Token und einer Schaltfläche zum Kopieren in die Zwischenablage.
Das Website-Token. Jeder Schreibaufruf führt es im Body mit.

Kopieren Sie es mit der Schaltfläche, statt es abzutippen, und hinterlegen Sie es als Geheimnis in Ihrer Anwendung. Klicken Sie auf Speichern, um die Website anzulegen.

Der Shop erscheint nun unter Integrationen → Websites und trägt dasselbe Token auf seiner Karte — dort finden Sie es später wieder.

Der Bildschirm Websites in easySales mit der Karte eines verbundenen API-V2-Shops samt URL, Preis-MwSt., Website-Token und dem Schalter Aktiv.
Ein verbundener API-Shop. Das Token auf der Karte ist dasselbe, das Ihr Code sendet.

Schritt 3 — OAuth-Client erstellen

Gehen Sie zu Einstellungen → API-Einstellungen. Dort liegen die OAuth-Zugangsdaten.

Der Bildschirm API-Einstellungen in easySales mit einem OAuth-Client samt Client-ID, Name und maskiertem Secret sowie einem persönlichen Zugriffstoken darunter.
Einstellungen → API-Einstellungen. OAuth-Clients oben, persönliche Zugriffstoken darunter.

Klicken Sie auf Neuen Kunden erstellen, benennen Sie ihn nach dem System, das aufrufen wird, und setzen Sie Grant-Typ auf Website Grant.

Das Formular zum Erstellen eines Clients in den easySales-API-Einstellungen mit ausgefülltem Namen und dem Grant-Typ Website Grant, samt Erläuterung, dass der Website Grant über ein website_token ein Zugriffstoken bezieht.
Website Grant — der Grant, der Ihr Website-Token gegen ein Zugriffstoken tauscht.

Website Grant ist genau dafür gebaut: Er tauscht Ihr Website-Token gegen ein Zugriffstoken, ohne Browser-Weiterleitung und ohne Benutzerinteraktion. Speichern Sie und kopieren Sie die angezeigte Client-ID und das Secret.

Schritt 4 — Zugriffstoken holen

POST https://easy-sales.com/oauth/token
Content-Type: application/json

{
  "grant_type":    "website",
  "client_id":     "your-client-id",
  "client_secret": "your-client-secret",
  "website_token": "your-60-character-website-token",
  "scope":         "add-products update-products update-stock add-orders update-orders read-orders"
}

Die Antwort ist ein gewöhnlicher OAuth-Body:

{
  "token_type":    "Bearer",
  "expires_in":    31536000,
  "access_token":  "eyJ0eXAiOiJKV1Qi...",
  "refresh_token": "def50200a1b2c3..."
}

Senden Sie es bei jedem weiteren Aufruf als Authorization: Bearer <access_token>.

Schritt 5 — Katalog übertragen

Die Basis-URL für alles Folgende ist https://easy-sales.com/api/v2.

Die Reihenfolge zählt. Kategorien und Merkmale müssen existieren, bevor ein Produkt auf sie verweisen kann, sonst wird der Produktaufruf abgelehnt.

  1. POST /categories/save — Ihre Kategorien
  2. POST /characteristics/save — Ihre Merkmale
  3. POST /products/save — Ihre Produkte
POST https://easy-sales.com/api/v2/products/save
Authorization: Bearer <access_token>
Content-Type: application/json

{
  "website_token": "your-60-character-website-token",
  "product": {
    "product_website_id": "10231",
    "sku": "TS-BLK-M",
    "name": "Black T-shirt, size M",
    "sale_price": 79.99,
    "full_price": 99.99,
    "stock": 24,
    "type": "simple",
    "tax_rate": 21,
    "url": "https://my-shop.example.com/p/ts-blk-m",
    "images": ["https://my-shop.example.com/img/ts-blk-m.jpg"],
    "categories": ["cat-778"],
    "characteristics": [{ "id": "char-12", "value": "Black" }]
  }
}
Feld Pflicht Hinweise
product_website_id Ja Die eigene ID Ihres Shops für das Produkt
sku Ja Je Website eindeutig; der Upsert-Schlüssel
name Ja
sale_price Ja Der Preis, den der Kunde zahlt
stock Ja Muss eine Zahl sein
type Ja simple oder complex
full_price Nein Preis vor Rabatt, sofern Sie einen ausweisen
tax_rate Nein Muss ein für das Land der Website gültiger Satz sein
categories Nein Ihre eigenen Kategorie-IDs — jede muss bereits existieren
characteristics Nein Ihre eigenen Merkmals-IDs — jede muss bereits existieren
images Nein Array von URLs, die wir abrufen können
weight, handling_time, description, url Nein Genutzt für Kuriere, Lieferschätzungen und Marktplatzangebote
Produktfelder

Schritt 6 — Bestände aktuell halten

Der Bestand ist das, was aktuell bleiben muss, und er ist der günstigste Aufruf, um ihn oft zu senden. Übergeben Sie bis zu 100 Zeilen auf einmal:

PATCH https://easy-sales.com/api/v2/stocks/bulk
Authorization: Bearer <access_token>

{
  "website_token": "your-60-character-website-token",
  "data": [
    { "sku": "TS-BLK-M", "stock": 24 },
    { "sku": "TS-BLK-L", "stock": 0 }
  ]
}

Jede SKU muss auf dieser Website bereits existieren; unbekannte werden abgelehnt und nicht angelegt.

Schritt 7 — Bestellungen übergeben

POST https://easy-sales.com/api/v2/orders/save
Authorization: Bearer <access_token>

{
  "website_token": "your-60-character-website-token",
  "order": {
    "order_id": "SO-100244",
    "order_date": "2026-09-09 14:31:00",
    "order_total": 179.98,
    "status": "new",
    "payment_mode": "card",
    "shipment_tax": 21,
    "billing_address":  { "country": "RO", "city": "Cluj-Napoca", "street": "Str. Memorandumului 4" },
    "shipping_address": { "country": "RO", "city": "Cluj-Napoca", "street": "Str. Memorandumului 4" },
    "order_products": [
      { "product_website_id": "10231", "sku": "TS-BLK-M", "name": "Black T-shirt, size M",
        "quantity": 2, "price": 79.99, "total": 159.98 }
    ]
  }
}

Senden Sie dieselbe order_id erneut, wird die Bestellung aktualisiert statt dupliziert — Wiederholungen sind damit gefahrlos.

Schritt 8 — Änderungen zurückbekommen

Ihr Shop muss wissen, wann eine Bestellung berechnet wurde, ein Versandlabel hat oder den Status wechselt. Abonnieren Sie einen Webhook, statt zu pollen:

GET https://easy-sales.com/api/v2/webhooks
Authorization: Bearer <access_token>
POST https://easy-sales.com/api/v2/webhooks/order-updated
Authorization: Bearer <access_token>

{
  "url":    "https://my-shop.example.com/hooks/easysales",
  "secret": "a-shared-secret-of-at-least-24-characters"
}

Sie abonnieren jeweils ein Ereignis, wiederholen Sie den Aufruf also für order-created, order-updated, awb-created, invoice-created und delivery-status-updated.

Jede Zustellung ist signiert, prüfen Sie also die Signatur, bevor Sie dem Inhalt vertrauen. Antworten Sie schnell — die Anfrage läuft nach wenigen Sekunden ab und wird nur begrenzt oft wiederholt, bestätigen Sie also zuerst und verarbeiten Sie danach.

Limits

Limit Wert
Anfragen 500 pro Minute über die gesamte API
Token-Anfragen 60 pro Minute — halten Sie Ihr Token im Cache
Produkte, Bestände, Preise, Kategorien, Merkmale je Sammelaufruf 100
Produkte je Sammelaufruf zum Archivieren 50
Websites pro Konto 30
Produktbeschreibung 65.534 Zeichen
Limits, um die herum Sie planen sollten

Wenn etwas fehlschlägt

Code Bedeutung Übliche Ursache
400 Invalid json Der Body ist kein gültiges JSON
401 Nicht authentifiziert Zugriffstoken fehlt, ist abgelaufen oder fehlerhaft
403 Invalid website token website_token fehlt oder ist falsch
403 The website has been deactivated Der Schalter Aktiv der Website ist aus
422 Validierung fehlgeschlagen Ein Pflichtfeld fehlt, eine SKU ist doppelt, oder eine Kategorie bzw. ein Merkmal existiert noch nicht
429 Zu viele Anfragen Mehr als 500 pro Minute
503 Vorübergehend nicht verfügbar Die Aufnahme staut sich; wiederholen Sie nach dem angegebenen Intervall
Was die einzelnen Antwortcodes bedeuten

Was auf unserer Seite fehlschlägt, landet außerdem unter Produkte → Online-Shops → Website-Fehler, samt Payload und einer Aktion zum erneuten Versuch — das ist meist schneller, als den Aufruf nachzustellen.

Referenz

Die vollständige Endpunkt-Referenz, mit jedem Feld und jeder Antwort, ist unter https://api.easy-sales.com veröffentlicht.

Häufig gestellte Fragen

Das Zugriffstoken ist ein OAuth2-Bearer-Token, das Ihr Konto identifiziert, und gehört in den Authorization-Header. Das Website-Token identifiziert genau einen Shop und gehört als website_token in den Anfrage-Body. Schreibaufrufe brauchen beide: 401 bedeutet, dass das Zugriffstoken falsch ist, 403 mit "Invalid website token" bedeutet, dass das Website-Token falsch ist.

Für einen eigenen Shop gibt es keine Aktualisierungsrate und kein Feld dafür im Formular. Nichts wird abgefragt — Sie entscheiden, wann Sie Produkte, Bestände und Bestellungen senden, und Änderungen erhalten Sie über Webhooks zurück. Der alte Artikel beschrieb ein Feld, das nicht mehr Teil des Verbindungsablaufs ist.

Nein. API-Websites werden nicht auf ihre Verbindung geprüft, denn easySales hat nichts aufzurufen, bevor Sie Daten senden. Die Kennzeichnung wird beim Anlegen des Datensatzes gesetzt. Der echte Test ist, ob Ihre Produkte unter Produkte → Online-Shops → Produkte erscheinen.

Website Grant. Er ist genau dafür gebaut: Er tauscht das Website-Token gegen ein Zugriffstoken, ohne Weiterleitung und ohne Benutzerinteraktion — genau das, was eine Server-zu-Server-Integration braucht. Persönliche Zugriffstoken funktionieren ebenfalls, gelten aber kontoweit statt für einen Shop und werden nur einmal angezeigt.

Zugriffstoken, Refresh-Token und persönliche Zugriffstoken sind jeweils ein Jahr gültig. Das Website-Token läuft überhaupt nicht ab — es lebt, bis Sie Refresh Token drücken oder die Website löschen. Halten Sie Ihr Zugriffstoken im Cache, statt pro Aufruf ein neues anzufordern; der Token-Endpunkt ist auf 60 Anfragen pro Minute begrenzt.

Kategorien und Merkmale müssen existieren, bevor ein Produkt auf sie verweisen kann. Senden Sie zuerst die Kategorien, dann die Merkmale, dann die Produkte. Dasselbe gilt für Bestandsaktualisierungen im Bulk: Jede SKU muss auf der Website bereits existieren.

Ja, wenn Sie die /save-Endpunkte verwenden. POST /products/save führt ein Upsert auf die SKU aus und POST /orders/save eines auf order_id, Wiederholungen sind also gefahrlos und mehrfache Zustellungen erzeugen keine Duplikate. Die einfachen Endpunkte POST /products und POST /orders lehnen Duplikate stattdessen mit 422 ab.

Bei einem eigenen Shop nicht. Der Bestand läuft nur in eine Richtung, von Ihrem Shop nach easySales, Ihr Shop bleibt also die maßgebliche Quelle. Zurück kommt Bestellbezogenes: Statusänderungen, Versandlabels und Rechnungen, zugestellt über die Webhooks, die Sie abonnieren.

War dieser Leitfaden hilfreich?