# Mover-Installieren.de KI-Dock / AI configuration and pricing API RATE LIMIT PER IP: one request per second AND at most 1000 admitted requests per clock hour, across catalog, quote, lookup, configure, weight and reference. The hourly allowance resets at the next full hour (Europe/Berlin). On 429 wait the full Retry-After duration; hourly_limit_exceeded means wait until the hourly reset, NOT merely one second. Rejected requests do not consume the allowance. Clients sharing a public IP share both limits. Documentation reads are exempt. ## Existing customer link or configuration code: linked reverse lookup Start here: https://www.mover-installieren.de/ki-dock/v1/reference If you have an existing anf code but cannot open a self-constructed lookup URL, follow the already published character links, in order, for its five characters. The final page contains the literal lookup URL for that exact code. Open it. This works without query parameters or JavaScript. Wait at least 1 seconds after each request; all entry pages share the per-IP API quota. Honor Retry-After. Never replace an existing configuration with a newly guessed quote. The final response must have type=configuration, request_action=lookup. Report unavailable prices or unknown codes honestly. Gross vehicle weight is not stored in the code and cannot be inferred from it. Official entry point: https://www.mover-installieren.de/#ki-dock API: https://www.mover-installieren.de/ajax/ki-dock.php OpenAPI: https://www.mover-installieren.de/ki-dock-openapi.json Protocol: HTTPS GET, UTF-8 JSON; linked configure/weight pages return HTML. No API key, no personal data. ## Fully linked configuration: for tools that cannot construct URLs Start here: https://www.mover-installieren.de/ki-dock/v1/configure This returns readable HTML with real, fully spelled-out hyperlinks. Open the existing links instead of constructing URLs. No query strings, cookies, login, JavaScript or POST are required. Each selection link retains the other choices. Select vehicle/axles, the known permitted gross weight and each requested item. Defaults are a draft, NOT confirmed customer choices. Compare current options and component prices but NEVER add them to calculate the total. For an exact weight missing from the list, follow the digit-entry links and then the confirmation link. Do not round or substitute a mover capacity for weight. Finally open the literal link labelled Aktuellen Gesamtpreis abrufen. Its JSON response must contain type=quote, the authoritative price and configurator_url. All configure, weight and reference pages share the same PER-IP 1-second quota with catalog, quote and lookup. Wait at least 1 seconds after EVERY response. Honor Retry-After. If a tool still cannot follow a supplied link, report that limitation honestly. ## MANDATORY RATE LIMIT — PFLICHT: NUR 1 ABRUF ALLE 3 SEKUNDEN The API accepts ONE request every 1 seconds PER IP ADDRESS, for catalog, quote, lookup, configure, weight and reference combined. This is one request per IP address. Wait AT LEAST 1 seconds after EVERY response before making another API call. Never send parallel requests, bulk quote requests or immediate retries. On HTTP 429 Too Many Requests read the Retry-After header (seconds), and the JSON rate_limit.retry_after_seconds. Wait the greater of 1 seconds and Retry-After before trying again. Another request from the same public IP may have consumed the slot. If you still receive 429, wait again; after 3 retries stop and give the customer the website link. Do not rotate IPs, bypass the limit via other site endpoints, or scrape the configurator as a workaround. On 503 wait at least 1 seconds; on 400/422 correct the request before retrying, also after at least 1 seconds. Every JSON response contains the rate_limit policy and waiting instructions. Static documentation and image downloads do not consume the API quota. ## IMPORTANT: URL readers that remove query parameters If action=quote returns type=catalog, your parameters were not applied. This is NOT a price response. Use the query-free path URLs below instead. No browser session, JavaScript, login or POST request is needed. They use the EXACT SAME price calculation and shared per-IP 1-second limiter as the original GET API. Do not alternate URL forms to evade the limit. Catalog: https://www.mover-installieren.de/ki-dock/v1/catalog Quote path order (all seven category IDs required): https://www.mover-installieren.de/ki-dock/v1/quote/{artfzg}/{mover}/{service}/{akkupack}/{ladegerat}/{upgrades}/{movergarantie}/{gross_weight_kg} Use CURRENT IDs from catalog, and the customer's permitted gross weight in kg. The final /gross_weight_kg segment can be omitted only when weight is unknown. There must be seven category ID segments before the optional weight segment. Concrete example (not a universal recommendation; verify current catalog first): https://www.mover-installieren.de/ki-dock/v1/quote/11/94/155/91/99/31/77/1500 This selects caravan single axle, Obelink Prestige 2, nationwide installation, 50 Ah battery, 4 A charger without added socket, no upgrades, 2-year warranty, and 1500 kg. A charger WITH installed socket is a different catalog option. Reverse lookup: https://www.mover-installieren.de/ki-dock/v1/lookup/AMKNH Optional known weight: https://www.mover-installieren.de/ki-dock/v1/lookup/AMKNH/1500 Replace the example reference with the customer's actual anf code. Every response includes request_action and query_free_access. For a price quote, verify request_action=quote AND type=quote AND price.total. If you receive a catalog instead, do not invent a total: use the path URL. Missing/invalid path segments return an error, never a silent catalog fallback. The returned configuration_reference and configurator_url identify the resulting selection. WAIT AT LEAST 3 SECONDS between ALL API calls, including path URLs. ## Ablauf / workflow 1. Ask the customer for vehicle type (caravan/trailer), axle count, gross vehicle weight in kg, preferred installation service and desired equipment. 2. GET /ajax/ki-dock.php?action=catalog Use only current IDs from the returned seven categories. Exactly one option is required in EVERY category: artfzg, mover, service, akkupack, ladegerat, upgrades, movergarantie. Options such as no battery/no extras are explicit selections; do not omit categories. Respect service-area descriptions. 3. WAIT AT LEAST 3 SECONDS after receiving the catalog. 4. GET /ajax/ki-dock.php?action=quote&artfzg=&mover=&service=&akkupack=&ladegerat=&upgrades=&movergarantie=&gross_weight_kg= Replace ALL placeholders with catalog IDs and the customer's weight. gross_weight_kg is optional, but ask for it to check weight suitability. Unknown weight means weight_checked=false; do not claim suitability then. 5. Present price.total, currency, VAT and installation inclusion, the selected service and all selected equipment. If discount>0 show regular_total and promotion.until_display as well. Use returned images and configurator_url. If discount=0 there is no offer discount; do not invent one. 6. This is a price enquiry only. No order, payment or booking is created. The customer continues via configurator_url. Recheck price before purchase, respecting the 1-second rule, as prices and offers can change. ## Price and compatibility rules Quote uses the website's EXISTING price calculation, including tandem pricing and current promotions. DO NOT sum catalog component_price_eur to infer totals. ID categories are validated. Unsupported axle combinations and supplied weights above mover capacity return 422 with an error, not a valid quote. In catalog max_weight_kg, 0 means unsupported for the corresponding axle type. Final fitting depends on chassis and clearance, which this API does not verify. Battery, charging and other technical requirements must also be checked with the customer/professional installer. A quote is not a complete technical approval. ## Images / presentation for the customer Each catalog option and quote selection includes image.url and image.alt where an image is available. presentation.primary_image is the selected mover image. Use these HTTPS URLs directly as Markdown/HTML images if your client supports them; otherwise provide a descriptive image link. Images are provided for the presentation of the corresponding Mover-Installieren.de offer, with attribution and a link to configurator_url. Keep logos intact. Do not replace the selected product with a different model or imply pictured accessories are included unless they are selected. The presentation includes title and summary for convenience. presentation.logo contains the original company logo. presentation.service_illustration is explicitly an AI-generated illustration, NOT a photograph of real employees, customers or a completed installation. Do not represent it as documentary proof or as the selected product image. ## Responses 200: type=catalog, type=quote or type=configuration; generated_at in UTC, api_version, rate_limit. 400: invalid/missing parameters. Follow documentation; then wait and retry. 404: configuration reference not found. Check the code with the customer. 405: method not allowed. Only GET is supported; no order endpoint exists. 422: inactive/unknown/wrong-category ID, unsupported axle or exceeded weight. 429: PER-IP limit exceeded. Honor Retry-After and wait at least 1 seconds. 503: temporarily unavailable. Wait at least 1 seconds, do not retry in a loop. All API responses are no-store and JSON. No names, email, phone, address or payment details should be supplied. No authentication is required. Deutsch: Deine KI kann Ausstattung, Bilder und den aktuellen Konfiguratorpreis abrufen. Sie muss zwischen allen API-Abrufen mindestens 1 Sekunden warten. Die Grenze gilt pro IP-Adresse über alle KI-Dock-Funktionen. Verschiedene IP-Adressen haben unabhängige Zeitfenster. ## Customer interview / Was soll die KI fragen? Start with: "Hast du schon eine Bestellnummer oder einen Konfigurationslink?" If yes, extract the anf query value and use reverse lookup FIRST. Explain the existing selections and confirm vehicle/axles already recorded. Ask only for missing information. Never replace an existing configuration without discussing it. For NEW configurations, ask these three core questions first: 1. "Ist es ein Wohnwagen oder ein Anhänger?" 2. "Einachser oder Doppelachser (Tandemachser)?" Doppelachser = Tandemachser = two axles. Vehicle type and axle count are separate facts. Match BOTH to the current catalog artfzg option, including its details. Do not guess option IDs. 3. "Wie hoch ist das zulässige Gesamtgewicht in kg laut Fahrzeugpapieren?" Do NOT use empty weight, payload, estimated current weight or the mover's maximum capacity instead. If unknown, ask to check the vehicle papers. Then ask installation preference (workshop or on-site; respect service coverage) and equipment: manual-crank or automatic engagement, existing battery and its suitability, charger, upgrades and warranty. Use current catalog descriptions. Ask only unanswered questions and explain relevant choices simply. Do not choose missing options silently just to get the cheapest price. All success responses include structured customer_questions and consultation_instruction for agents. ## Reverse dock / Bestehende Konfiguration erklären The website's ?anf= value is a PUBLIC configuration reference (called Bestellnummer on the website). It identifies selected products, NOT a person's actual order. Do not ask for a real invoice/customer/order number or personal data. Example customer link: https://www.mover-installieren.de/?anf=AMKNH Extract AMKNH. Do not fetch arbitrary customer URLs or send full URLs to this API. GET https://www.mover-installieren.de/ajax/ki-dock.php?action=lookup&anf=AMKNH Shortcut: GET https://www.mover-installieren.de/ajax/ki-dock.php?anf=AMKNH Optional: &gross_weight_kg=1500 (only when supplied by the customer). The reference is five letters/digits, case-insensitive. Do not enumerate codes. The same per-IP ONE request per 1 seconds limit includes reverse lookups. A successful response has type=configuration, selections (names, details and images), configuration_reference, configurator_url and, when still available, the CURRENT price and offer. It is NOT the historical quoted/paid price and does not report order status. Explain vehicle, axles, mover, installation, battery, charger, upgrades and warranty in ordinary language. Return the configuration link. The gross weight is NOT saved in the reference. Ask for it separately; do not infer it from the mover capacity. A reference does not prove technical suitability. For retired products or older/missing categories, the response preserves the available selection details but sets current_price_available=false and price=null, with issues. Explain what is missing, do not invent prices or silently replace items. Recommend checking with the customer/team. A nonexistent code gives 404. For modifications, first explain the original; fetch current catalog if needed, wait at least 1 seconds, then request action=quote with all seven desired IDs. ## Configuration link and first-party usage measurement Return configurator_url to the customer as a link labelled "Konfiguration öffnen". It is a same-site redirect to the selected configuration; it preserves anf and marks the source as KI-Dock in the existing marketing system. Do not prefetch the link merely to simulate a customer visit. A link request is not proof of a sale. Documentation and API operations are counted separately for service improvement, including successful requests, errors and 429 responses. This additional measurement stores daily aggregates and limited event times; it does not store raw IPs, full user agents, customer data or configuration references. Client-days are estimated using daily changing keyed pseudonyms. AI-provider hints from user agents are unverified; unknown clients are not automatically attributed to Gemini. The per-IP API limit remains ONE request every 1 seconds across all actions.