Seller API

Connect your inventory system, your shop software or your dropshipping supplier directly to your eveyamin shop: create and update products, sync stock within seconds, pick up paid orders and report shipments.

Getting started

The seller API is a JSON REST interface at https://eveyamin.com/api/v1. Field names and values are German – categories, colours, sizes and statuses exactly as the shop stores them. A connection is built by your developer, your agency or a middleware service; there are no ready-made plugins for particular inventory systems.

Create a key

  1. Under Settings → API access, create a key and pick only the scopes the connection needs.
  2. Copy the key right away and keep it safe – it is shown this one time only.
  3. Send it with every request in the header Authorization: Bearer <key>.
ScopeAllows
produkte:schreibenCreate, change, read and archive products
bestand:schreibenRead and set stock
bestellungen:lesenPick up and acknowledge orders (once your shop is live)
bestellungen:versendenReport shipments with a tracking number
Keys belong on a server, never in a web page or an app. You can have up to 10 keys – use one per connection, so you can revoke one on its own. Revoke a key at once if it may have fallen into the wrong hands.

First call

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

Live and test

Keys start with evy_live_ (the shop) or evy_test_ (the test environment) and work only where they were created. A key from the other environment gets 401 keyWrongEnvironment.

German values

Categories come as their full path (eve-Home > Bettwäsche > Bettwäsche-Sets), colours and sizes exactly as in the shop. GET /api/v1/taxonomy returns every category with its sizes and every colour. The API fixes small differences itself (weiss → Weiß, 200x200 → 200 x 200 cm) and reports them as hints. Map your inventory system's own names once in the CSV import; the mapping applies to the API too.

Limits

WhatLimit
Requests per key120 a minute, then 429 with Retry-After
Request size1024 KB
Lines per stock call500
Variants per product500
Images per product20
Products per page100
Orders per page100

Every answer is JSON and is never cached. Calls from a browser (CORS) are not allowed.

Products

A product is its details plus its variants (colour × size). The rules are the product form's and the CSV import's: whatever they refuse, the API refuses too – with the same codes. The field names are the CSV template's column names.

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 (parent SKU) is your key for the product, unique in your shop. You address it with it later: /products/BW-SATIN-01.
  • kategorie is the full path; every groesse must belong to the category.
  • preis is per variant. Prices may differ by size only, not by colour; the lowest is the base price. rabattpreis (sale price) applies to the whole product; without it there is no discount.
  • Numbers may also come as text, German or English ("59,90").
  • sku and ean per variant are optional. Leave the field out and the stored code stays; null clears it. An EAN needs a valid check digit.
  • bild_urls: https addresses. The images are downloaded and stored with us; the gallery may also sit on the first variant only.
  • versandkosten (shipping) is optional: without it a new product gets your default, an existing one keeps its value.

Create, replace, read

CallEffect
POST /productsCreates the product: 201. If the parent SKU exists already: 409 productExists with the existing product.
PUT /products/{id}Replaces the whole product; missing variants are archived. If {id} does not exist yet and the body names {id} as its uebergeordnete_sku, the product is created (upsert); otherwise 404.
GET /products/{id}The product in exactly the shape PUT takes, plus read-only fields (id, artikelnummer, status, geaendert_am, variant_id). You can send it back as it is.
GET /productsAll your products, oldest change first, archived ones included – with geaendert_seit only those changed since.
DELETE /products/{id}Archives the product; a second call changes nothing.

{id} may be the eveyamin product id, your parent SKU or the eveyamin article number (artikelnummer). A product created in the form gets its parent SKU once through PUT /products/{artikelnummer} with uebergeordnete_sku in the body; an existing one is changed in the product form only.

Result

ergebnis is angelegt (created), aktualisiert (updated) or unveraendert (unchanged). When nothing changed, nothing is written and nothing re-translated – so a full sync of every product costs almost nothing. hinweise (hints) names corrected spellings and images that could not be loaded. New products are translated first (status “Wird übersetzt”) and then go online.

Images

  • Images are downloaded during the call. If that takes too long, the API answers 202 with a job (Location: /api/v1/jobs/{id}). Poll the job until it is fertig (done); the product is saved only once its images are there.
  • Each image address is downloaded once. A changed picture therefore needs a new address, e.g. with ?v=2.
  • If a newer request for the same product arrives, an open job becomes ersetzt (superseded).

Stock in the product call

For variants already on sale, a product call does not change the stock – that is the stock call's job. A different lagerbestand comes back as the hint stockIgnored. New products and new variants take the stock sent.

Archived, blocked, sold by the metre

Restore archived products in the dashboard; PUT and POST answer 409 productArchived. Blocked products: 409 productBlocked. Products sold by the metre (fabrics) are not in the API yet: 409 productMeterware.

Stock sync

The stock call changes stock only, never the product. Your inventory system keeps eveyamin's stock current with it, so nothing sells twice when you sell on several channels.

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 }
  ]
}
  • A line addresses a variant by sku, or by produkt + farbe + groesse. Up to 500 lines per call, across all products.
  • lagerbestand is your stock. It is stored minus the pieces in open eveyamin orders your system has not acknowledged yet – your count cannot know about those.
  • Send stand, the time of your count. A line with an older stand than the last one taken is ignored (veraltet, stale).
  • Every line has its own result: ok, unveraendert, veraltet or fehler. A failing line does not hold up the others.
  • On 503 busy nothing was saved; repeat the request after Retry-After seconds.

How to go about it

  1. Fetch GET /stock once, page by page, and map your articles to the variants, preferably by sku.
  2. On every stock change, or e.g. every five minutes, send PATCH /stock with the changed lines and stand.
  3. Pick up and acknowledge new orders – only then do they stop counting as open.

Orders and dropshipping

You pick up paid orders with your lines, acknowledge them and report the shipment. Lines of other sellers in the same order are not shown to you.

  1. GET /orders/new – paid orders your system has not acknowledged yet, oldest first. An order stays there until you acknowledge it; if an answer gets lost, it comes again on the next call.
  2. POST /orders/{id}/acknowledge – your system has it. Up to 100 at once with POST /orders/acknowledge.
  3. POST /orders/{id}/fulfill with the carrier and tracking number – the lines become “Versendet” (shipped), and the buyer gets a mail with the tracking link.
  4. GET /orders?geaendert_seit=… – cancellations and refunds that happen later. Remember the last geaendert_am and ask again with some overlap.
POST /api/v1/orders/1042/fulfill
{
  "versanddienstleister": "DHL",
  "sendungsnummer": "00340434161234567890"
}
  • {id} is the eveyamin order id or the order number (bestellnummer).
  • Carriers: DHL, DPD, Hermes, GLS, UPS, Deutsche Post or Sonstige (other – then with your own tracking_url).
  • Several parcels: one call per tracking number, with the parcel's positionen. The same tracking number again changes nothing and sends no second mail.
  • The delivery address has the name, address and phone, but no email address: eveyamin communicates with the buyer.
Dropshipping: give your supplier a key of their own with only bestellungen:lesen and bestellungen:versenden. They then see neither products nor stock. You stay responsible for them, including how they handle buyer data – see the terms and the privacy policy.

Test environment

For development there is a test environment at https://staging--eveyamin.netlify.app. It has its own data and its own keys (evy_test_…), and it sends no mail to buyers.

  1. Sign up at https://staging--eveyamin.netlify.app and write to info@eveyamin.com – we set your account up as a test shop.
  2. Create a test key there under Settings → API access.
  3. Create products through the API and make test orders.
