Händler-API

Verbinde deine Warenwirtschaft, dein Shopsystem oder deinen Dropshipping-Lieferanten direkt mit deinem eveyamin-Shop: Produkte anlegen und pflegen, Bestand in Sekunden abgleichen, bezahlte Bestellungen abholen und den Versand melden.

Einstieg

Die Händler-API ist eine REST-Schnittstelle mit JSON unter https://eveyamin.com/api/v1. Feldnamen und Werte sind deutsch – Kategorien, Farben, Größen und Status genau so, wie sie im Shop stehen. Eine Anbindung baut dein Entwickler, deine Agentur oder ein Middleware-Dienst; fertige Plugins für einzelne Warenwirtschaften gibt es nicht.

Schlüssel erstellen

  1. Unter Einstellungen → API-Zugang einen Schlüssel erstellen und nur die Berechtigungen wählen, die die Anbindung braucht.
  2. Den Schlüssel sofort kopieren und sicher ablegen – er wird nur dieses eine Mal angezeigt.
  3. Bei jeder Anfrage im Header Authorization: Bearer <Schlüssel> mitsenden.
BerechtigungErlaubt
produkte:schreibenProdukte anlegen, ändern, lesen und archivieren
bestand:schreibenBestand lesen und setzen
bestellungen:lesenBestellungen abrufen und bestätigen (sobald dein Shop live ist)
bestellungen:versendenVersand mit Sendungsnummer melden
Schlüssel gehören auf einen Server, nie in eine Webseite oder App. Bis zu 10 Schlüssel sind möglich – nimm für jede Anbindung einen eigenen, dann kannst du einen einzeln widerrufen. Widerrufe einen Schlüssel sofort, wenn er in falsche Hände geraten sein könnte.

Erster Aufruf

Anfrage
curl https://eveyamin.com/api/v1/ping \
  -H "Authorization: Bearer evy_live_…"
Antwort
{
  "ok": true,
  "umgebung": "live",
  "haendler_id": "5a03da19-…",
  "schluessel": {
    "name": "Warenwirtschaft",
    "praefix": "evy_live_Ab3x",
    "berechtigungen": ["bestand:schreiben", "bestellungen:lesen"]
  }
}

Live und Test

Schlüssel beginnen mit evy_live_ (Shop) oder evy_test_ (Testumgebung) und gelten nur dort, wo sie erstellt wurden. Ein Schlüssel aus der anderen Umgebung bekommt 401 keyWrongEnvironment.

Deutsche Werte

Kategorien kommen als vollständiger Pfad (eve-Home > Bettwäsche > Bettwäsche-Sets), Farben und Größen genau wie im Shop. GET /api/v1/taxonomy liefert alle Kategorien mit ihren Größen und alle Farben. Kleine Abweichungen korrigiert die API selbst (weiss → Weiß, 200x200 → 200 x 200 cm) und meldet das als Hinweis. Eigene Bezeichnungen deiner Warenwirtschaft ordnest du einmal im CSV-Import zu; die Zuordnung gilt auch für die API.

Grenzen

WasGrenze
Anfragen pro Schlüssel120 pro Minute, darüber 429 mit Retry-After
Größe einer Anfrage1024 KB
Zeilen pro Bestandsaufruf500
Varianten pro Produkt500
Bilder pro Produkt20
Produkte pro Seite100
Bestellungen pro Seite100

Jede Antwort ist JSON und wird nicht zwischengespeichert. Aufrufe aus dem Browser (CORS) sind nicht freigeschaltet.

Produkte

Ein Produkt besteht aus seinen Angaben und seinen Varianten (Farbe × Größe). Es gelten dieselben Regeln wie im Produktformular und im CSV-Import: Was dort abgelehnt wird, lehnt auch die API ab – mit denselben Codes. Die Feldnamen sind die Spaltennamen der CSV-Vorlage.

POST /api/v1/products
{
  "uebergeordnete_sku": "BW-SATIN-01",
  "titel": "Satin-Bettwäsche Uni",
  "beschreibung": "Bettwäsche aus 100 % Baumwollsatin, mit Reißverschluss.",
  "kategorie": "eve-Home > Bettwäsche > Bettwäsche-Sets",
  "rabattpreis": 44.90,
  "varianten": [
    {
      "farbe": "Weiß",
      "groesse": "135 x 200 cm",
      "preis": 49.90,
      "lagerbestand": 12,
      "sku": "BW-SATIN-01-W-135",
      "ean": "4006381333931",
      "bild_urls": ["https://bilder.example-shop.de/bw-satin-weiss.jpg"]
    },
    {
      "farbe": "Weiß",
      "groesse": "155 x 220 cm",
      "preis": "59,90",
      "lagerbestand": 5,
      "sku": "BW-SATIN-01-W-155"
    }
  ]
}
  • uebergeordnete_sku ist dein Schlüssel für das Produkt, eindeutig in deinem Shop. Damit sprichst du es später an: /products/BW-SATIN-01.
  • kategorie ist der vollständige Pfad; jede groesse muss zur Kategorie gehören.
  • preis steht je Variante. Preise dürfen sich nur je Größe unterscheiden, nicht je Farbe; der niedrigste ist der Grundpreis. rabattpreis gilt für das ganze Produkt, ohne ihn gibt es keinen Rabatt.
  • Zahlen dürfen auch als Text kommen, deutsch oder englisch ("59,90").
  • sku und ean je Variante sind freiwillig. Fehlt das Feld, bleibt der gespeicherte Code; null löscht ihn. Die EAN braucht eine gültige Prüfziffer.
  • bild_urls: https-Adressen. Die Bilder werden geladen und bei uns gespeichert; die Galerie darf auch nur an der ersten Variante stehen.
  • versandkosten ist freiwillig: ohne gilt bei neuen Produkten deine Voreinstellung, bei vorhandenen bleibt der Wert.

Anlegen, ersetzen, lesen

AufrufWirkung
POST /productsLegt das Produkt an: 201. Gibt es die Übergeordnete SKU schon: 409 productExists mit dem vorhandenen Produkt.
PUT /products/{id}Ersetzt das ganze Produkt; Varianten, die fehlen, werden archiviert. Gibt es {id} noch nicht und nennt der Inhalt {id} als uebergeordnete_sku, wird es angelegt (Upsert); sonst 404.
GET /products/{id}Das Produkt in genau der Form, die PUT erwartet, plus Lesefelder (id, artikelnummer, status, geaendert_am, variant_id). Du kannst es unverändert zurückschicken.
GET /productsAlle deine Produkte, älteste Änderung zuerst, archivierte inklusive – mit geaendert_seit nur die seither geänderten.
DELETE /products/{id}Archiviert das Produkt; ein zweiter Aufruf ändert nichts.

{id} darf die eveyamin-Produkt-ID, deine Übergeordnete SKU oder die eveyamin-Artikelnummer sein. Ein Produkt, das du im Formular angelegt hast, bekommt seine Übergeordnete SKU einmal über PUT /products/{artikelnummer} mit uebergeordnete_sku im Inhalt; eine vorhandene änderst du nur im Produktformular.

Ergebnis

ergebnis ist angelegt, aktualisiert oder unveraendert. Hat sich nichts geändert, wird nichts geschrieben und nichts neu übersetzt – ein vollständiger Abgleich aller Produkte kostet daher fast nichts. hinweise nennt korrigierte Schreibweisen und Bilder, die nicht geladen werden konnten. Neue Produkte werden zuerst übersetzt (Status „Wird übersetzt“) und gehen dann online.

Bilder

  • Bilder werden während des Aufrufs geladen. Dauert das zu lange, antwortet die API mit 202 und einem Auftrag (Location: /api/v1/jobs/{id}). Frag den Auftrag ab, bis er fertig ist; das Produkt wird erst gespeichert, wenn seine Bilder da sind.
  • Jede Bildadresse wird nur einmal geladen. Für ein geändertes Bild brauchst du eine neue Adresse, z. B. mit ?v=2.
  • Kommt für dasselbe Produkt eine neuere Anfrage, wird ein offener Auftrag ersetzt.

Bestand im Produktaufruf

Für Varianten, die schon im Verkauf sind, ändert ein Produktaufruf den Bestand nicht – dafür ist der Bestandsaufruf da. Ein abweichender lagerbestand kommt als Hinweis stockIgnored zurück. Neue Produkte und neue Varianten übernehmen den gesendeten Bestand.

Archiviert, gesperrt, Meterware

Archivierte Produkte stellst du im Dashboard wieder her; PUT und POST antworten 409 productArchived. Gesperrte Produkte: 409 productBlocked. Meterware (Stoffe) gibt es in der API noch nicht: 409 productMeterware.

Bestand abgleichen

Der Bestandsaufruf ändert nur Bestände, nie das Produkt. So hält deine Warenwirtschaft den Bestand auf eveyamin aktuell und verkauft nichts doppelt, wenn du auf mehreren Kanälen verkaufst.

PATCH /api/v1/stock
{
  "positionen": [
    { "sku": "BW-SATIN-01-W-135", "lagerbestand": 11, "stand": "2026-10-09T14:05:00+02:00" },
    { "produkt": "BW-SATIN-01", "farbe": "Weiß", "groesse": "155 x 220 cm", "lagerbestand": 0 }
  ]
}
  • Eine Zeile spricht eine Variante über sku an oder über produkt + farbe + groesse. Bis zu 500 Zeilen pro Aufruf, über alle Produkte.
  • lagerbestand ist dein Bestand. Gespeichert wird er minus der Stück in offenen eveyamin-Bestellungen, die dein System noch nicht bestätigt hat – die kennt deine Zählung ja noch nicht.
  • Sende stand mit, den Zeitpunkt deiner Zählung. Eine Zeile mit älterem stand als dem zuletzt übernommenen wird ignoriert (veraltet).
  • Jede Zeile hat ihr eigenes Ergebnis: ok, unveraendert, veraltet oder fehler. Eine fehlerhafte Zeile hält die anderen nicht auf.
  • Bei 503 busy wurde nichts gespeichert; wiederhole die Anfrage nach Retry-After Sekunden.

