> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nomos.energy/llms.txt
> Use this file to discover all available pages before exploring further.

# Checkout

> Your brand, your Checkout.

## We built a checkout so you don't have to

Launch a branded, conversion-optimized signup for the German energy market. Our hosted checkout handles address validation, supplier search, IBAN, plausibility checks, and accessibility. Customers land on a per-plan subdomain derived from `plans.slug`, fill out the form, and get redirected back to you once Nomos creates the subscription.

```
https://{plan.slug}.checkout.energy/
```

<Frame caption="Example: a plan with slug lumio is reachable at lumio.checkout.energy, themed to your organization">
  <img src="https://mintcdn.com/riverslate/rFuRSKXuhnC74OsD/images/hosted-checkout.png?fit=max&auto=format&n=rFuRSKXuhnC74OsD&q=85&s=97af2d5a410b5c674d58c9dcba672553" alt="Hosted checkout page with plan summary on the left and signup form on the right" width="2000" height="1178" data-path="images/hosted-checkout.png" />
</Frame>

## Pre-fill query parameters

Pass through anything you already know about the customer and the form arrives pre-filled.

| Param            | Type    | What it does                                                                                             |
| ---------------- | ------- | -------------------------------------------------------------------------------------------------------- |
| `zip`            | string  | German postal code. Drives the price quote and unlocks the rest of the form.                             |
| `usage`          | integer | Annual electricity usage in kWh. `2500` is a reasonable default for a 2-person household.                |
| `id`             | string  | A [lead](/guides/leads) ID (`lead_…`). Pre-fills name, email, address, and IBAN from the lead record.    |
| `metadata.<key>` | string  | Arbitrary key/value pairs persisted on the resulting subscription's `metadata`.                          |
| `metadata.email` | string  | Email of the rep or partner credited for the conversion. Persisted as `credited_to` on the subscription. |

<Tabs>
  <Tab title="Fresh prospect">
    `https://lumio.checkout.energy/?zip=10115&usage=3500`
  </Tab>

  <Tab title="Existing lead">
    `https://lumio.checkout.energy/?id=lead_a8n8ol7yd4h0wohx824f0bui`
  </Tab>

  <Tab title="With attribution">
    `https://lumio.checkout.energy/?zip=10115&metadata.campaign=spring-2026`
  </Tab>
</Tabs>

## Redirect after submission

By default, Nomos shows a branded confirmation page once the form is submitted.

<Frame caption="Default confirmation page, themed to your organization">
  <img src="https://mintcdn.com/riverslate/rFuRSKXuhnC74OsD/images/hosted-checkout-confirmation.png?fit=max&auto=format&n=rFuRSKXuhnC74OsD&q=85&s=447d605b7fe7d7f484751006be1ec043" alt="Confirmation screen reading 'Erfolgreich abgeschlossen' with a three-step list of what happens next" width="2430" height="1578" data-path="images/hosted-checkout-confirmation.png" />
</Frame>

To send the customer somewhere else (a thank-you page, your customer portal, your post-purchase flow), set `plans.redirect_url`. Nomos redirects there instead of showing the default page.

## React on your backend

Subscriptions originating from hosted checkout are tagged with `source: "checkout"`, so you can distinguish them when processing [webhooks](/webhooks/introduction). Two events fire over the lifetime of a signup, separated in time:

* [`subscription.created`](/webhooks/events/subscription-created) immediately, when the form is submitted. Use it to provision your own user record.
* [`subscription.confirmed`](/webhooks/events/subscription-confirmed) later, once the grid operator has accepted the switch. Use it for confirmation emails and to unlock portal access.

## FAQ

<AccordionGroup>
  <Accordion title="Can I use my own domain instead of checkout.energy?">
    Not yet. Plans live on `{plan.slug}.checkout.energy`. The subdomain reads
    your plan slug, applies your branding, and serves the form.
  </Accordion>

  <Accordion title="Can I customize the form fields?">
    The form is fixed: address, supplier, household size, IBAN, marketing
    consent. To collect anything else, use [Build your own](/guides/checkout)
    where you control the entire UI.
  </Accordion>

  <Accordion title="What languages are supported?">
    Currently only German (default) in a formal (Sie) and informal (Du) setting.
  </Accordion>
</AccordionGroup>