Test order
curl -X POST https://staging--eveyamin.netlify.app/api/v1/sandbox/orders \
  -H "Authorization: Bearer evy_test_…"

POST /sandbox/orders creates a paid order for one of your variants – without a body for the first one with stock, or specifically with {"positionen": [{"sku": "…", "menge": 2}]}. The buyer is the fictitious Erika Mustermann. The order goes through everything a real one does: /orders/new, acknowledge, report the shipment. At most 30 an hour. The same button is under API access in the test environment; the live shop has no such call.

The test environment is no archive: its data can be reset at any time.

Errors

Errors always have the same shape:

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

Evaluate code: it is stable and English. nachricht (message) is German and may change; feld (field) is the JSON path of the field concerned, or null.

StatusMeaning
200 / 201Done; 201 for a newly created product or a test order
202Accepted, the images are still loading (job)
400Not valid JSON, or invalid parameters
401No key, or an invalid or revoked one
403Scope missing, or the shop is not approved yet
404Not found – or not yours
409Conflict with a key or a state (e.g. parent SKU taken)
422Invalid body
429Too many requests
500 / 503Error on our side or briefly unavailable – retry later

Every call

CodeStatusMeaning
invalidJson400The body is not valid JSON.
invalidQuery400seite, pro_seite or geaendert_seit is invalid.
keyMissing401No key in the Authorization: Bearer … header.
keyInvalid401Unknown or revoked key, or the account is not active.
keyWrongEnvironment401A test key in the live shop, or the other way round.
scopeMissing403The key lacks the scope this call needs.
registrationNotApproved403The shop's registration is not approved yet (orders: the shop is not live yet).
apiNotEnabled403The API is not enabled for your shop yet.
notFound404Unknown path.
bodyTooLarge413The request is too large.
rateLimited429Too many requests; wait as many seconds as Retry-After says.
internal500Unexpected error on our side; retry later.
unavailable503The service is briefly unavailable; retry after Retry-After.

Products

CodeStatusMeaning
productNotFound404No such product of yours.
jobNotFound404No such job of yours.
productExists409The parent SKU exists already; the answer names the product. Use PUT.
productArchived409The product is archived; restore it in the dashboard.
productBlocked409The product is blocked and cannot be changed.
productMeterware409Products sold by the metre are not in the API yet.
parentSkuDuplicate409You use this parent SKU already.
imagesFailed422None of the product's images could be loaded.
writeFailed500The product could not be saved; retry later.
tooManyVariants422More variants than allowed.
invalidValue422A value has the wrong shape.

Stock