So gehst du vor

  1. Einmal GET /stock seitenweise abrufen und deine Artikel den Varianten zuordnen, am besten über die sku.
  2. Bei jeder Bestandsänderung, oder z. B. alle fünf Minuten, PATCH /stock mit den geänderten Zeilen und stand.
  3. Neue Bestellungen abholen und bestätigen – erst danach zählen sie nicht mehr als offen.

Bestellungen und Dropshipping

Bezahlte Bestellungen mit deinen Positionen holst du ab, bestätigst sie und meldest den Versand. Positionen anderer Händler derselben Bestellung siehst du nicht.

  1. GET /orders/new – bezahlte Bestellungen, die dein System noch nicht bestätigt hat, älteste zuerst. Eine Bestellung bleibt dort, bis du sie bestätigst; geht eine Antwort verloren, kommt sie beim nächsten Abruf wieder.
  2. POST /orders/{id}/acknowledge – dein System hat sie übernommen. Bis zu 100 auf einmal mit POST /orders/acknowledge.
  3. POST /orders/{id}/fulfill mit Versanddienstleister und Sendungsnummer – die Positionen werden „Versendet“, und der Käufer bekommt eine Mail mit dem Link zur Sendungsverfolgung.
  4. GET /orders?geaendert_seit=… – später eingetretene Stornierungen und Erstattungen. Merke dir das letzte geaendert_am und frag mit etwas Überlappung.
POST /api/v1/orders/1042/fulfill
{
  "versanddienstleister": "DHL",
  "sendungsnummer": "00340434161234567890"
}
  • {id} ist die eveyamin-Bestell-ID oder die Bestellnummer.
  • Versanddienstleister: DHL, DPD, Hermes, GLS, UPS, Deutsche Post oder Sonstige (dann mit eigenem tracking_url).
  • Mehrere Pakete: ein Aufruf je Sendungsnummer, mit den positionen des Pakets. Dieselbe Sendungsnummer noch einmal ändert nichts und schickt keine zweite Mail.
  • Die Lieferadresse enthält Name, Anschrift und Telefon, aber keine E-Mail-Adresse: Mit dem Käufer kommuniziert eveyamin.
Dropshipping: Gib deinem Lieferanten einen eigenen Schlüssel mit nur bestellungen:lesen und bestellungen:versenden. Er sieht dann weder Produkte noch Bestand. Du bleibst für ihn verantwortlich, auch für den Umgang mit den Käuferdaten – siehe AGB und Datenschutzerklärung.

Testumgebung

Zum Entwickeln gibt es eine Testumgebung unter https://staging--eveyamin.netlify.app. Sie hat eigene Daten und eigene Schlüssel (evy_test_…), und von dort geht keine Mail an Käufer.

  1. Registriere dich auf https://staging--eveyamin.netlify.app und schreib uns an info@eveyamin.com – wir richten dein Konto als Testshop ein.
  2. Erstelle dort unter Einstellungen → API-Zugang einen Testschlüssel.
  3. Lege Produkte über die API an und erzeuge Testbestellungen.
Testbestellung
curl -X POST https://staging--eveyamin.netlify.app/api/v1/sandbox/orders \
  -H "Authorization: Bearer evy_test_…"

POST /sandbox/orders legt eine bezahlte Bestellung über eine deiner Varianten an – ohne Inhalt über die erste mit Bestand, oder gezielt mit {"positionen": [{"sku": "…", "menge": 2}]}. Käuferin ist die erfundene Erika Mustermann. Die Bestellung läuft durch alles wie eine echte: /orders/new, Bestätigen, Versand melden. Höchstens 30 pro Stunde. Den gleichen Knopf findest du in der Testumgebung unter API-Zugang; im Live-Shop gibt es den Aufruf nicht.

Die Testumgebung ist kein Archiv: Ihre Daten können jederzeit zurückgesetzt werden.

Fehler

Fehler haben immer dieselbe Form:

{
  "fehler": [
    {
      "code": "colorUnknown",
      "feld": "varianten[1].farbe",
      "nachricht": "Unbekannte Farbe „Weis“. Meintest du „Weiß“?"
    }
  ]
}

Werte code aus: Er ist stabil und englisch. nachricht ist deutsch und kann sich ändern; feld ist der JSON-Pfad des betroffenen Felds oder null.

StatusBedeutung
200 / 201Erledigt; 201 bei einem neu angelegten Produkt oder einer Testbestellung
202Angenommen, die Bilder laden noch (Auftrag)
400Kein gültiges JSON oder ungültige Parameter
401Kein, ungültiger oder widerrufener Schlüssel
403Berechtigung fehlt oder Shop noch nicht freigegeben
404Nicht gefunden – oder nicht deins
409Konflikt mit Schlüssel oder Zustand (z. B. Übergeordnete SKU schon vergeben)
422Inhalt ungültig
429Zu viele Anfragen
500 / 503Fehler bei uns oder kurz nicht erreichbar – später wiederholen

Jeder Aufruf

CodeStatusBedeutung
invalidJson400Der Inhalt ist kein gültiges JSON.
invalidQuery400seite, pro_seite oder geaendert_seit ist ungültig.
keyMissing401Kein Schlüssel im Header Authorization: Bearer ….
keyInvalid401Unbekannter oder widerrufener Schlüssel, oder das Konto ist nicht aktiv.
keyWrongEnvironment401Ein Testschlüssel im Live-Shop oder umgekehrt.
scopeMissing403Dem Schlüssel fehlt die Berechtigung für diesen Aufruf.
registrationNotApproved403Die Shop-Registrierung ist noch nicht freigegeben (Bestellungen: Shop noch nicht live).
apiNotEnabled403Die API ist für deinen Shop noch nicht freigeschaltet.
notFound404Unbekannter Pfad.
bodyTooLarge413Die Anfrage ist zu groß.
rateLimited429Zu viele Anfragen; warte so viele Sekunden, wie Retry-After sagt.
internal500Unerwarteter Fehler bei uns; später wiederholen.
unavailable503Der Dienst ist kurz nicht erreichbar; nach Retry-After wiederholen.

Produkte

CodeStatusBedeutung
productNotFound404Kein solches Produkt von dir.
jobNotFound404Kein solcher Auftrag von dir.
productExists409Die Übergeordnete SKU gibt es schon; die Antwort nennt das Produkt. Nimm PUT.
productArchived409Das Produkt ist archiviert; im Dashboard wiederherstellen.
productBlocked409Das Produkt ist gesperrt und kann nicht geändert werden.
productMeterware409Meterware gibt es in der API noch nicht.
parentSkuDuplicate409Die Übergeordnete SKU ist bei dir schon vergeben.
imagesFailed422Kein Bild des Produkts ließ sich laden.
writeFailed500Das Produkt konnte nicht gespeichert werden; später wiederholen.
tooManyVariants422Mehr Varianten als erlaubt.
invalidValue422Ein Wert hat die falsche Form.

Bestand

CodeStatusBedeutung
invalidBody422Erwartet wird { "positionen": [ … ] } (bzw. die Form des Aufrufs).
noLines422positionen ist leer.
tooManyLines422Zu viele Zeilen; auf mehrere Anfragen aufteilen.
busy503Der Bestand wird gerade anderswo geändert; nichts gespeichert, wiederholen.
invalidLinein der ZeileDie Zeile ist kein Objekt.
identifierMissingin der ZeileWeder sku noch produkt + farbe + groesse.
stockInvalidin der Zeilelagerbestand ist keine erlaubte ganze Zahl.
standInvalidin der Zeilestand ist kein Zeitpunkt nach ISO 8601 mit Zeitzone.
standInFuturein der Zeilestand liegt in der Zukunft.
variantNotFoundin der ZeileKeine aktive Variante dazu.
keyMismatchin der ZeileDie SKU gehört zu einer anderen Kombination als die übrigen Angaben der Zeile.
duplicateLinein der ZeileDieselbe Variante steht schon in einer früheren Zeile.

Bestellungen und Versand

CodeStatusBedeutung
orderNotFound404Keine solche bezahlte Bestellung mit Positionen von dir.
noEntries422bestellungen ist leer.
tooManyEntries422Zu viele Bestellungen in einer Anfrage.
invalidEntryin der ZeileWeder Bestell-ID noch Bestellnummer.
orderNotShippable409Nur bezahlte Bestellungen lassen sich versenden.
nothingToShip409Keine deiner Positionen ist mehr „In Bearbeitung“.
invalidCarrier422Unbekannter Versanddienstleister.
invalidTrackingNumber422Sendungsnummer: 4–40 Zeichen aus A–Z, 0–9 und -.
invalidTrackingUrl422tracking_url ist kein https-Link.
lineNotFound422Keine deiner Positionen dieser Bestellung hat diese ID.
lineNotShippable422Die Position ist nicht mehr „In Bearbeitung“.
lineInOtherShipment422Die Position ist schon mit einer anderen Sendungsnummer versendet.

Testumgebung

CodeStatusBedeutung
noStock422Keine Variante mit Bestand für die Testbestellung.
sandboxLimit429Zu viele Testbestellungen in der letzten Stunde.

Hinweise

CodeStatusBedeutung
stockIgnoredHinweisBestand einer Variante im Verkauf nicht übernommen; dafür ist der Bestandsaufruf da.
valueMappedHinweisWert über deine Zuordnung übernommen.

Produktprüfung

Produkte werden wie im CSV-Import geprüft. Diese Codes kommen in fehler (409 bei Schlüsselkonflikten, sonst 422) oder als Hinweis:

