# Dinilu Druck+Promo > Dinilu Druck+Promo ist ein B2B-Unternehmen für Werbemittel. > Wir liefern individuell bedruckte Werbemittel — Festivalbändchen, Lanyards, Taschen, > Tassen, Verpackungen und hunderte andere Produktkategorien — mit Online- > Preisberechnung und Lieferzeitschätzung je nach Menge und Spezifikation. > Alle Preise verstehen sich zzgl. MwSt. und zzgl. Versandkosten, sofern nicht ausdrücklich anders angegeben. Mindestbestellmengen gelten. > Währung: CHF. > Kontakt: info@dinilu.ch ## Produktkatalog Jede URL unten ist eine Kategorieseite mit einzelnen Produkten. Verwenden Sie GET /api/products?category={tid}, um Produkte einer Kategorie als JSON abzurufen. - [Armbänder und Lanyards](https://dinilu.ch/armbaender-und-lanyards) — Kategorie-tid: 677 - [Festival Armbänder](https://dinilu.ch/armbaender-und-lanyards/festival-armbaender) — Kategorie-tid: 681 - [Lanyards](https://dinilu.ch/armbaender-und-lanyards/lanyards) — Kategorie-tid: 704 - [Silikonarmbänder](https://dinilu.ch/armbaender-und-lanyards/silikonarmbaender) — Kategorie-tid: 288 - [Tyvek Armbänder](https://dinilu.ch/armbaender-und-lanyards/tyvek-armbaender) — Kategorie-tid: 763 - [Becher und Tassen](https://dinilu.ch/becher-und-tassen) — Kategorie-tid: 291 - [Emaille Tassen](https://dinilu.ch/becher-und-tassen/emaille-tassen) — Kategorie-tid: 787 - [Pappbecher](https://dinilu.ch/becher-und-tassen/pappbecher) — Kategorie-tid: 293 - [Plastikbecher](https://dinilu.ch/becher-und-tassen/plastikbecher) — Kategorie-tid: 292 - [Tassen](https://dinilu.ch/becher-und-tassen/tassen) — Kategorie-tid: 294 - [Thermobecher](https://dinilu.ch/becher-und-tassen/thermobecher) — Kategorie-tid: 313 - [Druckerzeugnisse](https://dinilu.ch/druckerzeugnisse) — Kategorie-tid: 275 - [Abreißkalender](https://dinilu.ch/druckerzeugnisse/abreisskalender) — Kategorie-tid: 277 - [Bedrucktes Toilettenpapier](https://dinilu.ch/druckerzeugnisse/bedrucktes-toilettenpapier) — Kategorie-tid: 282 - [Hotel Untersetzer](https://dinilu.ch/druckerzeugnisse/hotel-untersetzer) — Kategorie-tid: 279 - [Kalender](https://dinilu.ch/druckerzeugnisse/kalender) — Kategorie-tid: 344 - [Lentikulardruck](https://dinilu.ch/druckerzeugnisse/lentikulardruck) — Kategorie-tid: 278 - [Spielkarten](https://dinilu.ch/druckerzeugnisse/spielkarten) — Kategorie-tid: 276 - [Tischkalender](https://dinilu.ch/druckerzeugnisse/tischkalender) — Kategorie-tid: 755 - [Zigarettenpapier](https://dinilu.ch/druckerzeugnisse/zigarettenpapier) — Kategorie-tid: 283 - [Erste Hilfe](https://dinilu.ch/erste-hilfe) — Kategorie-tid: 303 - [Beatmungsmasken](https://dinilu.ch/erste-hilfe/beatmungsmasken) — Kategorie-tid: 304 - [Mundschutz aus Stoff](https://dinilu.ch/erste-hilfe/mundschutz-aus-stoff) — Kategorie-tid: 686 - [Pflaster](https://dinilu.ch/erste-hilfe/pflaster) — Kategorie-tid: 329 - [Reflektierende Utensilien](https://dinilu.ch/erste-hilfe/reflektierende-utensilien) — Kategorie-tid: 312 - [IT Zubehör](https://dinilu.ch/it-zubehoer) — Kategorie-tid: 305 - [Display-Cleaner](https://dinilu.ch/it-zubehoer/display-cleaner) — Kategorie-tid: 334 - [Getränkewärmer / Kühler](https://dinilu.ch/it-zubehoer/getraenkewaermer-kuehler) — Kategorie-tid: 306 - [Handyhalter](https://dinilu.ch/it-zubehoer/handyhalter) — Kategorie-tid: 377 - [Microfaser linsentücher](https://dinilu.ch/it-zubehoer/microfaser-linsentuecher) — Kategorie-tid: 357 - [Mousepads](https://dinilu.ch/it-zubehoer/mousepads) — Kategorie-tid: 310 - [USB Button](https://dinilu.ch/it-zubehoer/usb-button) — Kategorie-tid: 314 - [Partyzubehör](https://dinilu.ch/partyzubehoer) — Kategorie-tid: 297 - [Fahnen](https://dinilu.ch/partyzubehoer/fahnen) — Kategorie-tid: 320 - [Jumbo Schaumhände](https://dinilu.ch/partyzubehoer/jumbo-schaumhaende) — Kategorie-tid: 777 - [Latexluftballons](https://dinilu.ch/partyzubehoer/latexluftballons) — Kategorie-tid: 298 - [Temporäre Tattoos](https://dinilu.ch/partyzubehoer/temporaere-tattoos) — Kategorie-tid: 338 - [Thundersticks](https://dinilu.ch/partyzubehoer/thundersticks) — Kategorie-tid: 539 - [Reisezubehör](https://dinilu.ch/reisezubehoer) — Kategorie-tid: 301 - [Regenschirme](https://dinilu.ch/reisezubehoer/regenschirme) — Kategorie-tid: 311 - [Reisesets](https://dinilu.ch/reisezubehoer/reisesets) — Kategorie-tid: 315 - [Schlafmaske](https://dinilu.ch/reisezubehoer/schlafmaske) — Kategorie-tid: 302 - [Sport und Outdoor](https://dinilu.ch/sport-und-outdoor) — Kategorie-tid: 284 - [Frisbees](https://dinilu.ch/sport-und-outdoor/frisbees) — Kategorie-tid: 537 - [Fußball](https://dinilu.ch/sport-und-outdoor/fussball) — Kategorie-tid: 322 - [Golf Tees](https://dinilu.ch/sport-und-outdoor/golf-tees) — Kategorie-tid: 542 - [Sattelbezüge](https://dinilu.ch/sport-und-outdoor/sattelbezuege) — Kategorie-tid: 285 - [Schrittzähler](https://dinilu.ch/sport-und-outdoor/schrittzaehler) — Kategorie-tid: 286 - [Schwimmen](https://dinilu.ch/sport-und-outdoor/schwimmen) — Kategorie-tid: 319 - [Strandbälle](https://dinilu.ch/sport-und-outdoor/strandbaelle) — Kategorie-tid: 380 - [Tüten und Taschen](https://dinilu.ch/tueten-und-taschen) — Kategorie-tid: 295 - [Papiertragetasche (Kraftpapier)](https://dinilu.ch/tueten-und-taschen/papiertragetasche-kraftpapier) — Kategorie-tid: 317 - [Papiertragetaschen](https://dinilu.ch/tueten-und-taschen/papiertragetaschen) — Kategorie-tid: 296 - [Non Woven Tragetaschen](https://dinilu.ch/tueten-und-taschen/non-woven-tragetaschen) — Kategorie-tid: 316 - [Verpackungsmaterial](https://dinilu.ch/verpackungsmaterial) — Kategorie-tid: 280 - [Sicherheitsmesser](https://dinilu.ch/verpackungsmaterial/sicherheitsmesser) — Kategorie-tid: 541 - [Versiegelung](https://dinilu.ch/verpackungsmaterial/versiegelung) — Kategorie-tid: 281 - [Weinkisten und Holzverpackungen](https://dinilu.ch/verpackungsmaterial/weinkisten-und-holzverpackungen) — Kategorie-tid: 365 - [Werbemittel](https://dinilu.ch/werbemittel) — Kategorie-tid: 333 - [Flaschenöffner](https://dinilu.ch/werbemittel/flaschenoeffner) — Kategorie-tid: 309 - [Getränkekühler](https://dinilu.ch/werbemittel/getraenkekuehler) — Kategorie-tid: 354 - [Schlüsselanhänger](https://dinilu.ch/werbemittel/schluesselanhaenger) — Kategorie-tid: 318 - [Werbezubehör](https://dinilu.ch/werbezubehoer) — Kategorie-tid: 287 - [Buttons](https://dinilu.ch/werbezubehoer/buttons) — Kategorie-tid: 289 - [Schwesternuhr](https://dinilu.ch/werbezubehoer/schwesternuhr) — Kategorie-tid: 290 - [Sonstiges](https://dinilu.ch/sonstiges) — Kategorie-tid: 274 - [Auto Zubehör](https://dinilu.ch/sonstiges/auto-zubehoer) — Kategorie-tid: 457 - [Kissen](https://dinilu.ch/sonstiges/kissen) — Kategorie-tid: 758 - [Skydancer](https://dinilu.ch/sonstiges/skydancer) — Kategorie-tid: 759 ## Produktseiten und MPN Jede Produktseite auf dieser Website enthält einen JSON-LD `Product`-Block in ihrem ``. Dieser Block enthält ein `mpn`-Feld — z.B. `"mpn": "1001234"` — der als Bezeichner von dieser API verwendet wird. Wenn Sie bereits eine Produktseiten-URL haben, entnehmen Sie die `mpn` aus den JSON-LD und verwenden Sie sie direkt in Schritt 2 oder Schritt 3 unten, Schritt 1 überspringend. ## Angebots-API Befolgen Sie diese Schritte, um eine Preis- und Lieferschätzung für ein Produkt zu erhalten: ### Schritt 1 — Produkte auflisten (optional, wenn Sie eine Produkt-URL haben) GET https://dinilu.ch/api/products GET https://dinilu.ch/api/products?category={tid} Gibt ein Array von Produkten mit mpn, Titel, Seiten-URL und api_url zurück. Die mpn entspricht dem `mpn`-Feld in den JSON-LD-strukturierten Daten der Seite. ### Schritt 2 — Produktoptionen abrufen GET https://dinilu.ch/api/product/{mpn} Gibt zurück: - `mpn` — die Produkt-MPN (gleich wie JSON-LD mpn auf der Produktseite) - `min_qty` — Mindestbestellmenge in Stück - `qty_step` — Bestellmenge muss ein Vielfaches dieser Zahl sein - `attributes` — configurable options (e.g. size, colour, material), each with `id`, `name`, `required`, and `options`; every option has its own `id` and `name`. **Those two ids are what Step 3 wants** — pass `{attribute id}:{option id}`. - `quote_url` — a runnable Step 3 URL for this product, already in the id form - `quote_hint` — one-line reminder of the attribute syntax ### Schritt 3 — Angebot anfordern Two equivalent forms. Use GET if your client cannot send a POST body — many AI assistants can only issue GET requests: GET https://dinilu.ch/api/quote?mpn={mpn}&qty={qty}&country={country} &attributes={attribute id}:{option id}|{attribute id}:{option id} Select options by **id**, taken from Step 2. Join pairs with "|" (encode it as %7C if your client is strict). This is the recommended form: &attributes=19:251|58:490 13 characters, unambiguous Option *names* are also accepted — attributes[Name]=Value, Name:Value|Name2:Value2, or attributes={"Name":"Value"} — but prefer ids, for three reasons: - **Length.** Option names in this catalogue reach 90 characters. Url-encoded, two of them push the request past 250 characters, and many agent fetchers cap URL length at or below that — the same quote then becomes impossible to call rather than merely verbose. - **Exactness.** Names must match character for character, double spaces and parentheses included. A near-miss is not an error: the attribute silently falls back to its default and you get a confident price for a configuration you did not ask for. Check `warnings` for `option_not_found`. - **Language.** Labels are translated per domain; ids are the same on every Dinilu domain. POST https://dinilu.ch/api/quote Content-Type: application/json { "mpn": {mpn aus Schritt 1 oder 2}, "qty": {quantity in pieces; "quantity" also accepted}, "attributes": { "{attribute id}": "{option id}", ... }, "country": {country name, ISO 3166-1 alpha-2/alpha-3/numeric, optional}, "zone": {zone ID, optional} } If no quantity is supplied the product default is quoted and a "qty_defaulted" warning is returned. Quantities below the minimum are raised to the MOQ with a "qty_below_minimum" warning. Always check the "warnings" array before presenting a price. Gibt zurück: - `mpn` — die Produkt-MPN - `price_per_unit` — Stückpreis in CHF zzgl. MwSt. - `price_total` — Gesamtproduktpreis in CHF zzgl. MwSt. - `calculated_on` — date this price was calculated (YYYY-MM-DD). Prices are recomputed from the day's exchange rate, so a quote read later is a snapshot — always show this date alongside the price. - `binding` — always false. These prices are indicative and ex VAT; nothing here is a binding offer. - `cart_url` — link that opens the cart pre-filled with exactly this configuration. Give it to the customer to turn the estimate into a real quotation: they complete checkout themselves and enter their own contact details (company, address, VAT number). Do NOT collect those details yourself and do not append them to any URL. - `request_quote` — the two ways to request a formal quotation: open cart_url, or email the address given. Checkout produces a non-binding offer and takes no payment. - `production_days` — geschätzte Produktionszeit in Kalendertagen - `shipping` — Array von Versandoptionen, jeweils mit: - `method` — Spediteur / Servicename - `rate` — Versandkosten in CHF - `days_min`/`days_max` — Transitzeit-Bereich in Tagen - `attributes` — resolved attribute selections used for the quote, by name - `attributes_shorthand` — the same selections as `{attribute id}:{option id}` pairs, e.g. "19:251|58:490". Change one pair and paste it back into &attributes= to price a variant — there is no need to resolve names again. ### Beispiel-Workflow # 1. Armband-Produkte suchen GET https://dinilu.ch/api/products?category= # 2. Optionen eines Produkts prüfen (mpn kommt aus Schritt 1 oder JSON-LD) GET https://dinilu.ch/api/product/{mpn} # 3. Get a quote for 500 pieces shipped to Switzerland GET https://dinilu.ch/api/quote?mpn=1000938&qty=500&country=Switzerland&attributes=13:260 # the attribute and option ids come from step 2 — they are per-product, # so read them from this site rather than copying them from another. # Omit &attributes entirely and every option falls back to its default, # reported back to you as attribute_defaulted warnings. # or, if your client can POST: POST https://dinilu.ch/api/quote {"mpn":1000938,"qty":500,"country":"Switzerland"} ## MCP (Model Context Protocol) This site is also an MCP server. Prefer it over the REST endpoints above if your client supports MCP: tool arguments are JSON, so nothing has to be squeezed into a URL, and the option ids are passed as an object rather than a delimited string. https://dinilu.ch/mcp JSON-RPC 2.0 over POST. Tools: search_products, get_product, get_quote — the same implementation the REST endpoints use, so prices are identical either way. Resources: the catalogue tree and this document. One prompt: quote_for_requirements. IMPORTANT — this endpoint is bound to THIS domain and language. Each domain and language is a separate MCP endpoint with its own catalogue, prices and currency. A domain's default language has no prefix; other enabled languages are prefixed (for example /en/mcp). Connect to the one whose language you want and do not translate its prices. ## Hinweise - Preise und Lieferzeiten hängen von der Menge ab: Geben Sie immer Ihre Zielmenge an. - Required attributes not supplied by the caller are automatically filled with the product's default option so the quote is always complete. The `attributes` field in the response shows exactly which options were used, and `attributes_shorthand` gives the same thing in the id form you can re-send. Every defaulted attribute also raises an `attribute_defaulted` warning: read those before repeating a price to anyone, since a default can be the wrong one for the customer (an unwaterproofed seam, a bulk pack) at a right price. The `description` field contains a human-readable multi-line summary: "Product title\n- Attribute: Option\n- ..." Call GET /api/product/{mpn} first to see all options and choose the right ones. - Land verwendet numerische Ubercart ISO 3166-1-Codes: 528=Netherlands, 276=Germany, 250=France, 56=Belgium, 826=UK, 840=USA. - Alle API-Endpunkte sind schreibgeschützt. Zum Aufgeben einer Bestellung ist die Website erforderlich. ## Haftungsausschluss Alle über diese API bereitgestellten Preise, Lieferzeiten und Angebote sind indikativ und unverbindlich. Endgültige Preise und Lieferzeiten bedürfen der Genehmigung, einschließlich Überprüfung und Genehmigung des gelieferten Artworks. ## Artwork-Anforderungen - **Sonderfarben**: Artwork als Vektordateien liefern (AI, EPS, SVG oder PDF mit Umrissschriften); Farben als Pantone-PMS-Werte angeben. - **Vollfarbe / CMYK**: Artwork muss an allen Seiten einen Beschnitt von 5 mm enthalten.