CodeStatusMeaning
invalidBody422Expected { "positionen": [ … ] } (or the call's shape).
noLines422positionen is empty.
tooManyLines422Too many lines; split them over several requests.
busy503Stock is being changed elsewhere; nothing saved, retry.
invalidLinein the lineThe line is not an object.
identifierMissingin the lineNeither sku nor produkt + farbe + groesse.
stockInvalidin the linelagerbestand is not an allowed whole number.
standInvalidin the linestand is not an ISO 8601 time with a time zone.
standInFuturein the linestand is in the future.
variantNotFoundin the lineNo active variant matches.
keyMismatchin the lineThe SKU belongs to another combination than the line's other values.
duplicateLinein the lineThe same variant is in an earlier line already.

Orders and shipping

CodeStatusMeaning
orderNotFound404No such paid order with lines of yours.
noEntries422bestellungen is empty.
tooManyEntries422Too many orders in one request.
invalidEntryin the lineNeither an order id nor an order number.
orderNotShippable409Only paid orders can be shipped.
nothingToShip409None of your lines is still “In Bearbeitung”.
invalidCarrier422Unknown carrier.
invalidTrackingNumber422Tracking number: 4–40 characters from A–Z, 0–9 and -.
invalidTrackingUrl422tracking_url is not an https link.
lineNotFound422None of your lines of this order has this id.
lineNotShippable422The line is no longer “In Bearbeitung”.
lineInOtherShipment422The line has shipped under another tracking number already.

Test environment

CodeStatusMeaning
noStock422No variant with stock for the test order.
sandboxLimit429Too many test orders in the past hour.

Hints

CodeStatusMeaning
stockIgnoredhintStock of a variant on sale not taken; use the stock call for that.
valueMappedhintValue taken through your mapping.

Product checks

Products are checked as in the CSV import. These codes come in fehler (409 for key conflicts, otherwise 422) or as a hint. The messages themselves are German; here they are in English:

CodeStatusMeaning
required422“…” is required.
tooLong422“…” is too long (at most … characters).
tooShort422“…” is too short (at least … characters).
numberInvalid422“…” is not a valid number.
priceRange422“…” is not between … and ….
stockInvalid422“…” is not a valid stock level (a whole number from 0 to …).
categoryUnknown422Unknown category “…”.
categoryIncomplete422The category “…” is incomplete – please give it down to the lowest level.
categoryNotOffered422The category “…” is no longer offered.
colorUnknown422Unknown colour “…”.
sizeUnknown422Unknown size “…”.
sizeNotInCategory422The size “…” is not offered in “…”.
duplicateCombination422The combination … is already in ⁦varianten[…]⁩.
priceVariesByColor422The price for … differs from ⁦varianten[…]⁩. Prices may differ by size only, not by colour.
discountAboveBase422The discount price (… €) is above the lowest price (… €).
imageUrlInvalid422“…” is not a valid image address (https://…).
tooManyImages422… images – at most … per product.
noImages422Please give at least one image URL per product.
skuDuplicateInFile422The SKU “…” is already used in ⁦varianten[…]⁩.
skuTaken409The SKU “…” already belongs to another of your products.
eanInvalid422“…” is not a valid EAN (8, 12, 13 or 14 digits with a valid check digit).
ambiguousMatch409“…” matches more than one existing product (article number …).
parentSkuLocked409Product … already has the Übergeordnete SKU “…”. An existing Übergeordnete SKU is changed in the product form.
parentSkuOfOther409“…” already belongs to your product …, but the eveyamin-Artikelnummer belongs to …. Please use another Übergeordnete SKU.
categoryFixedhintCategory taken as “…”.
colorFixedhintColour “…” taken as “…”.
sizeFixedhintSize “…” taken as “…”.
imageFailedhintImage not taken over (…): …

Reference

Every call with its parameters and fields, generated from the interface itself; the descriptions are German, like the API. For Postman, Insomnia or code generators there is the OpenAPI file.

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.

Scope: any valid key

Responses

  • 200 Der Schlüssel gilt. – Ping
    FieldTypeRequiredDescription
    oktrueyes
    umgebungstringyeslive = Shop, test = Testumgebung.Values: live, test
    haendler_idstringyesDeine Händler-ID bei eveyamin.
    schluesselobjectyes
    schluessel.namestringyes
    schluessel.praefixstringyesAnfang des Schlüssels, z. B. evy_live_Ab3x.
    schluessel.berechtigungenstring[]yesValues: 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.

Scope: any valid key

Responses

  • 200 Die aktuellen Listen. – Taxonomie
    FieldTypeRequiredDescription
    kategorienobject[]yesJede Kategorie, unter der ein Produkt stehen kann.
    kategorien[].pfadstringyesVollständiger Kategoriepfad, mit „ > “ getrennt, z. B. „eve-Home > Bettwäsche > Bettwäsche-Sets“.
    kategorien[].groessenstring[]yesGrößen, die diese Kategorie anbietet.
    farbenstring[]yesAlle 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.

Scope: produkte:schreiben

Body – ProduktAnfrage
FieldTypeRequiredDescription
uebergeordnete_skustring | nullnoDeine Produktnummer, eindeutig in deinem Shop, max. 100 Zeichen. Pflicht beim Anlegen.
titelstringyesMax. 100 Zeichen.
beschreibungstringyes10 bis 10.000 Zeichen.
kategoriestringyesVollständiger Pfad, z. B. „eve-Home > Bettwäsche > Bettwäsche-Sets“ (siehe /taxonomy).
rabattpreisnumber | string | nullno
versandkostennumber | string | nullno
variantenProduktVarianteEingabe[]yes
varianten[].farbestringyesFarbe wie im Shop, z. B. „Weiß“ (siehe /taxonomy).
varianten[].groessestringyesGröße aus der Größenliste der Kategorie, z. B. „M“ oder „200 x 200 cm“.
varianten[].preisnumber | stringyesPreis dieser Variante in EUR, brutto. Preise dürfen sich nur je Größe unterscheiden; der niedrigste ist der Grundpreis.
varianten[].lagerbestandnumber | stringyesBestand, 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 | nullnoDeine SKU dieser Kombination, eindeutig in deinem Shop, max. 64 Zeichen.
varianten[].eanstring | nullnoEAN / 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[]noÖ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.

Responses

  • 201 Angelegt (Location: /api/v1/products/{id}). – ProduktErgebnis
    FieldTypeRequiredDescription
    ergebnisstringyesunveraendert: Das Produkt war schon so; nichts wurde geschrieben oder neu übersetzt.Values: angelegt, aktualisiert, unveraendert
    produktProduktyes
    produkt.idstringyeseveyamin-Produkt-ID.
    produkt.artikelnummerstringyeseveyamin-Artikelnummer.
    produkt.uebergeordnete_skustring | nullyes
    produkt.statusstringyesNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Values: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkt.titelstringyes
    produkt.beschreibungstringyes
    produkt.kategoriestringyes
    produkt.rabattpreisnumber | nullyes
    produkt.versandkostennumber | nullyes
    produkt.geaendert_amstringyesLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkt.variantenobject[]yes
    produkt.varianten[].variant_idstringyes
    produkt.varianten[].farbestringyes
    produkt.varianten[].groessestringyes
    produkt.varianten[].preisnumberyes
    produkt.varianten[].lagerbestandintegeryesGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkt.varianten[].skustring | nullyes
    produkt.varianten[].eanstring | nullyes
    produkt.varianten[].bild_urlsstring[]yesDie Bilder dieser Farbe, bei eveyamin gespeichert.
    hinweiseobject[]yesZ. B. korrigierte Schreibweisen, nicht geladene Bilder, ignorierter Bestand.
    hinweise[].codestringyes
    hinweise[].feldstring | nullyes
    hinweise[].nachrichtstringyes
  • 202 Die Bilder werden noch geladen (Location: /api/v1/jobs/{id}). – ProduktInArbeit
    FieldTypeRequiredDescription
    ergebnis"in_arbeit"yes
    auftragAuftragyes
    auftrag.idstringyes
    auftrag.statusstringyesersetzt: Eine neuere Anfrage für dasselbe Produkt kam dazwischen; dieser Auftrag wird nicht mehr geschrieben.Values: wartet, in_arbeit, fertig, fehlgeschlagen, ersetzt
    auftrag.aktionstringyesValues: anlegen, aktualisieren
    auftrag.schluesselstringyesÜbergeordnete SKU des Produkts, oder seine Artikelnummer, wenn es keine hat.
    auftrag.bilderobjectyes
    auftrag.bilder.gesamtintegeryes(-9007199254740991–9007199254740991)
    auftrag.bilder.geladenintegeryes(-9007199254740991–9007199254740991)
    auftrag.bilder.fehlgeschlagenintegeryes(-9007199254740991–9007199254740991)
    auftrag.produktobject | nullyesSobald das Produkt geschrieben ist.
    auftrag.produkt.idstringyes
    auftrag.produkt.artikelnummerstringyes
    auftrag.produkt.uebergeordnete_skustring | nullyes
    auftrag.produkt.statusstringyesValues: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    auftrag.fehlerstring | nullyesWarum der Auftrag fehlgeschlagen ist.
    auftrag.hinweiseobject[]yes
    auftrag.hinweise[].codestringyes
    auftrag.hinweise[].feldstring | nullyes
    auftrag.hinweise[].nachrichtstringyes
    auftrag.erstellt_amstringyesEingang der Anfrage. ISO 8601, UTC.
    auftrag.abgeschlossen_amstring | nullyes
    hinweiseobject[]yes
    hinweise[].codestringyes
    hinweise[].feldstring | nullyes
    hinweise[].nachrichtstringyes
  • 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.

Scope: produkte:schreiben

Parameters

FieldTypeRequiredDescription
seite (query)integernoSeite, ab 1.
pro_seite (query)integernoProdukte pro Seite, höchstens 100.
geaendert_seit (query)string (date-time)noNur Produkte, die danach geändert wurden (ISO 8601 mit Zeitzone).

Responses

  • 200 Eine Seite Produkte. – ProduktListe
    FieldTypeRequiredDescription
    seiteintegeryes(-9007199254740991–9007199254740991)
    pro_seiteintegeryes(-9007199254740991–9007199254740991)
    gesamtintegeryesProdukte insgesamt (mit geaendert_seit: seither geänderte). (-9007199254740991–9007199254740991)
    produkteProdukt[]yes
    produkte[].idstringyeseveyamin-Produkt-ID.
    produkte[].artikelnummerstringyeseveyamin-Artikelnummer.
    produkte[].uebergeordnete_skustring | nullyes
    produkte[].statusstringyesNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Values: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkte[].titelstringyes
    produkte[].beschreibungstringyes
    produkte[].kategoriestringyes
    produkte[].rabattpreisnumber | nullyes
    produkte[].versandkostennumber | nullyes
    produkte[].geaendert_amstringyesLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkte[].variantenobject[]yes
    produkte[].varianten[].variant_idstringyes
    produkte[].varianten[].farbestringyes
    produkte[].varianten[].groessestringyes
    produkte[].varianten[].preisnumberyes
    produkte[].varianten[].lagerbestandintegeryesGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkte[].varianten[].skustring | nullyes
    produkte[].varianten[].eanstring | nullyes
    produkte[].varianten[].bild_urlsstring[]yesDie 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).

Scope: produkte:schreiben

Parameters

FieldTypeRequiredDescription
id (path)stringyeseveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.

Responses

  • 200 Das Produkt. – Produkt
    FieldTypeRequiredDescription
    idstringyeseveyamin-Produkt-ID.
    artikelnummerstringyeseveyamin-Artikelnummer.
    uebergeordnete_skustring | nullyes
    statusstringyesNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Values: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    titelstringyes
    beschreibungstringyes
    kategoriestringyes
    rabattpreisnumber | nullyes
    versandkostennumber | nullyes
    geaendert_amstringyesLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    variantenobject[]yes
    varianten[].variant_idstringyes
    varianten[].farbestringyes
    varianten[].groessestringyes
    varianten[].preisnumberyes
    varianten[].lagerbestandintegeryesGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    varianten[].skustring | nullyes
    varianten[].eanstring | nullyes
    varianten[].bild_urlsstring[]yesDie 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.

Scope: produkte:schreiben

Parameters

FieldTypeRequiredDescription
id (path)stringyeseveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.
Body – ProduktAnfrage
FieldTypeRequiredDescription
uebergeordnete_skustring | nullnoDeine Produktnummer, eindeutig in deinem Shop, max. 100 Zeichen. Pflicht beim Anlegen.
titelstringyesMax. 100 Zeichen.
beschreibungstringyes10 bis 10.000 Zeichen.
kategoriestringyesVollständiger Pfad, z. B. „eve-Home > Bettwäsche > Bettwäsche-Sets“ (siehe /taxonomy).
rabattpreisnumber | string | nullno
versandkostennumber | string | nullno
variantenProduktVarianteEingabe[]yes
varianten[].farbestringyesFarbe wie im Shop, z. B. „Weiß“ (siehe /taxonomy).
varianten[].groessestringyesGröße aus der Größenliste der Kategorie, z. B. „M“ oder „200 x 200 cm“.
varianten[].preisnumber | stringyesPreis dieser Variante in EUR, brutto. Preise dürfen sich nur je Größe unterscheiden; der niedrigste ist der Grundpreis.
varianten[].lagerbestandnumber | stringyesBestand, 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 | nullnoDeine SKU dieser Kombination, eindeutig in deinem Shop, max. 64 Zeichen.
varianten[].eanstring | nullnoEAN / 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[]noÖ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.

Responses

  • 200 Aktualisiert, oder unveraendert. – ProduktErgebnis
    FieldTypeRequiredDescription
    ergebnisstringyesunveraendert: Das Produkt war schon so; nichts wurde geschrieben oder neu übersetzt.Values: angelegt, aktualisiert, unveraendert
    produktProduktyes
    produkt.idstringyeseveyamin-Produkt-ID.
    produkt.artikelnummerstringyeseveyamin-Artikelnummer.
    produkt.uebergeordnete_skustring | nullyes
    produkt.statusstringyesNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Values: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkt.titelstringyes
    produkt.beschreibungstringyes
    produkt.kategoriestringyes
    produkt.rabattpreisnumber | nullyes
    produkt.versandkostennumber | nullyes
    produkt.geaendert_amstringyesLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkt.variantenobject[]yes
    produkt.varianten[].variant_idstringyes
    produkt.varianten[].farbestringyes
    produkt.varianten[].groessestringyes
    produkt.varianten[].preisnumberyes
    produkt.varianten[].lagerbestandintegeryesGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkt.varianten[].skustring | nullyes
    produkt.varianten[].eanstring | nullyes
    produkt.varianten[].bild_urlsstring[]yesDie Bilder dieser Farbe, bei eveyamin gespeichert.
    hinweiseobject[]yesZ. B. korrigierte Schreibweisen, nicht geladene Bilder, ignorierter Bestand.
    hinweise[].codestringyes
    hinweise[].feldstring | nullyes
    hinweise[].nachrichtstringyes
  • 201 Angelegt. – ProduktErgebnis
    FieldTypeRequiredDescription
    ergebnisstringyesunveraendert: Das Produkt war schon so; nichts wurde geschrieben oder neu übersetzt.Values: angelegt, aktualisiert, unveraendert
    produktProduktyes
    produkt.idstringyeseveyamin-Produkt-ID.
    produkt.artikelnummerstringyeseveyamin-Artikelnummer.
    produkt.uebergeordnete_skustring | nullyes
    produkt.statusstringyesNeue und geänderte Texte werden erst übersetzt; ohne eingerichteten Zahlungsanbieter bleibt das Produkt verborgen.Values: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    produkt.titelstringyes
    produkt.beschreibungstringyes
    produkt.kategoriestringyes
    produkt.rabattpreisnumber | nullyes
    produkt.versandkostennumber | nullyes
    produkt.geaendert_amstringyesLetzte Änderung am Produkt, auch am Bestand. ISO 8601, UTC.
    produkt.variantenobject[]yes
    produkt.varianten[].variant_idstringyes
    produkt.varianten[].farbestringyes
    produkt.varianten[].groessestringyes
    produkt.varianten[].preisnumberyes
    produkt.varianten[].lagerbestandintegeryesGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    produkt.varianten[].skustring | nullyes
    produkt.varianten[].eanstring | nullyes
    produkt.varianten[].bild_urlsstring[]yesDie Bilder dieser Farbe, bei eveyamin gespeichert.
    hinweiseobject[]yesZ. B. korrigierte Schreibweisen, nicht geladene Bilder, ignorierter Bestand.
    hinweise[].codestringyes
    hinweise[].feldstring | nullyes
    hinweise[].nachrichtstringyes
  • 202 Die Bilder werden noch geladen (Location: /api/v1/jobs/{id}). – ProduktInArbeit
    FieldTypeRequiredDescription
    ergebnis"in_arbeit"yes
    auftragAuftragyes
    auftrag.idstringyes
    auftrag.statusstringyesersetzt: Eine neuere Anfrage für dasselbe Produkt kam dazwischen; dieser Auftrag wird nicht mehr geschrieben.Values: wartet, in_arbeit, fertig, fehlgeschlagen, ersetzt
    auftrag.aktionstringyesValues: anlegen, aktualisieren
    auftrag.schluesselstringyesÜbergeordnete SKU des Produkts, oder seine Artikelnummer, wenn es keine hat.
    auftrag.bilderobjectyes
    auftrag.bilder.gesamtintegeryes(-9007199254740991–9007199254740991)
    auftrag.bilder.geladenintegeryes(-9007199254740991–9007199254740991)
    auftrag.bilder.fehlgeschlagenintegeryes(-9007199254740991–9007199254740991)
    auftrag.produktobject | nullyesSobald das Produkt geschrieben ist.
    auftrag.produkt.idstringyes
    auftrag.produkt.artikelnummerstringyes
    auftrag.produkt.uebergeordnete_skustring | nullyes
    auftrag.produkt.statusstringyesValues: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    auftrag.fehlerstring | nullyesWarum der Auftrag fehlgeschlagen ist.
    auftrag.hinweiseobject[]yes
    auftrag.hinweise[].codestringyes
    auftrag.hinweise[].feldstring | nullyes
    auftrag.hinweise[].nachrichtstringyes
    auftrag.erstellt_amstringyesEingang der Anfrage. ISO 8601, UTC.
    auftrag.abgeschlossen_amstring | nullyes
    hinweiseobject[]yes
    hinweise[].codestringyes
    hinweise[].feldstring | nullyes
    hinweise[].nachrichtstringyes
  • 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).

