> For the complete documentation index, see [llms.txt](https://docs.carpose.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.carpose.de/components/12_purchase-request-form.md).

# Purchase Request Form

{% hint style="info" %}
The purchase request form ("Ankaufanfrage") is a four-step wizard in which a visitor offers you their own vehicle. They describe the car, its condition, optionally upload photos, and leave their contact details — you receive the enquiry as a lead.
{% endhint %}

## Overview

This is the reverse of a vehicle enquiry: the visitor is the seller and you are the buyer. The wizard collects, step by step:

1. **Fahrzeug** — make, model, first registration and mileage, plus optional details behind a "Weitere Angaben" disclosure (variant, fuel type, transmission, power, engine displacement, body type, colour, doors, seats, VIN, HSN/TSN, licence plate, previous owners).
2. **Zustand** — accident damage and, if affirmed, a free-text damage description; exterior and technical condition, next inspection, service history, tyre set, roadworthiness, non-smoker, and equipment features.
3. **Fotos** — optional photo upload (can be switched off entirely).
4. **Kontakt** — price expectation, desired selling period, any outstanding financing, the location selector, a free-text message, and the seller's contact details.

Only eight fields are mandatory: make, model, month **and** year of first registration, mileage, first name, last name, e-mail address, and the privacy consent checkbox. Everything else is optional, so a visitor can send a usable enquiry in under a minute.

The wizard will not let a visitor skip forward past a step whose required fields are incomplete. Going back is always possible via the "Zurück" button; on viewports of 768px and wider the progress bar additionally renders as a stepper whose completed steps are clickable. Below that width it is a plain progress bar with a "Schritt n von m" caption, so "Zurück" is the only way back.

## Adding the form

### Option 1 — inline

The wizard renders directly in the page:

```html
<div
  data-carpose-component="purchase-request-form"
  data-api-key="your-api-key"
  data-privacy-url="https://your-site.de/datenschutz"
></div>
```

### Option 2 — behind a button

Set `data-variant="modal"` and the page shows only a button; the wizard opens in a dialog:

```html
<div
  data-carpose-component="purchase-request-form"
  data-api-key="your-api-key"
  data-variant="modal"
  data-title="Wir kaufen Ihr Auto"
  data-subtitle="In vier Schritten zum Angebot"
  data-button-label="Jetzt bewerten lassen"
  data-privacy-url="https://your-site.de/datenschutz"
></div>
```

### Option 3 — from the floating buttons

The wizard can also be reached from the [floating-buttons overlay](/components/11_floating-buttons.md) as a "Fahrzeug verkaufen" button. Enable it for your account in the Carposé dashboard, or override that per page by putting `data-purchase-request="true"` (or `"false"`) on the floating-buttons script tag or element — see [Wizard buttons](/components/11_floating-buttons.md#wizard-buttons).

Opened this way the wizard uses its default copy and takes the privacy link from your account settings, since there is no mount element to read attributes from.

## Configuration Attributes

| Attribute           | Required | Default                                                             | Description                                                                                                                                                                                                                                                        |
| ------------------- | -------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `data-api-key`      | Yes      | —                                                                   | Your Carposé API key                                                                                                                                                                                                                                               |
| `data-variant`      | No       | `inline`                                                            | `inline` renders the wizard in place; `modal` renders a button that opens it in a dialog                                                                                                                                                                           |
| `data-title`        | No       | `Fahrzeug verkaufen`                                                | Headline above the wizard                                                                                                                                                                                                                                          |
| `data-subtitle`     | No       | `Sagen Sie uns, was Sie fahren — wir melden uns mit einem Angebot.` | Intro line. Set it to an empty value (`data-subtitle=""`) to hide it — that is different from omitting the attribute, which keeps the default                                                                                                                      |
| `data-button-label` | No       | `Fahrzeug verkaufen`                                                | Caption of the trigger button, for `data-variant="modal"`. Note this falls back to the built-in default, **not** to your `data-title` — set both if you want a custom caption on the button as well                                                                |
| `data-photo-upload` | No       | `true`                                                              | `"false"` removes the photo step entirely, leaving a three-step wizard                                                                                                                                                                                             |
| `data-store-select` | No       | `true`                                                              | `"false"` hides the location selector. With the selector on, a single location is assigned silently and only two or more locations produce a visible choice                                                                                                        |
| `data-success-url`  | No       | —                                                                   | Redirect here after a successful submission instead of showing the confirmation panel. Only `http://` and `https://` URLs are accepted                                                                                                                             |
| `data-privacy-url`  | No       | —                                                                   | Target of the link in the privacy consent checkbox. Only `http://` and `https://` URLs are accepted. Omitting it does not remove the checkbox — consent stays mandatory — but its label then renders as plain text with nothing to click, so set it on every embed |

## Photos

When the photo step is enabled, the visitor can attach images of the vehicle by picking them or dropping them onto the step. The wizard checks each file before anything is sent and names the ones it turns away:

| Limit            | Value              |
| ---------------- | ------------------ |
| Formats          | JPEG, PNG and WebP |
| Size per file    | 10 MB              |
| Number of images | 12                 |

The server applies its own ceiling on top of that and may accept fewer.

Photos are uploaded **after** the enquiry itself has been stored, so a failed upload never costs you the lead — the confirmation tells the visitor which images did not go through and that you will be in touch regardless. Because the upload runs before the wizard reports success, it also delays the success event and any `data-success-url` redirect; see [the success event](/events/02_vehicle-search.md#vehicle-purchase-form-success-event).

## After submission

On success the visitor sees a confirmation panel and receives an e-mail acknowledgement; the enquiry appears among your leads in the Carposé dashboard. If you set `data-success-url`, the visitor is redirected there instead.

If the same visitor sends many requests in a short time, the server rate-limits them and the wizard shows a message asking them to try again in a few minutes.

## Events

The wizard dispatches `carpose-vehicle-purchase-form-*` events for open, step, submit, success and error. See [Vehicle Search events](/events/02_vehicle-search.md#purchase) for the payloads.

## Notes

* All wizard copy is German.
* The form renders inside a Shadow DOM, so your page styles cannot affect it and its styles cannot leak out. It does inherit your page's font family on purpose, so it blends into your typography. See [Shadow DOM Architecture](/misc-modules/01_shadow-dom-architecture.md).
* More than one purchase request form can be placed on the same page — for example an inline one and a modal trigger.
