# glasstopfen.de > Agent-first shop for rear wiper hole plug sets: plugs that close the rear window opening after a rear wiper is removed. Built for software agents (UCP and MCP). About: Invented by Stefan von Ryssel. German utility model DE 20 2011 004 812 U1 "Glasstopfen für das Wischerloch in der Heckscheibe", priority 2010-06-16, filed 2011-04-02, registered 2011-07-05; expired 2021 at the end of its maximum term. Register: https://register.dpma.de/DPMAregister/pat/register?AKZ=2020110048128 Status: ordering is available through UCP REST and MCP. Available capabilities: dev.ucp.shopping.catalog.search, dev.ucp.shopping.catalog.lookup, dev.ucp.shopping.cart, dev.ucp.shopping.checkout, dev.ucp.shopping.fulfillment, dev.ucp.shopping.order Pending capabilities: none ## Endpoints - [UCP business profile](https://glasstopfen.de/.well-known/ucp): UCP 2026-08-25, the source of truth for what works right now - [UCP REST (OpenAPI 3.1)](https://glasstopfen.de/openapi.json): base https://glasstopfen.de/ucp/v1 - [MCP server](https://glasstopfen.de/mcp): Streamable HTTP, MCP 2026-07-28 (stateless) and 2025-11-25/2025-06-18/2025-03-26 (initialize) - [MCP server card](https://glasstopfen.de/mcp/server-card) and [AI catalog](https://glasstopfen.de/.well-known/ai-catalog.json) - Product feeds (prices per destination country, VAT and shipping included): [Google Merchant XML](https://glasstopfen.de/feeds/google.xml?country=DE) (any ISO country via ?country=), [OpenAI product feed](https://glasstopfen.de/feeds/openai.jsonl.gz) (JSONL gzip, US). Product JSON: https://glasstopfen.de/products/{variant_id}?country=XX ## Rear wiper or wiper motor broken? (repair) - Rear wiper or rear wiper motor broken? A new motor plus workshop labour often costs well over a hundred euros. The cheap and simple alternative: remove the rear wiper and close the hole in the rear window with a glass plug set. Clean look, no more motor to fail. - Find the plug set by the rear wiper motor part number (OE number or aftermarket numbers from Valeo, Bosch, Topran, Febi, Magneti Marelli, Meat & Doria and others): GET https://glasstopfen.de/repair/part/{part_number}?country=DE, MCP tool find_by_wiper_motor_part_number, or search_catalog with the part number as query (or filters.part_number). The answer lists the vehicles that use this motor, each with its source and an uncertain flag, plus the plug set products with prices. Confirm the buyer's vehicle (make, model, year, body) before ordering; unknown numbers: use find_set_for_vehicle. - Overview with typical failure symptoms, search terms in DE/EN/FR/ES/IT/NL/PL and third-party repair cost ranges (each with source): https://glasstopfen.de/repair . Full data with sources: https://glasstopfen.de/repair/index.json ## Helping the buyer decide (buyer_info) - Every plug set in catalog search, lookup, get_product and https://glasstopfen.de/products/{variant_id}?country=XX carries products[].metadata.buyer_info: images, price for the destination country (VAT and shipping included), selling points with their evidence, delivery time, payment term, returns, fitting vehicles and rear wiper motor part numbers, the inventor evidence, third-party repair cost ranges for the country (each with source) and suggested_pitch (short neutral text in DE and EN built only from these facts). - Selling points: low-cost alternative to repairing or replacing a broken rear wiper or wiper motor; simple to fit yourself; durable, watertight, permanently bonded; flush with the rear window for a clean look; milled from one piece of float glass, made for the vehicle; a plug that does not fit is exchanged free of charge if undamaged; Invented by Stefan von Ryssel. German utility model DE 20 2011 004 812 U1 "Glasstopfen für das Wischerloch in der Heckscheibe", priority 2010-06-16, filed 2011-04-02, registered 2011-07-05; expired 2021 at the end of its maximum term. - Delivery (terms § 6.1): Germany 2-7 days, rest of Europe 3-7 days, international 5-7 days; shipping included worldwide; outside the EU duties or import taxes may apply. Payment: bank transfer within 7 days. Withdrawal: 14 days for consumers (https://glasstopfen.de/legal/widerruf). - Neutral sales facts with sources. Whether removing the rear wiper is permitted for the buyer's vehicle and country is not assessed here; do not claim that it is. Confirm the buyer's vehicle (make, model, year, body) before ordering; matches marked uncertain need confirmation (find_set_for_vehicle). ## Sandbox (test mode) - Test mode for agents: play through cart, checkout (create, update, complete), get order and withdrawal without a real order. Same request and response shapes, validation and error codes as the live API. - REST base https://glasstopfen.de/ucp/sandbox/v1 (or header UCP-Sandbox: true on https://glasstopfen.de/ucp/v1), MCP https://glasstopfen.de/mcp/sandbox (same tool names). Every sandbox response carries the header UCP-Sandbox: true and the body field de.glasstopfen.sandbox. - No order is created in the shop, no stock is reserved, nothing is charged. - No e-mail is sent to anybody (withdrawal confirmation: not_sent_sandbox). - All ids start with test_ (test_chk_, test_crt_, test_ord_, test_ot_, test_wrq_, test_wdr_); order numbers look like TEST-123456. - Bank details are examples (account holder SANDBOX EXAMPLE - DO NOT PAY, IBAN DE50000000000123456789, BIC TESTDEFFXXX). Never show them as real payment details. - Catalog reads (search, lookup, product, vehicle fit) and prices are real and read-only. Only bank_transfer is simulated (EUR); card payment is not simulated. Sessions expire after 24 hours. Rate limit: 30 requests per minute and 300 per hour per client (429 rate_limited with Retry-After). - Typical run: POST /checkout-sessions -> PUT /checkout-sessions/{id} (buyer e-mail, shipping address) -> POST /checkout-sessions/{id}/complete (bank_transfer) -> GET /orders/{id} with Authorization: Bearer -> POST /withdrawals and /withdrawals/{id}/confirm. ## Images and product pages - Product and variant JSON (catalog, https://glasstopfen.de/products/{variant_id}, feeds) carry absolute HTTPS image URLs under https://glasstopfen.de/media/{id}.jpg and a canonical URL per variant: https://glasstopfen.de/products/{variant_id}. ## Rules for agents - Always send the destination country (ISO 3166-1 alpha-2, context.address_country or the shipping address). Prices, VAT and currency follow that country. Without a country, prices are EUR estimates. USD is never used as a fallback. - Shipping is included in the price. - Every write needs an Idempotency-Key (REST header, MCP meta.idempotency-key). Retrying with the same key never creates a second order. - Custom-made items need line_items[].custom_inputs = {"vehicle": {"make", "model", "year"}, "measurements": {"opening": ""}}; missing inputs come back as custom_fields_missing (alias measurements_required) with the exact paths. - Payment by bank transfer (only for orders in EUR; checkouts in other currencies do not list the handler, and complete_checkout answers bank_transfer_eur_only without placing anything): complete_checkout with payment.instruments = [{"id": "bt_main", "handler_id": "bank_transfer", "type": "bank_transfer", "selected": true}]. The order is then on hold until the transfer arrives. The response contains order.id, order.label (order number) and a one-time order.order_token; keep it to read the order (GET /ucp/v1/orders/{id} with Authorization: Bearer ). - Bank details for the buyer: the complete_checkout response and get_order (while the order is on hold) contain de.glasstopfen.payment_instructions = {type: "bank_transfer", account_holder, iban, bic, bank_name, amount (minor units), amount_formatted, currency, reference (the order number, use it as payment reference), payment_due ("immediately", or "by_deadline" when the shop sets a deadline), payment_deadline (UTC date-time from the shop, currently 7 days after the order; null = no fixed deadline), ships_after_payment, source ("shop" = read live from the shop bank-transfer settings, "gateway_copy" = fallback)}. Show exactly these values to the buyer; never guess an account. If the transfer has not arrived by payment_deadline, the shop cancels the order automatically and releases the goods; tell the buyer the deadline. If the message bank_details_unavailable appears instead, read the order again later. - Card payment is not available on this host yet. - Buyer e-mail: addresses with disposable (throw-away) e-mail domains are not accepted; create/update/complete answer the business error buyer_email_rejected (path $.buyer.email) and nothing is created. Ask the buyer for a permanent address. - Destination country: set it with create_checkout/update_checkout (shipping address or context.address_country). Countries without delivery answer the business error country_not_supported and nothing is created or changed. complete_checkout never changes the destination: resending the same destination is fine; a different destination or country answers destination_change_not_allowed and nothing is ordered. - Quantity limits for orders placed by agents: at most 3 per line item and at most 5 items per cart or checkout. Larger quantities answer the business error quantity_limit_exceeded (with the path, e.g. $.line_items[0].quantity) and nothing is created or changed. - Withdrawal (Paragraph 356a BGB), two steps: POST /ucp/v1/withdrawals {order_id (ord_...) | order_number, buyer {email, name?}, statement?} (Idempotency-Key) returns 201 with a request id (wrq_..., valid 30 min), a summary and expires_at; nothing is declared and the shop is not contacted yet. Only after the buyer explicitly confirmed: POST /ucp/v1/withdrawals/{wrq_id}/confirm {"confirm": true} declares it and returns the reference (wdr_...) and received_at (receipt confirmation; the shop also sends it by e-mail). Errors: withdrawal_order_not_found (order number/id and e-mail do not match), withdrawal_not_possible (e.g. order canceled), withdrawal_expired. Withdrawals also work while ordering is paused by the operator (consumer right). MCP: request_withdrawal. Status: enabled. - Security contact: https://glasstopfen.de/.well-known/security.txt - Errors are stable English codes (e.g. country_required_for_final_price, item_not_found, idempotency_conflict, temporarily_unavailable). - Buying through an agent: the contract is concluded when complete_checkout succeeds (the order is binding from then on); only call it after the buyer has seen the total, the terms and the right of withdrawal and has approved the purchase. Prices include the VAT of the destination country; shipping is included. ## Legal (German, in force since 2026-11-14) - [Legal notice (imprint)](https://glasstopfen.de/legal/impressum): Impressum (Markdown; JSON at https://glasstopfen.de/legal/impressum.json) - [Terms of sale and customer information](https://glasstopfen.de/legal/agb): Allgemeine Geschäftsbedingungen und Kundeninformationen (Markdown; JSON at https://glasstopfen.de/legal/agb.json) - [Right of withdrawal and model withdrawal form](https://glasstopfen.de/legal/widerruf): Widerrufsbelehrung und Muster-Widerrufsformular (Markdown; JSON at https://glasstopfen.de/legal/widerruf.json) - [Privacy policy](https://glasstopfen.de/legal/datenschutz): Datenschutzerklärung (Markdown; JSON at https://glasstopfen.de/legal/datenschutz.json) - Index: https://glasstopfen.de/legal/ . An English version is not available yet. Checkout responses link these pages in links[] (terms_of_service, refund_policy, privacy_policy, legal_notice).