Scope: produkte:schreiben

Parameters

FieldTypeRequiredDescription
id (path)stringyeseveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.

Responses

  • 200 Archiviert. – ProduktArchiviert
    FieldTypeRequiredDescription
    ergebnisstringyesValues: archiviert, bereits_archiviert
    produktobjectyes
    produkt.idstringyes
    produkt.artikelnummerstringyes
    produkt.uebergeordnete_skustring | nullyes
    produkt.statusstringyesValues: 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).

Scope: produkte:schreiben

Parameters

FieldTypeRequiredDescription
id (path)stringyesAuftrags-ID aus der 202-Antwort.

Responses

  • 200 Der Auftrag. – Auftrag
    FieldTypeRequiredDescription
    idstringyes
    statusstringyesersetzt: Eine neuere Anfrage für dasselbe Produkt kam dazwischen; dieser Auftrag wird nicht mehr geschrieben.Values: wartet, in_arbeit, fertig, fehlgeschlagen, ersetzt
    aktionstringyesValues: anlegen, aktualisieren
    schluesselstringyesÜbergeordnete SKU des Produkts, oder seine Artikelnummer, wenn es keine hat.
    bilderobjectyes
    bilder.gesamtintegeryes(-9007199254740991–9007199254740991)
    bilder.geladenintegeryes(-9007199254740991–9007199254740991)
    bilder.fehlgeschlagenintegeryes(-9007199254740991–9007199254740991)
    produktobject | nullyesSobald das Produkt geschrieben ist.
    produkt.idstringyes
    produkt.artikelnummerstringyes
    produkt.uebergeordnete_skustring | nullyes
    produkt.statusstringyesValues: Aktiv, Wird übersetzt, Wartet auf Zahlungsanbieter, Gesperrt, Archiviert
    fehlerstring | nullyesWarum der Auftrag fehlgeschlagen ist.
    hinweiseobject[]yes
    hinweise[].codestringyes
    hinweise[].feldstring | nullyes
    hinweise[].nachrichtstringyes
    erstellt_amstringyesEingang der Anfrage. ISO 8601, UTC.
    abgeschlossen_amstring | nullyes
  • 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).