CodeStatusBedeutung
required422„…“ ist ein Pflichtfeld.
tooLong422„…“ ist zu lang (höchstens … Zeichen).
tooShort422„…“ ist zu kurz (mindestens … Zeichen).
numberInvalid422„…“ ist keine gültige Zahl.
priceRange422„…“ liegt nicht zwischen … und ….
stockInvalid422„…“ ist kein gültiger Lagerbestand (ganze Zahl von 0 bis …).
categoryUnknown422Unbekannte Kategorie „…“.
categoryIncomplete422Die Kategorie „…“ ist unvollständig – bitte bis zur untersten Ebene angeben.
categoryNotOffered422Die Kategorie „…“ wird nicht mehr angeboten.
colorUnknown422Unbekannte Farbe „…“.
sizeUnknown422Unbekannte Größe „…“.
sizeNotInCategory422Die Größe „…“ wird in „…“ nicht angeboten.
duplicateCombination422Die Kombination … steht bereits in ⁦varianten[…]⁩.
priceVariesByColor422Der Preis für … weicht von ⁦varianten[…]⁩ ab. Preise dürfen sich nur je Größe unterscheiden, nicht je Farbe.
discountAboveBase422Der Rabattpreis (… €) liegt über dem niedrigsten Preis (… €).
imageUrlInvalid422„…“ ist keine gültige Bildadresse (https://…).
tooManyImages422… Bilder – höchstens … pro Produkt.
noImages422Bitte mindestens eine Bild-URL pro Produkt angeben.
skuDuplicateInFile422Die SKU „…“ steht bereits in ⁦varianten[…]⁩.
skuTaken409Die SKU „…“ gehört schon zu einem anderen deiner Produkte.
eanInvalid422„…“ ist keine gültige EAN (8, 12, 13 oder 14 Ziffern mit gültiger Prüfziffer).
ambiguousMatch409„…“ passt zu mehr als einem bestehenden Produkt (Artikelnummer …).
parentSkuLocked409Das Produkt … hat schon die Übergeordnete SKU „…“. Eine vorhandene Übergeordnete SKU änderst du im Produktformular.
parentSkuOfOther409„…“ gehört schon zu deinem Produkt …, die eveyamin-Artikelnummer aber zu …. Bitte gib eine andere Übergeordnete SKU an.
categoryFixedHinweisKategorie als „…“ übernommen.
colorFixedHinweisFarbe „…“ als „…“ übernommen.
sizeFixedHinweisGröße „…“ als „…“ übernommen.
imageFailedHinweisBild nicht übernommen (…): …

Referenz

Alle Aufrufe mit Parametern und Feldern, direkt aus der Schnittstelle erzeugt. Für Postman, Insomnia oder Code-Generatoren gibt es die OpenAPI-Datei.

Allgemein

Schlüssel prüfen und die deutschen Werte des Shops abrufen.

GET/api/v1/ping

Schlüssel prüfen

Antwortet mit dem Händler und den Berechtigungen des Schlüssels.

Berechtigung: jeder gültige Schlüssel

Antworten

  • 200 Der Schlüssel gilt. – Ping
    FeldTypPflichtBeschreibung
    oktrueja
    umgebungstringjalive = Shop, test = Testumgebung.Werte: live, test
    haendler_idstringjaDeine Händler-ID bei eveyamin.
    schluesselobjectja
    schluessel.namestringja
    schluessel.praefixstringjaAnfang des Schlüssels, z. B. evy_live_Ab3x.
    schluessel.berechtigungenstring[]jaWerte: produkte:schreiben, bestand:schreiben, bestellungen:lesen, bestellungen:versenden
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
GET/api/v1/taxonomy

Kategorien, Größen und Farben

Die Werte, die Produkte und Bestand verwenden – zum Zuordnen der eigenen Werte. Dieselben Listen wie in der Import-Vorlage.

Berechtigung: jeder gültige Schlüssel

Antworten

  • 200 Die aktuellen Listen. – Taxonomie
    FeldTypPflichtBeschreibung
    kategorienobject[]jaJede Kategorie, unter der ein Produkt stehen kann.
    kategorien[].pfadstringjaVollständiger Kategoriepfad, mit „ > “ getrennt, z. B. „eve-Home > Bettwäsche > Bettwäsche-Sets“.
    kategorien[].groessenstring[]jaGrößen, die diese Kategorie anbietet.
    farbenstring[]jaAlle Farben, z. B. „Weiß“ oder „Ohne Farbe“.
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.

Produkte

Produkte anlegen, ersetzen, lesen und archivieren (WP2).

POST/api/v1/products

Produkt anlegen

Ein Produkt mit allen Farbe-×-Größe-Kombinationen (varianten, höchstens 500), geprüft nach denselben Regeln wie der Katalog-Import und das Produktformular, mit denselben Fehlercodes. Den Bestand bestehender Kombinationen ändert nur PATCH /products/{id}/stock: ein abweichender lagerbestand bleibt unberücksichtigt (Hinweis stockIgnored); neue Produkte und neue Kombinationen übernehmen ihn. Fehlende Kombinationen werden archiviert. Fehlen sku oder ean bei einer Variante, bleiben die gespeicherten. Bilder werden zu eveyamin geladen; eine schon geladene Adresse wird nicht erneut geladen, ein geändertes Bild braucht also eine neue Adresse. Dauert das Laden zu lange, antwortet der Aufruf mit 202 und einem Auftrag (/jobs/{id}); das Produkt wird geschrieben, sobald die Bilder da sind. Ein unverändertes Produkt wird nicht geschrieben und nicht neu übersetzt (unveraendert). Neue und geänderte Titel und Beschreibungen werden übersetzt, bevor das Produkt sichtbar wird. uebergeordnete_sku ist hier Pflicht; gibt es sie schon: 409 productExists mit dem Produkt.

Berechtigung: produkte:schreiben

Inhalt – ProduktAnfrage
FeldTypPflichtBeschreibung
uebergeordnete_skustring | nullneinDeine Produktnummer, eindeutig in deinem Shop, max. 100 Zeichen. Pflicht beim Anlegen.
titelstringjaMax. 100 Zeichen.
beschreibungstringja10 bis 10.000 Zeichen.
kategoriestringjaVollständiger Pfad, z. B. „eve-Home > Bettwäsche > Bettwäsche-Sets“ (siehe /taxonomy).
rabattpreisnumber | string | nullnein
versandkostennumber | string | nullnein
variantenProduktVarianteEingabe[]ja
varianten[].farbestringjaFarbe wie im Shop, z. B. „Weiß“ (siehe /taxonomy).
varianten[].groessestringjaGröße aus der Größenliste der Kategorie, z. B. „M“ oder „200 x 200 cm“.
varianten[].preisnumber | stringjaPreis dieser Variante in EUR, brutto. Preise dürfen sich nur je Größe unterscheiden; der niedrigste ist der Grundpreis.
varianten[].lagerbestandnumber | stringjaBestand, 0 bis 10.000. Gilt nur für neue Produkte und neue Kombinationen; den Bestand bestehender Kombinationen änderst du über /products/{id}/stock.
varianten[].skustring | nullneinDeine SKU dieser Kombination, eindeutig in deinem Shop, max. 64 Zeichen.
varianten[].eanstring | nullneinEAN / GTIN (8, 12, 13 oder 14 Ziffern mit Prüfziffer). Fehlt der Schlüssel, bleibt die gespeicherte EAN; null löscht sie.
varianten[].bild_urlsstring[]neinÖffentliche https-Bildadressen. Ein Bild nur bei Varianten bestimmter Farben gehört zu diesen Farben, eines bei allen Farben gilt für alle; stehen alle Bilder nur bei einer Farbe (z. B. nur bei der ersten Variante), gelten sie für alle. Bekannte Adressen werden nicht neu geladen – ein geändertes Bild braucht eine neue Adresse.

Antworten

  • 201 Angelegt (Location: /api/v1/products/{id}). – ProduktErgebnis
    FeldTypPflichtBeschreibung
    ergebnisstringjaunveraendert: Das Produkt war schon so; nichts wurde geschrieben oder neu übersetzt.Werte: angelegt, aktualisiert, unveraendert
    produktProduktja
    produkt.idstringjaeveyamin-Produkt-ID.
    produkt.artikelnummerstringjaeveyamin-Artikelnummer.
    produkt.uebergeordnete_skustring | nullja
    produkt.statusstringjaNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Werte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkt.titelstringja
    produkt.beschreibungstringja
    produkt.kategoriestringja
    produkt.rabattpreisnumber | nullja
    produkt.versandkostennumber | nullja
    produkt.geaendert_amstringjaLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkt.variantenobject[]ja
    produkt.varianten[].variant_idstringja
    produkt.varianten[].farbestringja
    produkt.varianten[].groessestringja
    produkt.varianten[].preisnumberja
    produkt.varianten[].lagerbestandintegerjaGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkt.varianten[].skustring | nullja
    produkt.varianten[].eanstring | nullja
    produkt.varianten[].bild_urlsstring[]jaDie Bilder dieser Farbe, bei eveyamin gespeichert.
    hinweiseobject[]jaZ. B. korrigierte Schreibweisen, nicht geladene Bilder, ignorierter Bestand.
    hinweise[].codestringja
    hinweise[].feldstring | nullja
    hinweise[].nachrichtstringja
  • 202 Die Bilder werden noch geladen (Location: /api/v1/jobs/{id}). – ProduktInArbeit
    FeldTypPflichtBeschreibung
    ergebnis"in_arbeit"ja
    auftragAuftragja
    auftrag.idstringja
    auftrag.statusstringjaersetzt: Eine neuere Anfrage für dasselbe Produkt kam dazwischen; dieser Auftrag wird nicht mehr geschrieben.Werte: wartet, in_arbeit, fertig, fehlgeschlagen, ersetzt
    auftrag.aktionstringjaWerte: anlegen, aktualisieren
    auftrag.schluesselstringjaÜbergeordnete SKU des Produkts, oder seine Artikelnummer, wenn es keine hat.
    auftrag.bilderobjectja
    auftrag.bilder.gesamtintegerja(-9007199254740991–9007199254740991)
    auftrag.bilder.geladenintegerja(-9007199254740991–9007199254740991)
    auftrag.bilder.fehlgeschlagenintegerja(-9007199254740991–9007199254740991)
    auftrag.produktobject | nulljaSobald das Produkt geschrieben ist.
    auftrag.produkt.idstringja
    auftrag.produkt.artikelnummerstringja
    auftrag.produkt.uebergeordnete_skustring | nullja
    auftrag.produkt.statusstringjaWerte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    auftrag.fehlerstring | nulljaWarum der Auftrag fehlgeschlagen ist.
    auftrag.hinweiseobject[]ja
    auftrag.hinweise[].codestringja
    auftrag.hinweise[].feldstring | nullja
    auftrag.hinweise[].nachrichtstringja
    auftrag.erstellt_amstringjaEingang der Anfrage. ISO 8601, UTC.
    auftrag.abgeschlossen_amstring | nullja
    hinweiseobject[]ja
    hinweise[].codestringja
    hinweise[].feldstring | nullja
    hinweise[].nachrichtstringja
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 409 Schlüssel- oder Zustandskonflikt: productExists, productArchived, productBlocked, productMeterware, skuTaken, parentSkuLocked, parentSkuOfOther, ambiguousMatch.
  • 422 Ungültige Angaben, mit den Codes des Katalog-Imports (z. B. required, colorUnknown, sizeNotInCategory, priceVariesByColor, noImages, eanInvalid) und dem JSON-Pfad in feld.
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
GET/api/v1/products

Produkte

Deine Produkte, älteste Änderung zuerst, auch archivierte (status Archiviert), damit dein System Löschungen sieht. Meterware fehlt. Mit geaendert_seit nur seither geänderte – auch Bestandsänderungen zählen.

Berechtigung: produkte:schreiben

Parameter

FeldTypPflichtBeschreibung
seite (query)integerneinSeite, ab 1.
pro_seite (query)integerneinProdukte pro Seite, höchstens 100.
geaendert_seit (query)string (date-time)neinNur Produkte, die danach geändert wurden (ISO 8601 mit Zeitzone).

Antworten

  • 200 Eine Seite Produkte. – ProduktListe
    FeldTypPflichtBeschreibung
    seiteintegerja(-9007199254740991–9007199254740991)
    pro_seiteintegerja(-9007199254740991–9007199254740991)
    gesamtintegerjaProdukte insgesamt (mit geaendert_seit: seither geänderte). (-9007199254740991–9007199254740991)
    produkteProdukt[]ja
    produkte[].idstringjaeveyamin-Produkt-ID.
    produkte[].artikelnummerstringjaeveyamin-Artikelnummer.
    produkte[].uebergeordnete_skustring | nullja
    produkte[].statusstringjaNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Werte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkte[].titelstringja
    produkte[].beschreibungstringja
    produkte[].kategoriestringja
    produkte[].rabattpreisnumber | nullja
    produkte[].versandkostennumber | nullja
    produkte[].geaendert_amstringjaLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkte[].variantenobject[]ja
    produkte[].varianten[].variant_idstringja
    produkte[].varianten[].farbestringja
    produkte[].varianten[].groessestringja
    produkte[].varianten[].preisnumberja
    produkte[].varianten[].lagerbestandintegerjaGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkte[].varianten[].skustring | nullja
    produkte[].varianten[].eanstring | nullja
    produkte[].varianten[].bild_urlsstring[]jaDie Bilder dieser Farbe, bei eveyamin gespeichert.
  • 400 geaendert_seit, seite oder pro_seite ungültig (invalidQuery).
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
GET/api/v1/products/{id}

Ein Produkt

In der Form, die PUT annimmt: den Inhalt kannst du unverändert zurückschicken (dann: unveraendert).

Berechtigung: produkte:schreiben

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.

Antworten

  • 200 Das Produkt. – Produkt
    FeldTypPflichtBeschreibung
    idstringjaeveyamin-Produkt-ID.
    artikelnummerstringjaeveyamin-Artikelnummer.
    uebergeordnete_skustring | nullja
    statusstringjaNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Werte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    titelstringja
    beschreibungstringja
    kategoriestringja
    rabattpreisnumber | nullja
    versandkostennumber | nullja
    geaendert_amstringjaLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    variantenobject[]ja
    varianten[].variant_idstringja
    varianten[].farbestringja
    varianten[].groessestringja
    varianten[].preisnumberja
    varianten[].lagerbestandintegerjaGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    varianten[].skustring | nullja
    varianten[].eanstring | nullja
    varianten[].bild_urlsstring[]jaDie Bilder dieser Farbe, bei eveyamin gespeichert.
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Kein solches Produkt von dir (productNotFound).
  • 409 Meterware wird über die API noch nicht unterstützt (productMeterware).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
PUT/api/v1/products/{id}

Produkt ersetzen

Ein Produkt mit allen Farbe-×-Größe-Kombinationen (varianten, höchstens 500), geprüft nach denselben Regeln wie der Katalog-Import und das Produktformular, mit denselben Fehlercodes. Den Bestand bestehender Kombinationen ändert nur PATCH /products/{id}/stock: ein abweichender lagerbestand bleibt unberücksichtigt (Hinweis stockIgnored); neue Produkte und neue Kombinationen übernehmen ihn. Fehlende Kombinationen werden archiviert. Fehlen sku oder ean bei einer Variante, bleiben die gespeicherten. Bilder werden zu eveyamin geladen; eine schon geladene Adresse wird nicht erneut geladen, ein geändertes Bild braucht also eine neue Adresse. Dauert das Laden zu lange, antwortet der Aufruf mit 202 und einem Auftrag (/jobs/{id}); das Produkt wird geschrieben, sobald die Bilder da sind. Ein unverändertes Produkt wird nicht geschrieben und nicht neu übersetzt (unveraendert). Neue und geänderte Titel und Beschreibungen werden übersetzt, bevor das Produkt sichtbar wird. Gibt es {id} noch nicht und ist es die uebergeordnete_sku des Inhalts, wird das Produkt angelegt. Ein Produkt ohne Übergeordnete SKU bekommt sie über seine Artikelnummer als {id}; eine vorhandene ändert nur das Produktformular.

Berechtigung: produkte:schreiben

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.
Inhalt – ProduktAnfrage
FeldTypPflichtBeschreibung
uebergeordnete_skustring | nullneinDeine Produktnummer, eindeutig in deinem Shop, max. 100 Zeichen. Pflicht beim Anlegen.
titelstringjaMax. 100 Zeichen.
beschreibungstringja10 bis 10.000 Zeichen.
kategoriestringjaVollständiger Pfad, z. B. „eve-Home > Bettwäsche > Bettwäsche-Sets“ (siehe /taxonomy).
rabattpreisnumber | string | nullnein
versandkostennumber | string | nullnein
variantenProduktVarianteEingabe[]ja
varianten[].farbestringjaFarbe wie im Shop, z. B. „Weiß“ (siehe /taxonomy).
varianten[].groessestringjaGröße aus der Größenliste der Kategorie, z. B. „M“ oder „200 x 200 cm“.
varianten[].preisnumber | stringjaPreis dieser Variante in EUR, brutto. Preise dürfen sich nur je Größe unterscheiden; der niedrigste ist der Grundpreis.
varianten[].lagerbestandnumber | stringjaBestand, 0 bis 10.000. Gilt nur für neue Produkte und neue Kombinationen; den Bestand bestehender Kombinationen änderst du über /products/{id}/stock.
varianten[].skustring | nullneinDeine SKU dieser Kombination, eindeutig in deinem Shop, max. 64 Zeichen.
varianten[].eanstring | nullneinEAN / GTIN (8, 12, 13 oder 14 Ziffern mit Prüfziffer). Fehlt der Schlüssel, bleibt die gespeicherte EAN; null löscht sie.
varianten[].bild_urlsstring[]neinÖffentliche https-Bildadressen. Ein Bild nur bei Varianten bestimmter Farben gehört zu diesen Farben, eines bei allen Farben gilt für alle; stehen alle Bilder nur bei einer Farbe (z. B. nur bei der ersten Variante), gelten sie für alle. Bekannte Adressen werden nicht neu geladen – ein geändertes Bild braucht eine neue Adresse.

Antworten

  • 200 Aktualisiert, oder unveraendert. – ProduktErgebnis
    FeldTypPflichtBeschreibung
    ergebnisstringjaunveraendert: Das Produkt war schon so; nichts wurde geschrieben oder neu übersetzt.Werte: angelegt, aktualisiert, unveraendert
    produktProduktja
    produkt.idstringjaeveyamin-Produkt-ID.
    produkt.artikelnummerstringjaeveyamin-Artikelnummer.
    produkt.uebergeordnete_skustring | nullja
    produkt.statusstringjaNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Werte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkt.titelstringja
    produkt.beschreibungstringja
    produkt.kategoriestringja
    produkt.rabattpreisnumber | nullja
    produkt.versandkostennumber | nullja
    produkt.geaendert_amstringjaLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkt.variantenobject[]ja
    produkt.varianten[].variant_idstringja
    produkt.varianten[].farbestringja
    produkt.varianten[].groessestringja
    produkt.varianten[].preisnumberja
    produkt.varianten[].lagerbestandintegerjaGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkt.varianten[].skustring | nullja
    produkt.varianten[].eanstring | nullja
    produkt.varianten[].bild_urlsstring[]jaDie Bilder dieser Farbe, bei eveyamin gespeichert.
    hinweiseobject[]jaZ. B. korrigierte Schreibweisen, nicht geladene Bilder, ignorierter Bestand.
    hinweise[].codestringja
    hinweise[].feldstring | nullja
    hinweise[].nachrichtstringja
  • 201 Angelegt. – ProduktErgebnis
    FeldTypPflichtBeschreibung
    ergebnisstringjaunveraendert: Das Produkt war schon so; nichts wurde geschrieben oder neu übersetzt.Werte: angelegt, aktualisiert, unveraendert
    produktProduktja
    produkt.idstringjaeveyamin-Produkt-ID.
    produkt.artikelnummerstringjaeveyamin-Artikelnummer.
    produkt.uebergeordnete_skustring | nullja
    produkt.statusstringjaNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Werte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkt.titelstringja
    produkt.beschreibungstringja
    produkt.kategoriestringja
    produkt.rabattpreisnumber | nullja
    produkt.versandkostennumber | nullja
    produkt.geaendert_amstringjaLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkt.variantenobject[]ja
    produkt.varianten[].variant_idstringja
    produkt.varianten[].farbestringja
    produkt.varianten[].groessestringja
    produkt.varianten[].preisnumberja
    produkt.varianten[].lagerbestandintegerjaGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkt.varianten[].skustring | nullja
    produkt.varianten[].eanstring | nullja
    produkt.varianten[].bild_urlsstring[]jaDie Bilder dieser Farbe, bei eveyamin gespeichert.
    hinweiseobject[]jaZ. B. korrigierte Schreibweisen, nicht geladene Bilder, ignorierter Bestand.
    hinweise[].codestringja
    hinweise[].feldstring | nullja
    hinweise[].nachrichtstringja
  • 202 Die Bilder werden noch geladen (Location: /api/v1/jobs/{id}). – ProduktInArbeit
    FeldTypPflichtBeschreibung
    ergebnis"in_arbeit"ja
    auftragAuftragja
    auftrag.idstringja
    auftrag.statusstringjaersetzt: Eine neuere Anfrage für dasselbe Produkt kam dazwischen; dieser Auftrag wird nicht mehr geschrieben.Werte: wartet, in_arbeit, fertig, fehlgeschlagen, ersetzt
    auftrag.aktionstringjaWerte: anlegen, aktualisieren
    auftrag.schluesselstringjaÜbergeordnete SKU des Produkts, oder seine Artikelnummer, wenn es keine hat.
    auftrag.bilderobjectja
    auftrag.bilder.gesamtintegerja(-9007199254740991–9007199254740991)
    auftrag.bilder.geladenintegerja(-9007199254740991–9007199254740991)
    auftrag.bilder.fehlgeschlagenintegerja(-9007199254740991–9007199254740991)
    auftrag.produktobject | nulljaSobald das Produkt geschrieben ist.
    auftrag.produkt.idstringja
    auftrag.produkt.artikelnummerstringja
    auftrag.produkt.uebergeordnete_skustring | nullja
    auftrag.produkt.statusstringjaWerte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    auftrag.fehlerstring | nulljaWarum der Auftrag fehlgeschlagen ist.
    auftrag.hinweiseobject[]ja
    auftrag.hinweise[].codestringja
    auftrag.hinweise[].feldstring | nullja
    auftrag.hinweise[].nachrichtstringja
    auftrag.erstellt_amstringjaEingang der Anfrage. ISO 8601, UTC.
    auftrag.abgeschlossen_amstring | nullja
    hinweiseobject[]ja
    hinweise[].codestringja
    hinweise[].feldstring | nullja
    hinweise[].nachrichtstringja
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Kein solches Produkt von dir, und der Inhalt nennt {id} nicht als uebergeordnete_sku (productNotFound).
  • 409 Schlüssel- oder Zustandskonflikt: productExists, productArchived, productBlocked, productMeterware, skuTaken, parentSkuLocked, parentSkuOfOther, ambiguousMatch.
  • 422 Ungültige Angaben, mit den Codes des Katalog-Imports (z. B. required, colorUnknown, sizeNotInCategory, priceVariesByColor, noImages, eanInvalid) und dem JSON-Pfad in feld.
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
DELETE/api/v1/products/{id}

Produkt archivieren

Archiviert das Produkt; es wird nicht gelöscht und kann im Dashboard wiederhergestellt werden. Wiederholbar (bereits_archiviert).

Berechtigung: produkte:schreiben

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.

Antworten

  • 200 Archiviert. – ProduktArchiviert
    FeldTypPflichtBeschreibung
    ergebnisstringjaWerte: archiviert, bereits_archiviert
    produktobjectja
    produkt.idstringja
    produkt.artikelnummerstringja
    produkt.uebergeordnete_skustring | nullja
    produkt.statusstringjaWerte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Kein solches Produkt von dir (productNotFound).
  • 409 Das Produkt ist gesperrt (productBlocked).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
GET/api/v1/jobs/{id}

Auftrag

Stand eines Produktaufrufs, der mit 202 geantwortet hat: wartet, in_arbeit, fertig (mit dem Produkt), fehlgeschlagen (mit dem Grund) oder ersetzt (eine neuere Anfrage für dasselbe Produkt kam dazwischen).

Berechtigung: produkte:schreiben

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaAuftrags-ID aus der 202-Antwort.

Antworten

  • 200 Der Auftrag. – Auftrag
    FeldTypPflichtBeschreibung
    idstringja
    statusstringjaersetzt: Eine neuere Anfrage für dasselbe Produkt kam dazwischen; dieser Auftrag wird nicht mehr geschrieben.Werte: wartet, in_arbeit, fertig, fehlgeschlagen, ersetzt
    aktionstringjaWerte: anlegen, aktualisieren
    schluesselstringjaÜbergeordnete SKU des Produkts, oder seine Artikelnummer, wenn es keine hat.
    bilderobjectja
    bilder.gesamtintegerja(-9007199254740991–9007199254740991)
    bilder.geladenintegerja(-9007199254740991–9007199254740991)
    bilder.fehlgeschlagenintegerja(-9007199254740991–9007199254740991)
    produktobject | nulljaSobald das Produkt geschrieben ist.
    produkt.idstringja
    produkt.artikelnummerstringja
    produkt.uebergeordnete_skustring | nullja
    produkt.statusstringjaWerte: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    fehlerstring | nulljaWarum der Auftrag fehlgeschlagen ist.
    hinweiseobject[]ja
    hinweise[].codestringja
    hinweise[].feldstring | nullja
    hinweise[].nachrichtstringja
    erstellt_amstringjaEingang der Anfrage. ISO 8601, UTC.
    abgeschlossen_amstring | nullja
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Kein solcher Auftrag von dir (jobNotFound).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.

Bestand

Bestand lesen und setzen, ohne das Produkt anzufassen (WP3).

GET/api/v1/stock

Bestand aller Varianten

Jede aktive Variante mit Artikelnummer, Übergeordneter SKU, SKU, Farbe, Größe, gespeichertem Bestand und offenen Stück – zum Zuordnen deiner Artikel und zum Abgleich. Meterware fehlt (noch nicht in der API).

Berechtigung: bestand:schreiben

Parameter

FeldTypPflichtBeschreibung
seite (query)integerneinSeite, ab 1.
pro_seite (query)integerneinVarianten pro Seite, höchstens 500.

Antworten

  • 200 Eine Seite Varianten. – BestandListe
    FeldTypPflichtBeschreibung
    seiteintegerja(-9007199254740991–9007199254740991)
    pro_seiteintegerja(-9007199254740991–9007199254740991)
    gesamtintegerjaVarianten insgesamt. (-9007199254740991–9007199254740991)
    positionenobject[]ja
    positionen[].produkt_idstringja
    positionen[].artikelnummerstringja
    positionen[].uebergeordnete_skustring | nullja
    positionen[].skustring | nullja
    positionen[].eanstring | nulljaEAN / GTIN der Variante, sonst null.
    positionen[].farbestringja
    positionen[].groessestringja
    positionen[].titelstringja
    positionen[].lagerbestandintegerjaGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegerjaStück in offenen eveyamin-Bestellungen. (-9007199254740991–9007199254740991)
    positionen[].standstring | nulljaZuletzt übernommener stand.
    positionen[].gesperrtbooleanjaDas Produkt ist gesperrt; sein Bestand kann nicht geändert werden.
  • 400 seite oder pro_seite ungültig (invalidQuery).
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
PATCH/api/v1/stock

Bestand mehrerer Produkte setzen

Bis zu 500 Zeilen über alle Produkte, je über sku oder produkt + farbe + groesse. Gespeichert wird lagerbestand minus der Stück in offenen eveyamin-Bestellungen (reserviert, noch nicht erledigt und von deinem System noch nicht bestätigt), mindestens 0 – so werden Bestellungen, die dein System noch nicht kennt, nicht doppelt verkauft. Eine Bestellung, die du nach dem stand der Zeile bestätigt hast, zählt noch als offen: deine Zählung war älter. Sende daher stand mit. Jede Zeile hat ihr eigenes Ergebnis; eine fehlerhafte Zeile hält die anderen nicht auf. Unveränderte Werte werden nicht geschrieben.

Berechtigung: bestand:schreiben

Inhalt – BestandAnfrage
FeldTypPflichtBeschreibung
positionenBestandZeile[]ja
positionen[].skustringneinDeine SKU der Variante. Alternativ: produkt + farbe + groesse.
positionen[].farbestringneinFarbe wie im Shop, z. B. „Weiß“.
positionen[].groessestringneinGröße wie im Shop, z. B. „M“ oder „200 x 200 cm“.
positionen[].lagerbestandintegerjaDein Bestand der Variante. Gespeichert wird dieser Wert abzüglich der offenen eveyamin-Bestellungen (siehe offen). (0–10000)
positionen[].standstring (date-time)neinZeitpunkt deiner Zählung (ISO 8601 mit Zeitzone). Eine Zeile mit älterem stand als dem zuletzt übernommenen wird ignoriert (veraltet).
positionen[].produktstringneineveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.

Antworten

  • 200 Ergebnis je Zeile. – BestandErgebnis
    FeldTypPflichtBeschreibung
    zusammenfassungobjectja
    zusammenfassung.okintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.unveraendertintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.veraltetintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.fehlerintegerja(-9007199254740991–9007199254740991)
    positionenobject[]ja
    positionen[].zeileintegerjaIndex der Zeile in positionen, ab 0. (-9007199254740991–9007199254740991)
    positionen[].statusstringjaok = gespeichert, unveraendert = war schon so, veraltet = älterer stand, fehler = siehe fehler.Werte: ok, unveraendert, veraltet, fehler
    positionen[].produkt_idstringnein
    positionen[].artikelnummerstringnein
    positionen[].uebergeordnete_skustring | nullnein
    positionen[].skustring | nullnein
    positionen[].eanstring | nullneinEAN / GTIN der Variante, sonst null.
    positionen[].farbestringnein
    positionen[].groessestringnein
    positionen[].gesendetintegerneinDein lagerbestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegerneinStück in offenen eveyamin-Bestellungen, die abgezogen wurden. (-9007199254740991–9007199254740991)
    positionen[].vorherintegerneinGespeicherter Bestand vor dieser Anfrage. (-9007199254740991–9007199254740991)
    positionen[].lagerbestandintegerneinGespeicherter Bestand jetzt: gesendet − offen, mindestens 0. (-9007199254740991–9007199254740991)
    positionen[].fehlerobjectnein
    positionen[].fehler.codestringja
    positionen[].fehler.feldstring | nullja
    positionen[].fehler.nachrichtstringja
    positionen[].hinweiseobject[]neinZ. B. eine korrigierte Schreibweise.
    positionen[].hinweise[].codestringja
    positionen[].hinweise[].feldstring | nullja
    positionen[].hinweise[].nachrichtstringja
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 422 Kein { positionen: [...] }, leer, oder mehr als 500 Zeilen.
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
  • 503 Der Bestand wird gerade an anderer Stelle geändert (busy); nichts wurde gespeichert, bitte wiederholen.
GET/api/v1/products/{id}/stock

Bestand eines Produkts

Berechtigung: bestand:schreiben

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.
seite (query)integerneinSeite, ab 1.
pro_seite (query)integerneinVarianten pro Seite, höchstens 500.

Antworten

  • 200 Die Varianten des Produkts. – BestandListe
    FeldTypPflichtBeschreibung
    seiteintegerja(-9007199254740991–9007199254740991)
    pro_seiteintegerja(-9007199254740991–9007199254740991)
    gesamtintegerjaVarianten insgesamt. (-9007199254740991–9007199254740991)
    positionenobject[]ja
    positionen[].produkt_idstringja
    positionen[].artikelnummerstringja
    positionen[].uebergeordnete_skustring | nullja
    positionen[].skustring | nullja
    positionen[].eanstring | nulljaEAN / GTIN der Variante, sonst null.
    positionen[].farbestringja
    positionen[].groessestringja
    positionen[].titelstringja
    positionen[].lagerbestandintegerjaGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegerjaStück in offenen eveyamin-Bestellungen. (-9007199254740991–9007199254740991)
    positionen[].standstring | nulljaZuletzt übernommener stand.
    positionen[].gesperrtbooleanjaDas Produkt ist gesperrt; sein Bestand kann nicht geändert werden.
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Kein solches Produkt bei dir (productNotFound).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
PATCH/api/v1/products/{id}/stock

Bestand eines Produkts setzen

Zeilen dieses Produkts, je über sku oder farbe + groesse. Gespeichert wird lagerbestand minus der Stück in offenen eveyamin-Bestellungen (reserviert, noch nicht erledigt und von deinem System noch nicht bestätigt), mindestens 0 – so werden Bestellungen, die dein System noch nicht kennt, nicht doppelt verkauft. Eine Bestellung, die du nach dem stand der Zeile bestätigt hast, zählt noch als offen: deine Zählung war älter. Sende daher stand mit. Jede Zeile hat ihr eigenes Ergebnis; eine fehlerhafte Zeile hält die anderen nicht auf. Unveränderte Werte werden nicht geschrieben.

Berechtigung: bestand:schreiben

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.
Inhalt – ProduktBestandAnfrage
FeldTypPflichtBeschreibung
positionenobject[]ja
positionen[].skustringneinDeine SKU der Variante. Alternativ: produkt + farbe + groesse.
positionen[].farbestringneinFarbe wie im Shop, z. B. „Weiß“.
positionen[].groessestringneinGröße wie im Shop, z. B. „M“ oder „200 x 200 cm“.
positionen[].lagerbestandintegerjaDein Bestand der Variante. Gespeichert wird dieser Wert abzüglich der offenen eveyamin-Bestellungen (siehe offen). (0–10000)
positionen[].standstring (date-time)neinZeitpunkt deiner Zählung (ISO 8601 mit Zeitzone). Eine Zeile mit älterem stand als dem zuletzt übernommenen wird ignoriert (veraltet).

Antworten

  • 200 Ergebnis je Zeile. – BestandErgebnis
    FeldTypPflichtBeschreibung
    zusammenfassungobjectja
    zusammenfassung.okintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.unveraendertintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.veraltetintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.fehlerintegerja(-9007199254740991–9007199254740991)
    positionenobject[]ja
    positionen[].zeileintegerjaIndex der Zeile in positionen, ab 0. (-9007199254740991–9007199254740991)
    positionen[].statusstringjaok = gespeichert, unveraendert = war schon so, veraltet = älterer stand, fehler = siehe fehler.Werte: ok, unveraendert, veraltet, fehler
    positionen[].produkt_idstringnein
    positionen[].artikelnummerstringnein
    positionen[].uebergeordnete_skustring | nullnein
    positionen[].skustring | nullnein
    positionen[].eanstring | nullneinEAN / GTIN der Variante, sonst null.
    positionen[].farbestringnein
    positionen[].groessestringnein
    positionen[].gesendetintegerneinDein lagerbestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegerneinStück in offenen eveyamin-Bestellungen, die abgezogen wurden. (-9007199254740991–9007199254740991)
    positionen[].vorherintegerneinGespeicherter Bestand vor dieser Anfrage. (-9007199254740991–9007199254740991)
    positionen[].lagerbestandintegerneinGespeicherter Bestand jetzt: gesendet − offen, mindestens 0. (-9007199254740991–9007199254740991)
    positionen[].fehlerobjectnein
    positionen[].fehler.codestringja
    positionen[].fehler.feldstring | nullja
    positionen[].fehler.nachrichtstringja
    positionen[].hinweiseobject[]neinZ. B. eine korrigierte Schreibweise.
    positionen[].hinweise[].codestringja
    positionen[].hinweise[].feldstring | nullja
    positionen[].hinweise[].nachrichtstringja
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Kein solches Produkt bei dir (productNotFound).
  • 422 Kein { positionen: [...] }, leer, oder mehr als 500 Zeilen.
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
  • 503 Der Bestand wird gerade an anderer Stelle geändert (busy); nichts wurde gespeichert, bitte wiederholen.

Bestellungen

Bezahlte Bestellungen abrufen und bestätigen (WP4).

GET/api/v1/orders/new

Neue Bestellungen

Bezahlte Bestellungen mit Positionen in Bearbeitung, die dein System noch nicht bestätigt hat, älteste zuerst. Nur deine Positionen und nur bezahlte Bestellungen. Eine Bestellung bleibt in /orders/new, bis dein System sie mit /orders/{id}/acknowledge bestätigt – geht eine Antwort verloren, kommt sie beim nächsten Abruf wieder. Gleiche Bestellungen erkennst du an der bestellnummer.

Berechtigung: bestellungen:lesen

Parameter

FeldTypPflichtBeschreibung
seite (query)integerneinSeite, ab 1.
pro_seite (query)integerneinBestellungen pro Seite, höchstens 100.

Antworten

  • 200 Eine Seite Bestellungen. – BestellListe
    FeldTypPflichtBeschreibung
    seiteintegerja(-9007199254740991–9007199254740991)
    pro_seiteintegerja(-9007199254740991–9007199254740991)
    gesamtintegerjaBestellungen insgesamt. (-9007199254740991–9007199254740991)
    bestellungenBestellung[]ja
    bestellungen[].idstringjaeveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellungen[].bestellnummerintegerja(-9007199254740991–9007199254740991)
    bestellungen[].bestelldatumstringjaWann der Käufer bestellt hat. ISO 8601, UTC.
    bestellungen[].statusstringjaWerte: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    bestellungen[].versandartstringjaWerte: Standardversand, Expressversand
    bestellungen[].bestaetigt_amstring | nullja
    bestellungen[].geaendert_amstringjaLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    bestellungen[].lieferadresseLieferadressejaWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    bestellungen[].lieferadresse.vornamestringja
    bestellungen[].lieferadresse.nachnamestringja
    bestellungen[].lieferadresse.firmastring | nullja
    bestellungen[].lieferadresse.strassestringjaStraße und Hausnummer.
    bestellungen[].lieferadresse.plzstringja
    bestellungen[].lieferadresse.ortstringja
    bestellungen[].lieferadresse.landstringjaWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    bestellungen[].lieferadresse.telefonstring | nulljaFür den Versanddienstleister; optional beim Kauf.
    bestellungen[].summenobjectjaNur deine Positionen, in EUR, brutto.
    bestellungen[].summen.warennumberja
    bestellungen[].summen.versandkostennumberja
    bestellungen[].summen.gesamtnumberja
    bestellungen[].positionenBestellPosition[]jaNur deine Positionen; andere Händler derselben Bestellung fehlen.
    bestellungen[].positionen[].position_idstringjaeveyamin-ID der Bestellposition.
    bestellungen[].positionen[].produkt_idstringja
    bestellungen[].positionen[].variant_idstring | nullja
    bestellungen[].positionen[].artikelnummerstring | nullja
    bestellungen[].positionen[].uebergeordnete_skustring | nulljaAktuelle Übergeordnete SKU des Produkts.
    bestellungen[].positionen[].skustring | nulljaAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    bestellungen[].positionen[].eanstring | nulljaAktuelle EAN / GTIN der Variante, sonst null.
    bestellungen[].positionen[].titelstringjaProdukttitel zum Zeitpunkt des Kaufs.
    bestellungen[].positionen[].farbestring | nullja
    bestellungen[].positionen[].groessestring | nulljaGröße wie im Shop, oder „Maßanfertigung“.
    bestellungen[].positionen[].mengenumberjaStückzahl, bei Meterware Meter.
    bestellungen[].positionen[].einheitstringjaWerte: Stück, Meter
    bestellungen[].positionen[].einzelpreisnumberjaBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    bestellungen[].positionen[].summenumberjaBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    bestellungen[].positionen[].versandkostennumberjaVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    bestellungen[].positionen[].lieferstatusstringjaWerte: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    bestellungen[].positionen[].bestaetigt_amstring | nullja
    bestellungen[].positionen[].sendung_idstring | nulljaDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    bestellungen[].positionen[].versendet_amstring | nullja
    bestellungen[].positionen[].massanfertigungMassanfertigung | nulljaDie Körpermaße bei einer Maßanfertigung, sonst null.
    bestellungen[].positionen[].massanfertigung.einheitstringjaSo, wie der Käufer gemessen hat; nicht umgerechnet.Werte: cm, Zoll
    bestellungen[].positionen[].massanfertigung.brustumfangnumberja
    bestellungen[].positionen[].massanfertigung.taillenumfangnumberja
    bestellungen[].positionen[].massanfertigung.hueftumfangnumberja
    bestellungen[].positionen[].massanfertigung.koerpergroessenumberjaBarfuß.
    bestellungen[].positionen[].massanfertigung.schluesselbein_bodennumberjaVom Schlüsselbein bis zum Boden.
    bestellungen[].positionen[].massanfertigung.schulterlaengenumberja
    bestellungen[].positionen[].massanfertigung.extralaengenumber | nullja
    bestellungen[].sendungenSendung[]jaDeine Pakete dieser Bestellung, ältestes zuerst.
    bestellungen[].sendungen[].idstringja
    bestellungen[].sendungen[].versanddienstleisterstringjaWerte: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    bestellungen[].sendungen[].sendungsnummerstringjaOhne Leerzeichen, in Großbuchstaben.
    bestellungen[].sendungen[].tracking_urlstring | nulljaLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    bestellungen[].sendungen[].versendet_amstringjaWann das Paket gemeldet wurde. ISO 8601, UTC.
    bestellungen[].sendungen[].positionenstring[]japosition_id der Positionen in diesem Paket.
  • 400 seite oder pro_seite ungültig (invalidQuery).
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
GET/api/v1/orders

Geänderte Bestellungen

Deine Bestellungen, deren Status oder Lieferstatus sich nach geaendert_seit geändert hat (ohne Parameter alle), älteste Änderung zuerst – so erfährt dein System nach dem Import von Stornierungen und Erstattungen. Merke dir das letzte geaendert_am und frage mit etwas Überlappung erneut. Nur deine Positionen und nur bezahlte Bestellungen. Eine Bestellung bleibt in /orders/new, bis dein System sie mit /orders/{id}/acknowledge bestätigt – geht eine Antwort verloren, kommt sie beim nächsten Abruf wieder. Gleiche Bestellungen erkennst du an der bestellnummer.

Berechtigung: bestellungen:lesen

Parameter

FeldTypPflichtBeschreibung
geaendert_seit (query)string (date-time)neinZeitpunkt nach ISO 8601 mit Zeitzone, z. B. 2026-10-07T09:15:00Z.
seite (query)integerneinSeite, ab 1.
pro_seite (query)integerneinBestellungen pro Seite, höchstens 100.

Antworten

  • 200 Eine Seite Bestellungen. – BestellListe
    FeldTypPflichtBeschreibung
    seiteintegerja(-9007199254740991–9007199254740991)
    pro_seiteintegerja(-9007199254740991–9007199254740991)
    gesamtintegerjaBestellungen insgesamt. (-9007199254740991–9007199254740991)
    bestellungenBestellung[]ja
    bestellungen[].idstringjaeveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellungen[].bestellnummerintegerja(-9007199254740991–9007199254740991)
    bestellungen[].bestelldatumstringjaWann der Käufer bestellt hat. ISO 8601, UTC.
    bestellungen[].statusstringjaWerte: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    bestellungen[].versandartstringjaWerte: Standardversand, Expressversand
    bestellungen[].bestaetigt_amstring | nullja
    bestellungen[].geaendert_amstringjaLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    bestellungen[].lieferadresseLieferadressejaWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    bestellungen[].lieferadresse.vornamestringja
    bestellungen[].lieferadresse.nachnamestringja
    bestellungen[].lieferadresse.firmastring | nullja
    bestellungen[].lieferadresse.strassestringjaStraße und Hausnummer.
    bestellungen[].lieferadresse.plzstringja
    bestellungen[].lieferadresse.ortstringja
    bestellungen[].lieferadresse.landstringjaWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    bestellungen[].lieferadresse.telefonstring | nulljaFür den Versanddienstleister; optional beim Kauf.
    bestellungen[].summenobjectjaNur deine Positionen, in EUR, brutto.
    bestellungen[].summen.warennumberja
    bestellungen[].summen.versandkostennumberja
    bestellungen[].summen.gesamtnumberja
    bestellungen[].positionenBestellPosition[]jaNur deine Positionen; andere Händler derselben Bestellung fehlen.
    bestellungen[].positionen[].position_idstringjaeveyamin-ID der Bestellposition.
    bestellungen[].positionen[].produkt_idstringja
    bestellungen[].positionen[].variant_idstring | nullja
    bestellungen[].positionen[].artikelnummerstring | nullja
    bestellungen[].positionen[].uebergeordnete_skustring | nulljaAktuelle Übergeordnete SKU des Produkts.
    bestellungen[].positionen[].skustring | nulljaAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    bestellungen[].positionen[].eanstring | nulljaAktuelle EAN / GTIN der Variante, sonst null.
    bestellungen[].positionen[].titelstringjaProdukttitel zum Zeitpunkt des Kaufs.
    bestellungen[].positionen[].farbestring | nullja
    bestellungen[].positionen[].groessestring | nulljaGröße wie im Shop, oder „Maßanfertigung“.
    bestellungen[].positionen[].mengenumberjaStückzahl, bei Meterware Meter.
    bestellungen[].positionen[].einheitstringjaWerte: Stück, Meter
    bestellungen[].positionen[].einzelpreisnumberjaBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    bestellungen[].positionen[].summenumberjaBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    bestellungen[].positionen[].versandkostennumberjaVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    bestellungen[].positionen[].lieferstatusstringjaWerte: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    bestellungen[].positionen[].bestaetigt_amstring | nullja
    bestellungen[].positionen[].sendung_idstring | nulljaDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    bestellungen[].positionen[].versendet_amstring | nullja
    bestellungen[].positionen[].massanfertigungMassanfertigung | nulljaDie Körpermaße bei einer Maßanfertigung, sonst null.
    bestellungen[].positionen[].massanfertigung.einheitstringjaSo, wie der Käufer gemessen hat; nicht umgerechnet.Werte: cm, Zoll
    bestellungen[].positionen[].massanfertigung.brustumfangnumberja
    bestellungen[].positionen[].massanfertigung.taillenumfangnumberja
    bestellungen[].positionen[].massanfertigung.hueftumfangnumberja
    bestellungen[].positionen[].massanfertigung.koerpergroessenumberjaBarfuß.
    bestellungen[].positionen[].massanfertigung.schluesselbein_bodennumberjaVom Schlüsselbein bis zum Boden.
    bestellungen[].positionen[].massanfertigung.schulterlaengenumberja
    bestellungen[].positionen[].massanfertigung.extralaengenumber | nullja
    bestellungen[].sendungenSendung[]jaDeine Pakete dieser Bestellung, ältestes zuerst.
    bestellungen[].sendungen[].idstringja
    bestellungen[].sendungen[].versanddienstleisterstringjaWerte: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    bestellungen[].sendungen[].sendungsnummerstringjaOhne Leerzeichen, in Großbuchstaben.
    bestellungen[].sendungen[].tracking_urlstring | nulljaLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    bestellungen[].sendungen[].versendet_amstringjaWann das Paket gemeldet wurde. ISO 8601, UTC.
    bestellungen[].sendungen[].positionenstring[]japosition_id der Positionen in diesem Paket.
  • 400 geaendert_seit, seite oder pro_seite ungültig (invalidQuery).
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
GET/api/v1/orders/{id}

Eine Bestellung

Berechtigung: bestellungen:lesen

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Bestell-ID oder Bestellnummer.

Antworten

  • 200 Die Bestellung mit deinen Positionen. – Bestellung
    FeldTypPflichtBeschreibung
    idstringjaeveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellnummerintegerja(-9007199254740991–9007199254740991)
    bestelldatumstringjaWann der Käufer bestellt hat. ISO 8601, UTC.
    statusstringjaWerte: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    versandartstringjaWerte: Standardversand, Expressversand
    bestaetigt_amstring | nullja
    geaendert_amstringjaLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    lieferadresseLieferadressejaWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    lieferadresse.vornamestringja
    lieferadresse.nachnamestringja
    lieferadresse.firmastring | nullja
    lieferadresse.strassestringjaStraße und Hausnummer.
    lieferadresse.plzstringja
    lieferadresse.ortstringja
    lieferadresse.landstringjaWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    lieferadresse.telefonstring | nulljaFür den Versanddienstleister; optional beim Kauf.
    summenobjectjaNur deine Positionen, in EUR, brutto.
    summen.warennumberja
    summen.versandkostennumberja
    summen.gesamtnumberja
    positionenBestellPosition[]jaNur deine Positionen; andere Händler derselben Bestellung fehlen.
    positionen[].position_idstringjaeveyamin-ID der Bestellposition.
    positionen[].produkt_idstringja
    positionen[].variant_idstring | nullja
    positionen[].artikelnummerstring | nullja
    positionen[].uebergeordnete_skustring | nulljaAktuelle Übergeordnete SKU des Produkts.
    positionen[].skustring | nulljaAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    positionen[].eanstring | nulljaAktuelle EAN / GTIN der Variante, sonst null.
    positionen[].titelstringjaProdukttitel zum Zeitpunkt des Kaufs.
    positionen[].farbestring | nullja
    positionen[].groessestring | nulljaGröße wie im Shop, oder „Maßanfertigung“.
    positionen[].mengenumberjaStückzahl, bei Meterware Meter.
    positionen[].einheitstringjaWerte: Stück, Meter
    positionen[].einzelpreisnumberjaBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    positionen[].summenumberjaBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    positionen[].versandkostennumberjaVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    positionen[].lieferstatusstringjaWerte: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    positionen[].bestaetigt_amstring | nullja
    positionen[].sendung_idstring | nulljaDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    positionen[].versendet_amstring | nullja
    positionen[].massanfertigungMassanfertigung | nulljaDie Körpermaße bei einer Maßanfertigung, sonst null.
    positionen[].massanfertigung.einheitstringjaSo, wie der Käufer gemessen hat; nicht umgerechnet.Werte: cm, Zoll
    positionen[].massanfertigung.brustumfangnumberja
    positionen[].massanfertigung.taillenumfangnumberja
    positionen[].massanfertigung.hueftumfangnumberja
    positionen[].massanfertigung.koerpergroessenumberjaBarfuß.
    positionen[].massanfertigung.schluesselbein_bodennumberjaVom Schlüsselbein bis zum Boden.
    positionen[].massanfertigung.schulterlaengenumberja
    positionen[].massanfertigung.extralaengenumber | nullja
    sendungenSendung[]jaDeine Pakete dieser Bestellung, ältestes zuerst.
    sendungen[].idstringja
    sendungen[].versanddienstleisterstringjaWerte: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    sendungen[].sendungsnummerstringjaOhne Leerzeichen, in Großbuchstaben.
    sendungen[].tracking_urlstring | nulljaLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    sendungen[].versendet_amstringjaWann das Paket gemeldet wurde. ISO 8601, UTC.
    sendungen[].positionenstring[]japosition_id der Positionen in diesem Paket.
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Keine solche bezahlte Bestellung mit Positionen von dir (orderNotFound).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
POST/api/v1/orders/{id}/acknowledge

Bestellung bestätigen

Dein System hat die Bestellung übernommen: Sie verschwindet aus /orders/new und wird bei Bestandsmeldungen nicht mehr abgezogen. Wiederholbar; ein zweiter Aufruf ändert nichts (bereits_bestaetigt).

Berechtigung: bestellungen:lesen

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Bestell-ID oder Bestellnummer.

Antworten

  • 200 Bestätigt. – Bestaetigung
    FeldTypPflichtBeschreibung
    idstringja
    bestellnummerintegerja(-9007199254740991–9007199254740991)
    bestaetigt_amstringjaWann die Bestellung zum ersten Mal bestätigt wurde. ISO 8601, UTC.
    bereits_bestaetigtbooleanjatrue: war schon bestätigt; nichts hat sich geändert.
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Keine solche bezahlte Bestellung mit Positionen von dir (orderNotFound).
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.
POST/api/v1/orders/acknowledge

Mehrere Bestellungen bestätigen

Bis zu 100 Bestellungen auf einmal, je über Bestell-ID oder Bestellnummer; ein Ergebnis je Eintrag.

Berechtigung: bestellungen:lesen

Inhalt – BestaetigungAnfrage
FeldTypPflichtBeschreibung
bestellungenstring | integer[]jaBestell-IDs oder Bestellnummern.

Antworten

  • 200 Ergebnis je Eintrag. – BestaetigungErgebnis
    FeldTypPflichtBeschreibung
    zusammenfassungobjectja
    zusammenfassung.okintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.bereits_bestaetigtintegerja(-9007199254740991–9007199254740991)
    zusammenfassung.fehlerintegerja(-9007199254740991–9007199254740991)
    bestellungenobject[]ja
    bestellungen[].zeileintegerjaIndex in bestellungen, ab 0. (-9007199254740991–9007199254740991)
    bestellungen[].statusstringjaWerte: ok, bereits_bestaetigt, fehler
    bestellungen[].idstringnein
    bestellungen[].bestellnummerintegernein(-9007199254740991–9007199254740991)
    bestellungen[].bestaetigt_amstringneinWann die Bestellung zum ersten Mal bestätigt wurde. ISO 8601, UTC.
    bestellungen[].fehlerobjectnein
    bestellungen[].fehler.codestringja
    bestellungen[].fehler.feldstring | nullja
    bestellungen[].fehler.nachrichtstringja
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 422 Kein { bestellungen: [...] }, leer, oder mehr als 100 Einträge.
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.

Versand

Pakete mit Sendungsnummer melden; die Bestellung wird „Versendet“ (WP5).

POST/api/v1/orders/{id}/fulfill

Versand melden

Ein Paket deiner Positionen: Versanddienstleister, Sendungsnummer und die Positionen darin (ohne positionen: alle deine Positionen „In Bearbeitung“). Die Positionen werden „Versendet“, der Käufer bekommt eine E-Mail mit dem Link zur Sendungsverfolgung, und die Bestellung gilt als bestätigt. Mehrere Pakete: ein Aufruf je Sendungsnummer. Dieselbe Sendungsnummer noch einmal ist dasselbe Paket: Nichts passiert doppelt, neue Positionen kommen hinzu. Geht eine Position nicht, wird nichts versendet.

Berechtigung: bestellungen:versenden

Parameter

FeldTypPflichtBeschreibung
id (path)stringjaeveyamin-Bestell-ID oder Bestellnummer.
Inhalt – VersandAnfrage
FeldTypPflichtBeschreibung
versanddienstleisterstringjaWerte: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
sendungsnummerstringjaGespeichert ohne Leerzeichen und in Großbuchstaben: 4–40 Zeichen aus A–Z, 0–9 und -.
tracking_urlstring | nullneinEigener https-Link. Ohne ihn baut eveyamin den Link des Versanddienstleisters (bei „Sonstige“ gibt es keinen).
positionenstring[]neinposition_id der Positionen im Paket. Ohne: alle deine Positionen „In Bearbeitung“.

Antworten

  • 200 Gemeldet, oder schon so gemeldet (bereits_erfasst). – VersandErgebnis
    FeldTypPflichtBeschreibung
    bereits_erfasstbooleanjatrue: Dieses Paket war mit diesen Positionen schon gemeldet; nichts hat sich geändert, keine Mail.
    sendungSendungjaEin Paket: ganze Positionen, eine Sendungsnummer.
    sendung.idstringja
    sendung.versanddienstleisterstringjaWerte: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    sendung.sendungsnummerstringjaOhne Leerzeichen, in Großbuchstaben.
    sendung.tracking_urlstring | nulljaLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    sendung.versendet_amstringjaWann das Paket gemeldet wurde. ISO 8601, UTC.
    sendung.positionenstring[]japosition_id der Positionen in diesem Paket.
    bestellungBestellungja
    bestellung.idstringjaeveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellung.bestellnummerintegerja(-9007199254740991–9007199254740991)
    bestellung.bestelldatumstringjaWann der Käufer bestellt hat. ISO 8601, UTC.
    bestellung.statusstringjaWerte: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    bestellung.versandartstringjaWerte: Standardversand, Expressversand
    bestellung.bestaetigt_amstring | nullja
    bestellung.geaendert_amstringjaLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    bestellung.lieferadresseLieferadressejaWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    bestellung.lieferadresse.vornamestringja
    bestellung.lieferadresse.nachnamestringja
    bestellung.lieferadresse.firmastring | nullja
    bestellung.lieferadresse.strassestringjaStraße und Hausnummer.
    bestellung.lieferadresse.plzstringja
    bestellung.lieferadresse.ortstringja
    bestellung.lieferadresse.landstringjaWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    bestellung.lieferadresse.telefonstring | nulljaFür den Versanddienstleister; optional beim Kauf.
    bestellung.summenobjectjaNur deine Positionen, in EUR, brutto.
    bestellung.summen.warennumberja
    bestellung.summen.versandkostennumberja
    bestellung.summen.gesamtnumberja
    bestellung.positionenBestellPosition[]jaNur deine Positionen; andere Händler derselben Bestellung fehlen.
    bestellung.positionen[].position_idstringjaeveyamin-ID der Bestellposition.
    bestellung.positionen[].produkt_idstringja
    bestellung.positionen[].variant_idstring | nullja
    bestellung.positionen[].artikelnummerstring | nullja
    bestellung.positionen[].uebergeordnete_skustring | nulljaAktuelle Übergeordnete SKU des Produkts.
    bestellung.positionen[].skustring | nulljaAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    bestellung.positionen[].eanstring | nulljaAktuelle EAN / GTIN der Variante, sonst null.
    bestellung.positionen[].titelstringjaProdukttitel zum Zeitpunkt des Kaufs.
    bestellung.positionen[].farbestring | nullja
    bestellung.positionen[].groessestring | nulljaGröße wie im Shop, oder „Maßanfertigung“.
    bestellung.positionen[].mengenumberjaStückzahl, bei Meterware Meter.
    bestellung.positionen[].einheitstringjaWerte: Stück, Meter
    bestellung.positionen[].einzelpreisnumberjaBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    bestellung.positionen[].summenumberjaBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    bestellung.positionen[].versandkostennumberjaVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    bestellung.positionen[].lieferstatusstringjaWerte: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    bestellung.positionen[].bestaetigt_amstring | nullja
    bestellung.positionen[].sendung_idstring | nulljaDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    bestellung.positionen[].versendet_amstring | nullja
    bestellung.positionen[].massanfertigungMassanfertigung | nulljaDie Körpermaße bei einer Maßanfertigung, sonst null.
    bestellung.positionen[].massanfertigung.einheitstringjaSo, wie der Käufer gemessen hat; nicht umgerechnet.Werte: cm, Zoll
    bestellung.positionen[].massanfertigung.brustumfangnumberja
    bestellung.positionen[].massanfertigung.taillenumfangnumberja
    bestellung.positionen[].massanfertigung.hueftumfangnumberja
    bestellung.positionen[].massanfertigung.koerpergroessenumberjaBarfuß.
    bestellung.positionen[].massanfertigung.schluesselbein_bodennumberjaVom Schlüsselbein bis zum Boden.
    bestellung.positionen[].massanfertigung.schulterlaengenumberja
    bestellung.positionen[].massanfertigung.extralaengenumber | nullja
    bestellung.sendungenSendung[]jaDeine Pakete dieser Bestellung, ältestes zuerst.
    bestellung.sendungen[].idstringja
    bestellung.sendungen[].versanddienstleisterstringjaWerte: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    bestellung.sendungen[].sendungsnummerstringjaOhne Leerzeichen, in Großbuchstaben.
    bestellung.sendungen[].tracking_urlstring | nulljaLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    bestellung.sendungen[].versendet_amstringjaWann das Paket gemeldet wurde. ISO 8601, UTC.
    bestellung.sendungen[].positionenstring[]japosition_id der Positionen in diesem Paket.
  • 401 Kein, ungültiger oder widerrufener Schlüssel (keyMissing, keyInvalid, keyWrongEnvironment).
  • 403 Dem Schlüssel fehlt die Berechtigung (scopeMissing), der Shop ist dafür noch nicht freigegeben (registrationNotApproved) oder die API ist für deinen Shop noch nicht freigeschaltet (apiNotEnabled).
  • 404 Keine solche bezahlte Bestellung mit Positionen von dir (orderNotFound).
  • 409 Die Bestellung ist nicht mehr bezahlt, z. B. erstattet (orderNotShippable), oder keine deiner Positionen ist mehr „In Bearbeitung“ (nothingToShip).
  • 422 Ungültige Angaben (invalidCarrier, invalidTrackingNumber, invalidTrackingUrl, invalidBody) oder Positionen, die sich nicht versenden lassen (lineNotFound, lineNotShippable, lineInOtherShipment) – dann wurde nichts versendet.
  • 429 Mehr als 120 Anfragen pro Minute und Schlüssel (rateLimited). Siehe Header Retry-After.

Versionen und Kontakt

Die API ist versioniert (/api/v1). Neue Felder und Aufrufe kommen in v1 hinzu – ignoriere also Felder, die du nicht kennst. Was bestehende Anbindungen bricht, kommt erst in v2 und wird mit Vorlauf angekündigt.

Fragen zur Anbindung: info@eveyamin.com.

Technischer Support

Mit den Informationen oben sollte dein technisches Team die Anbindung abschließen können. Brauchst du weitere Unterstützung, hilft dir unser Technologiepartner gern bei der Anbindung.