Scope: bestand:schreiben

Parameters

FieldTypeRequiredDescription
seite (query)integernoSeite, ab 1.
pro_seite (query)integernoVarianten pro Seite, höchstens 500.

Responses

  • 200 Eine Seite Varianten. – BestandListe
    FieldTypeRequiredDescription
    seiteintegeryes(-9007199254740991–9007199254740991)
    pro_seiteintegeryes(-9007199254740991–9007199254740991)
    gesamtintegeryesVarianten insgesamt. (-9007199254740991–9007199254740991)
    positionenobject[]yes
    positionen[].produkt_idstringyes
    positionen[].artikelnummerstringyes
    positionen[].uebergeordnete_skustring | nullyes
    positionen[].skustring | nullyes
    positionen[].eanstring | nullyesEAN / GTIN der Variante, sonst null.
    positionen[].farbestringyes
    positionen[].groessestringyes
    positionen[].titelstringyes
    positionen[].lagerbestandintegeryesGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegeryesStück in offenen eveyamin-Bestellungen. (-9007199254740991–9007199254740991)
    positionen[].standstring | nullyesZuletzt übernommener stand.
    positionen[].gesperrtbooleanyesDas 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.

Scope: bestand:schreiben

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

Responses

  • 200 Ergebnis je Zeile. – BestandErgebnis
    FieldTypeRequiredDescription
    zusammenfassungobjectyes
    zusammenfassung.okintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.unveraendertintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.veraltetintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.fehlerintegeryes(-9007199254740991–9007199254740991)
    positionenobject[]yes
    positionen[].zeileintegeryesIndex der Zeile in positionen, ab 0. (-9007199254740991–9007199254740991)
    positionen[].statusstringyesok = gespeichert, unveraendert = war schon so, veraltet = älterer stand, fehler = siehe fehler.Values: ok, unveraendert, veraltet, fehler
    positionen[].produkt_idstringno
    positionen[].artikelnummerstringno
    positionen[].uebergeordnete_skustring | nullno
    positionen[].skustring | nullno
    positionen[].eanstring | nullnoEAN / GTIN der Variante, sonst null.
    positionen[].farbestringno
    positionen[].groessestringno
    positionen[].gesendetintegernoDein lagerbestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegernoStück in offenen eveyamin-Bestellungen, die abgezogen wurden. (-9007199254740991–9007199254740991)
    positionen[].vorherintegernoGespeicherter Bestand vor dieser Anfrage. (-9007199254740991–9007199254740991)
    positionen[].lagerbestandintegernoGespeicherter Bestand jetzt: gesendet − offen, mindestens 0. (-9007199254740991–9007199254740991)
    positionen[].fehlerobjectno
    positionen[].fehler.codestringyes
    positionen[].fehler.feldstring | nullyes
    positionen[].fehler.nachrichtstringyes
    positionen[].hinweiseobject[]noZ. B. eine korrigierte Schreibweise.
    positionen[].hinweise[].codestringyes
    positionen[].hinweise[].feldstring | nullyes
    positionen[].hinweise[].nachrichtstringyes
  • 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

Scope: bestand:schreiben

Parameters

FieldTypeRequiredDescription
id (path)stringyeseveyamin-Produkt-ID, Übergeordnete SKU oder Artikelnummer.
seite (query)integernoSeite, ab 1.
pro_seite (query)integernoVarianten pro Seite, höchstens 500.

Responses

  • 200 Die Varianten des Produkts. – BestandListe
    FieldTypeRequiredDescription
    seiteintegeryes(-9007199254740991–9007199254740991)
    pro_seiteintegeryes(-9007199254740991–9007199254740991)
    gesamtintegeryesVarianten insgesamt. (-9007199254740991–9007199254740991)
    positionenobject[]yes
    positionen[].produkt_idstringyes
    positionen[].artikelnummerstringyes
    positionen[].uebergeordnete_skustring | nullyes
    positionen[].skustring | nullyes
    positionen[].eanstring | nullyesEAN / GTIN der Variante, sonst null.
    positionen[].farbestringyes
    positionen[].groessestringyes
    positionen[].titelstringyes
    positionen[].lagerbestandintegeryesGespeicherter, kaufbarer Bestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegeryesStück in offenen eveyamin-Bestellungen. (-9007199254740991–9007199254740991)
    positionen[].standstring | nullyesZuletzt übernommener stand.
    positionen[].gesperrtbooleanyesDas 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.

Scope: bestand:schreiben

Parameters

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

Responses

  • 200 Ergebnis je Zeile. – BestandErgebnis
    FieldTypeRequiredDescription
    zusammenfassungobjectyes
    zusammenfassung.okintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.unveraendertintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.veraltetintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.fehlerintegeryes(-9007199254740991–9007199254740991)
    positionenobject[]yes
    positionen[].zeileintegeryesIndex der Zeile in positionen, ab 0. (-9007199254740991–9007199254740991)
    positionen[].statusstringyesok = gespeichert, unveraendert = war schon so, veraltet = älterer stand, fehler = siehe fehler.Values: ok, unveraendert, veraltet, fehler
    positionen[].produkt_idstringno
    positionen[].artikelnummerstringno
    positionen[].uebergeordnete_skustring | nullno
    positionen[].skustring | nullno
    positionen[].eanstring | nullnoEAN / GTIN der Variante, sonst null.
    positionen[].farbestringno
    positionen[].groessestringno
    positionen[].gesendetintegernoDein lagerbestand. (-9007199254740991–9007199254740991)
    positionen[].offenintegernoStück in offenen eveyamin-Bestellungen, die abgezogen wurden. (-9007199254740991–9007199254740991)
    positionen[].vorherintegernoGespeicherter Bestand vor dieser Anfrage. (-9007199254740991–9007199254740991)
    positionen[].lagerbestandintegernoGespeicherter Bestand jetzt: gesendet − offen, mindestens 0. (-9007199254740991–9007199254740991)
    positionen[].fehlerobjectno
    positionen[].fehler.codestringyes
    positionen[].fehler.feldstring | nullyes
    positionen[].fehler.nachrichtstringyes
    positionen[].hinweiseobject[]noZ. B. eine korrigierte Schreibweise.
    positionen[].hinweise[].codestringyes
    positionen[].hinweise[].feldstring | nullyes
    positionen[].hinweise[].nachrichtstringyes
  • 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.

Scope: bestellungen:lesen

Parameters

FieldTypeRequiredDescription
seite (query)integernoSeite, ab 1.
pro_seite (query)integernoBestellungen pro Seite, höchstens 100.

Responses

  • 200 Eine Seite Bestellungen. – BestellListe
    FieldTypeRequiredDescription
    seiteintegeryes(-9007199254740991–9007199254740991)
    pro_seiteintegeryes(-9007199254740991–9007199254740991)
    gesamtintegeryesBestellungen insgesamt. (-9007199254740991–9007199254740991)
    bestellungenBestellung[]yes
    bestellungen[].idstringyeseveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellungen[].bestellnummerintegeryes(-9007199254740991–9007199254740991)
    bestellungen[].bestelldatumstringyesWann der Käufer bestellt hat. ISO 8601, UTC.
    bestellungen[].statusstringyesValues: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    bestellungen[].versandartstringyesValues: Standardversand, Expressversand
    bestellungen[].bestaetigt_amstring | nullyes
    bestellungen[].geaendert_amstringyesLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    bestellungen[].lieferadresseLieferadresseyesWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    bestellungen[].lieferadresse.vornamestringyes
    bestellungen[].lieferadresse.nachnamestringyes
    bestellungen[].lieferadresse.firmastring | nullyes
    bestellungen[].lieferadresse.strassestringyesStraße und Hausnummer.
    bestellungen[].lieferadresse.plzstringyes
    bestellungen[].lieferadresse.ortstringyes
    bestellungen[].lieferadresse.landstringyesWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    bestellungen[].lieferadresse.telefonstring | nullyesFür den Versanddienstleister; optional beim Kauf.
    bestellungen[].summenobjectyesNur deine Positionen, in EUR, brutto.
    bestellungen[].summen.warennumberyes
    bestellungen[].summen.versandkostennumberyes
    bestellungen[].summen.gesamtnumberyes
    bestellungen[].positionenBestellPosition[]yesNur deine Positionen; andere Händler derselben Bestellung fehlen.
    bestellungen[].positionen[].position_idstringyeseveyamin-ID der Bestellposition.
    bestellungen[].positionen[].produkt_idstringyes
    bestellungen[].positionen[].variant_idstring | nullyes
    bestellungen[].positionen[].artikelnummerstring | nullyes
    bestellungen[].positionen[].uebergeordnete_skustring | nullyesAktuelle Übergeordnete SKU des Produkts.
    bestellungen[].positionen[].skustring | nullyesAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    bestellungen[].positionen[].eanstring | nullyesAktuelle EAN / GTIN der Variante, sonst null.
    bestellungen[].positionen[].titelstringyesProdukttitel zum Zeitpunkt des Kaufs.
    bestellungen[].positionen[].farbestring | nullyes
    bestellungen[].positionen[].groessestring | nullyesGröße wie im Shop, oder „Maßanfertigung“.
    bestellungen[].positionen[].mengenumberyesStückzahl, bei Meterware Meter.
    bestellungen[].positionen[].einheitstringyesValues: Stück, Meter
    bestellungen[].positionen[].einzelpreisnumberyesBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    bestellungen[].positionen[].summenumberyesBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    bestellungen[].positionen[].versandkostennumberyesVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    bestellungen[].positionen[].lieferstatusstringyesValues: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    bestellungen[].positionen[].bestaetigt_amstring | nullyes
    bestellungen[].positionen[].sendung_idstring | nullyesDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    bestellungen[].positionen[].versendet_amstring | nullyes
    bestellungen[].positionen[].massanfertigungMassanfertigung | nullyesDie Körpermaße bei einer Maßanfertigung, sonst null.
    bestellungen[].positionen[].massanfertigung.einheitstringyesSo, wie der Käufer gemessen hat; nicht umgerechnet.Values: cm, Zoll
    bestellungen[].positionen[].massanfertigung.brustumfangnumberyes
    bestellungen[].positionen[].massanfertigung.taillenumfangnumberyes
    bestellungen[].positionen[].massanfertigung.hueftumfangnumberyes
    bestellungen[].positionen[].massanfertigung.koerpergroessenumberyesBarfuß.
    bestellungen[].positionen[].massanfertigung.schluesselbein_bodennumberyesVom Schlüsselbein bis zum Boden.
    bestellungen[].positionen[].massanfertigung.schulterlaengenumberyes
    bestellungen[].positionen[].massanfertigung.extralaengenumber | nullyes
    bestellungen[].sendungenSendung[]yesDeine Pakete dieser Bestellung, ältestes zuerst.
    bestellungen[].sendungen[].idstringyes
    bestellungen[].sendungen[].versanddienstleisterstringyesValues: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    bestellungen[].sendungen[].sendungsnummerstringyesOhne Leerzeichen, in Großbuchstaben.
    bestellungen[].sendungen[].tracking_urlstring | nullyesLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    bestellungen[].sendungen[].versendet_amstringyesWann das Paket gemeldet wurde. ISO 8601, UTC.
    bestellungen[].sendungen[].positionenstring[]yesposition_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.

Scope: bestellungen:lesen

Parameters

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

Responses

  • 200 Eine Seite Bestellungen. – BestellListe
    FieldTypeRequiredDescription
    seiteintegeryes(-9007199254740991–9007199254740991)
    pro_seiteintegeryes(-9007199254740991–9007199254740991)
    gesamtintegeryesBestellungen insgesamt. (-9007199254740991–9007199254740991)
    bestellungenBestellung[]yes
    bestellungen[].idstringyeseveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellungen[].bestellnummerintegeryes(-9007199254740991–9007199254740991)
    bestellungen[].bestelldatumstringyesWann der Käufer bestellt hat. ISO 8601, UTC.
    bestellungen[].statusstringyesValues: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    bestellungen[].versandartstringyesValues: Standardversand, Expressversand
    bestellungen[].bestaetigt_amstring | nullyes
    bestellungen[].geaendert_amstringyesLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    bestellungen[].lieferadresseLieferadresseyesWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    bestellungen[].lieferadresse.vornamestringyes
    bestellungen[].lieferadresse.nachnamestringyes
    bestellungen[].lieferadresse.firmastring | nullyes
    bestellungen[].lieferadresse.strassestringyesStraße und Hausnummer.
    bestellungen[].lieferadresse.plzstringyes
    bestellungen[].lieferadresse.ortstringyes
    bestellungen[].lieferadresse.landstringyesWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    bestellungen[].lieferadresse.telefonstring | nullyesFür den Versanddienstleister; optional beim Kauf.
    bestellungen[].summenobjectyesNur deine Positionen, in EUR, brutto.
    bestellungen[].summen.warennumberyes
    bestellungen[].summen.versandkostennumberyes
    bestellungen[].summen.gesamtnumberyes
    bestellungen[].positionenBestellPosition[]yesNur deine Positionen; andere Händler derselben Bestellung fehlen.
    bestellungen[].positionen[].position_idstringyeseveyamin-ID der Bestellposition.
    bestellungen[].positionen[].produkt_idstringyes
    bestellungen[].positionen[].variant_idstring | nullyes
    bestellungen[].positionen[].artikelnummerstring | nullyes
    bestellungen[].positionen[].uebergeordnete_skustring | nullyesAktuelle Übergeordnete SKU des Produkts.
    bestellungen[].positionen[].skustring | nullyesAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    bestellungen[].positionen[].eanstring | nullyesAktuelle EAN / GTIN der Variante, sonst null.
    bestellungen[].positionen[].titelstringyesProdukttitel zum Zeitpunkt des Kaufs.
    bestellungen[].positionen[].farbestring | nullyes
    bestellungen[].positionen[].groessestring | nullyesGröße wie im Shop, oder „Maßanfertigung“.
    bestellungen[].positionen[].mengenumberyesStückzahl, bei Meterware Meter.
    bestellungen[].positionen[].einheitstringyesValues: Stück, Meter
    bestellungen[].positionen[].einzelpreisnumberyesBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    bestellungen[].positionen[].summenumberyesBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    bestellungen[].positionen[].versandkostennumberyesVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    bestellungen[].positionen[].lieferstatusstringyesValues: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    bestellungen[].positionen[].bestaetigt_amstring | nullyes
    bestellungen[].positionen[].sendung_idstring | nullyesDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    bestellungen[].positionen[].versendet_amstring | nullyes
    bestellungen[].positionen[].massanfertigungMassanfertigung | nullyesDie Körpermaße bei einer Maßanfertigung, sonst null.
    bestellungen[].positionen[].massanfertigung.einheitstringyesSo, wie der Käufer gemessen hat; nicht umgerechnet.Values: cm, Zoll
    bestellungen[].positionen[].massanfertigung.brustumfangnumberyes
    bestellungen[].positionen[].massanfertigung.taillenumfangnumberyes
    bestellungen[].positionen[].massanfertigung.hueftumfangnumberyes
    bestellungen[].positionen[].massanfertigung.koerpergroessenumberyesBarfuß.
    bestellungen[].positionen[].massanfertigung.schluesselbein_bodennumberyesVom Schlüsselbein bis zum Boden.
    bestellungen[].positionen[].massanfertigung.schulterlaengenumberyes
    bestellungen[].positionen[].massanfertigung.extralaengenumber | nullyes
    bestellungen[].sendungenSendung[]yesDeine Pakete dieser Bestellung, ältestes zuerst.
    bestellungen[].sendungen[].idstringyes
    bestellungen[].sendungen[].versanddienstleisterstringyesValues: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    bestellungen[].sendungen[].sendungsnummerstringyesOhne Leerzeichen, in Großbuchstaben.
    bestellungen[].sendungen[].tracking_urlstring | nullyesLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    bestellungen[].sendungen[].versendet_amstringyesWann das Paket gemeldet wurde. ISO 8601, UTC.
    bestellungen[].sendungen[].positionenstring[]yesposition_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

Scope: bestellungen:lesen

Parameters

FieldTypeRequiredDescription
id (path)stringyeseveyamin-Bestell-ID oder Bestellnummer.

Responses

  • 200 Die Bestellung mit deinen Positionen. – Bestellung
    FieldTypeRequiredDescription
    idstringyeseveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellnummerintegeryes(-9007199254740991–9007199254740991)
    bestelldatumstringyesWann der Käufer bestellt hat. ISO 8601, UTC.
    statusstringyesValues: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    versandartstringyesValues: Standardversand, Expressversand
    bestaetigt_amstring | nullyes
    geaendert_amstringyesLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    lieferadresseLieferadresseyesWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    lieferadresse.vornamestringyes
    lieferadresse.nachnamestringyes
    lieferadresse.firmastring | nullyes
    lieferadresse.strassestringyesStraße und Hausnummer.
    lieferadresse.plzstringyes
    lieferadresse.ortstringyes
    lieferadresse.landstringyesWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    lieferadresse.telefonstring | nullyesFür den Versanddienstleister; optional beim Kauf.
    summenobjectyesNur deine Positionen, in EUR, brutto.
    summen.warennumberyes
    summen.versandkostennumberyes
    summen.gesamtnumberyes
    positionenBestellPosition[]yesNur deine Positionen; andere Händler derselben Bestellung fehlen.
    positionen[].position_idstringyeseveyamin-ID der Bestellposition.
    positionen[].produkt_idstringyes
    positionen[].variant_idstring | nullyes
    positionen[].artikelnummerstring | nullyes
    positionen[].uebergeordnete_skustring | nullyesAktuelle Übergeordnete SKU des Produkts.
    positionen[].skustring | nullyesAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    positionen[].eanstring | nullyesAktuelle EAN / GTIN der Variante, sonst null.
    positionen[].titelstringyesProdukttitel zum Zeitpunkt des Kaufs.
    positionen[].farbestring | nullyes
    positionen[].groessestring | nullyesGröße wie im Shop, oder „Maßanfertigung“.
    positionen[].mengenumberyesStückzahl, bei Meterware Meter.
    positionen[].einheitstringyesValues: Stück, Meter
    positionen[].einzelpreisnumberyesBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    positionen[].summenumberyesBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    positionen[].versandkostennumberyesVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    positionen[].lieferstatusstringyesValues: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    positionen[].bestaetigt_amstring | nullyes
    positionen[].sendung_idstring | nullyesDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    positionen[].versendet_amstring | nullyes
    positionen[].massanfertigungMassanfertigung | nullyesDie Körpermaße bei einer Maßanfertigung, sonst null.
    positionen[].massanfertigung.einheitstringyesSo, wie der Käufer gemessen hat; nicht umgerechnet.Values: cm, Zoll
    positionen[].massanfertigung.brustumfangnumberyes
    positionen[].massanfertigung.taillenumfangnumberyes
    positionen[].massanfertigung.hueftumfangnumberyes
    positionen[].massanfertigung.koerpergroessenumberyesBarfuß.
    positionen[].massanfertigung.schluesselbein_bodennumberyesVom Schlüsselbein bis zum Boden.
    positionen[].massanfertigung.schulterlaengenumberyes
    positionen[].massanfertigung.extralaengenumber | nullyes
    sendungenSendung[]yesDeine Pakete dieser Bestellung, ältestes zuerst.
    sendungen[].idstringyes
    sendungen[].versanddienstleisterstringyesValues: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    sendungen[].sendungsnummerstringyesOhne Leerzeichen, in Großbuchstaben.
    sendungen[].tracking_urlstring | nullyesLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    sendungen[].versendet_amstringyesWann das Paket gemeldet wurde. ISO 8601, UTC.
    sendungen[].positionenstring[]yesposition_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).

Scope: bestellungen:lesen

Parameters

FieldTypeRequiredDescription
id (path)stringyeseveyamin-Bestell-ID oder Bestellnummer.

Responses

  • 200 Bestätigt. – Bestaetigung
    FieldTypeRequiredDescription
    idstringyes
    bestellnummerintegeryes(-9007199254740991–9007199254740991)
    bestaetigt_amstringyesWann die Bestellung zum ersten Mal bestätigt wurde. ISO 8601, UTC.
    bereits_bestaetigtbooleanyestrue: 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.

Scope: bestellungen:lesen

Body – BestaetigungAnfrage
FieldTypeRequiredDescription
bestellungenstring | integer[]yesBestell-IDs oder Bestellnummern.

Responses

  • 200 Ergebnis je Eintrag. – BestaetigungErgebnis
    FieldTypeRequiredDescription
    zusammenfassungobjectyes
    zusammenfassung.okintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.bereits_bestaetigtintegeryes(-9007199254740991–9007199254740991)
    zusammenfassung.fehlerintegeryes(-9007199254740991–9007199254740991)
    bestellungenobject[]yes
    bestellungen[].zeileintegeryesIndex in bestellungen, ab 0. (-9007199254740991–9007199254740991)
    bestellungen[].statusstringyesValues: ok, bereits_bestaetigt, fehler
    bestellungen[].idstringno
    bestellungen[].bestellnummerintegerno(-9007199254740991–9007199254740991)
    bestellungen[].bestaetigt_amstringnoWann die Bestellung zum ersten Mal bestätigt wurde. ISO 8601, UTC.
    bestellungen[].fehlerobjectno
    bestellungen[].fehler.codestringyes
    bestellungen[].fehler.feldstring | nullyes
    bestellungen[].fehler.nachrichtstringyes
  • 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.

Scope: bestellungen:versenden

Parameters

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

Responses

  • 200 Gemeldet, oder schon so gemeldet (bereits_erfasst). – VersandErgebnis
    FieldTypeRequiredDescription
    bereits_erfasstbooleanyestrue: Dieses Paket war mit diesen Positionen schon gemeldet; nichts hat sich geändert, keine Mail.
    sendungSendungyesEin Paket: ganze Positionen, eine Sendungsnummer.
    sendung.idstringyes
    sendung.versanddienstleisterstringyesValues: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    sendung.sendungsnummerstringyesOhne Leerzeichen, in Großbuchstaben.
    sendung.tracking_urlstring | nullyesLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    sendung.versendet_amstringyesWann das Paket gemeldet wurde. ISO 8601, UTC.
    sendung.positionenstring[]yesposition_id der Positionen in diesem Paket.
    bestellungBestellungyes
    bestellung.idstringyeseveyamin-Bestell-ID; in Pfaden geht auch die Bestellnummer.
    bestellung.bestellnummerintegeryes(-9007199254740991–9007199254740991)
    bestellung.bestelldatumstringyesWann der Käufer bestellt hat. ISO 8601, UTC.
    bestellung.statusstringyesValues: Bezahlt, Versendet, Abgeschlossen, Storniert, Erstattet, Rückbuchung
    bestellung.versandartstringyesValues: Standardversand, Expressversand
    bestellung.bestaetigt_amstring | nullyes
    bestellung.geaendert_amstringyesLetzte Änderung eines Status deiner Positionen oder der Bestellung. ISO 8601, UTC.
    bestellung.lieferadresseLieferadresseyesWohin das Paket geht. Die E-Mail-Adresse des Käufers wird nicht weitergegeben.
    bestellung.lieferadresse.vornamestringyes
    bestellung.lieferadresse.nachnamestringyes
    bestellung.lieferadresse.firmastring | nullyes
    bestellung.lieferadresse.strassestringyesStraße und Hausnummer.
    bestellung.lieferadresse.plzstringyes
    bestellung.lieferadresse.ortstringyes
    bestellung.lieferadresse.landstringyesWie vom Käufer eingegeben, z. B. „Deutschland“ (noch kein Ländercode).
    bestellung.lieferadresse.telefonstring | nullyesFür den Versanddienstleister; optional beim Kauf.
    bestellung.summenobjectyesNur deine Positionen, in EUR, brutto.
    bestellung.summen.warennumberyes
    bestellung.summen.versandkostennumberyes
    bestellung.summen.gesamtnumberyes
    bestellung.positionenBestellPosition[]yesNur deine Positionen; andere Händler derselben Bestellung fehlen.
    bestellung.positionen[].position_idstringyeseveyamin-ID der Bestellposition.
    bestellung.positionen[].produkt_idstringyes
    bestellung.positionen[].variant_idstring | nullyes
    bestellung.positionen[].artikelnummerstring | nullyes
    bestellung.positionen[].uebergeordnete_skustring | nullyesAktuelle Übergeordnete SKU des Produkts.
    bestellung.positionen[].skustring | nullyesAktuelle SKU der Variante, sonst die beim Kauf gespeicherte.
    bestellung.positionen[].eanstring | nullyesAktuelle EAN / GTIN der Variante, sonst null.
    bestellung.positionen[].titelstringyesProdukttitel zum Zeitpunkt des Kaufs.
    bestellung.positionen[].farbestring | nullyes
    bestellung.positionen[].groessestring | nullyesGröße wie im Shop, oder „Maßanfertigung“.
    bestellung.positionen[].mengenumberyesStückzahl, bei Meterware Meter.
    bestellung.positionen[].einheitstringyesValues: Stück, Meter
    bestellung.positionen[].einzelpreisnumberyesBezahlter Preis je Stück bzw. Meter in EUR, brutto.
    bestellung.positionen[].summenumberyesBezahlter Warenwert der Position in EUR, brutto, ohne Versand.
    bestellung.positionen[].versandkostennumberyesVersandkosten in EUR, brutto. Sie stehen bei einer Position je Bestellung.
    bestellung.positionen[].lieferstatusstringyesValues: In Bearbeitung, Versendet, Abgeschlossen, Storniert, Zahlung ausstehend, Erstattet, Fehlgeschlagen
    bestellung.positionen[].bestaetigt_amstring | nullyes
    bestellung.positionen[].sendung_idstring | nullyesDas Paket, in dem die Position versendet wurde (sendungen[].id), sonst null.
    bestellung.positionen[].versendet_amstring | nullyes
    bestellung.positionen[].massanfertigungMassanfertigung | nullyesDie Körpermaße bei einer Maßanfertigung, sonst null.
    bestellung.positionen[].massanfertigung.einheitstringyesSo, wie der Käufer gemessen hat; nicht umgerechnet.Values: cm, Zoll
    bestellung.positionen[].massanfertigung.brustumfangnumberyes
    bestellung.positionen[].massanfertigung.taillenumfangnumberyes
    bestellung.positionen[].massanfertigung.hueftumfangnumberyes
    bestellung.positionen[].massanfertigung.koerpergroessenumberyesBarfuß.
    bestellung.positionen[].massanfertigung.schluesselbein_bodennumberyesVom Schlüsselbein bis zum Boden.
    bestellung.positionen[].massanfertigung.schulterlaengenumberyes
    bestellung.positionen[].massanfertigung.extralaengenumber | nullyes
    bestellung.sendungenSendung[]yesDeine Pakete dieser Bestellung, ältestes zuerst.
    bestellung.sendungen[].idstringyes
    bestellung.sendungen[].versanddienstleisterstringyesValues: DHL, DPD, Hermes, GLS, UPS, Deutsche Post, Sonstige
    bestellung.sendungen[].sendungsnummerstringyesOhne Leerzeichen, in Großbuchstaben.
    bestellung.sendungen[].tracking_urlstring | nullyesLink zur Sendungsverfolgung; null bei „Sonstige“ ohne eigenen Link.
    bestellung.sendungen[].versendet_amstringyesWann das Paket gemeldet wurde. ISO 8601, UTC.
    bestellung.sendungen[].positionenstring[]yesposition_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.

Versions and contact

The API is versioned (/api/v1). New fields and calls are added within v1 – so ignore fields you don't know. Anything that would break existing connections comes in v2 only, announced well ahead.

Questions about connecting: info@eveyamin.com.

Technical support

The information above should enable your technical team to complete the integration. If you need additional support, our technology partner is happy to assist you with the integration.

Seller API: connect products, stock and orders | eveyamin