---
title: "Create a subscription"
method: POST
path: "/subscriptions"
tags: ["Subscriptions"]
---

# Create a subscription

`POST /subscriptions`

Create a new subscription. The plan's direction decides which signup rules apply.

**Consumption plans:**
- `meter.type` may be `smart` or `analog`
- `customer.vat_id` is optional
- `intended_start_date` may be any future date; a date in the past is corrected to the next possible date, and when omitted, the next possible start date is used
- `previous_supplier` may be set to cancel the customer's existing contract
- `product_orders` may order a smart meter or §14a EnWG grid fee reductions, if the plan supports them

**Feed-in plans:**
- `meter.type` must be `smart`: a smart meter has to be installed before the signup
- `customer.vat_id` is required when `customer.type` is `company`, optional for persons
- `intended_start_date` must be the first day of a month, at least one month in the future; when omitted, the next possible production start date is used
- `previous_supplier` is not required for previous EEG customers.
- `product_orders` are not supported: §14a EnWG does not apply to feed-in, and the smart meter must already be present

Requests that break one of these rules are rejected with `400 BAD_REQUEST` and a message naming the violated rule.

## Request body

- object
  - `plan` string, required — Plan ID
  - `customer` union, required
    - InsertPersonCustomer
      - `type` 'person' — Type of the customer, always 'person'
      - `first_name` string, required — Customer's first name
      - `last_name` string, required — Customer's last name
      - `email` string, email, required — Email address
      - `vat_id` string — VAT identification number (USt-IdNr.), stored on the customer
    - InsertCompanyCustomer
      - `type` 'company', required — Type of the customer, always 'company'
      - `first_name` string, required — First name of the customer
      - `last_name` string, required — Last name of the customer
      - `company_name` string, required — Company name
      - `email` string, email, required — Email address
      - `vat_id` string — VAT identification number (USt-IdNr.), stored on the customer. Required when the plan is a feed-in plan.
  - `address` InsertAddress, required — New billing address for the subscription
    - `street` string, required — Street name of the address
    - `house_number` string, required — House number including any additions
    - `zip` string, required — ZIP/Postal code
    - `city` string, required — City name
  - `meter` InsertMeter, required
    - `number` string, required — Meter identification number
    - `type` 'smart' | 'analog', required — Type of the meter. Must be 'smart' for feed-in plans
    - `estimated_usage` number, required — Estimated yearly consumption in kWh
    - `malo` string, nullable — Market Location Identifier (MaLo) for the meter
  - `payment_method` InsertPaymentMethod, required — Attach a new SEPA direct-debit mandate. The new payment method replaces the subscription's current mandate.
    - `type` 'sepa_debit', required — Type of payment method
    - `sepa_debit` object, required
      - `iban` string, required — IBAN number
      - `account_holder` string, required — Name of the account holder
  - `previous_supplier` string — ID of the previous supplier, possible to obtain via /suppliers. Only supported for consumption plans.
  - `next_possible_start` boolean, required — If set to false we will request the cancellation of the previous supplier / grid operator signup to the date provided in intended_start_date. If set to true we will request the next possible date.
  - `intended_start_date` string, date — Intended start date of the subscription. Must be a date in the future. For feed-in plans it must be the first day of a month, at least one month in the future; when omitted, the next possible production start date is used.
  - `lead` string — Lead to track attribution of the subscription
  - `product_orders` object[] — Array of additional product orders. Each item has a 'type' and may include an additional object with the same name as the type for its details. Only supported for consumption plans: §14a EnWG does not apply to feed-in, and feed-in requires a smart meter before signup.
    - `type` 'smart-meter' | '14a_enwg', required — Order type
    - `14a_enwg` object
      - `module_1` boolean — Order §14a EnWG Module 1 if the customer is applicable
      - `module_2` boolean — Order §14a EnWG Module 2 if the customer is applicable
      - `module_3` boolean — Order §14a EnWG Module 3 if the customer is applicable
  - `metadata` object, nullable — Metadata of the subscription. Store any type of information, custom to your needs. E.g. the `user_id` of your in-house user. Restricted to 10KB.

## Response `200`

The created subscription details

- object
  - `object` 'subscription', required — Type of the object, always 'subscription'
  - `id` string, required — Unique identifier for the subscription
  - `plan` string, required — ID of the plan
  - `customer` string, required — ID of the customer
  - `address` string, required — ID of the address
  - `meter` string, required — ID of the meter
  - `payment_method` string, required — ID of the payment method
  - `supplier` string, nullable — ID of the previous supplier
  - `number` string, nullable — Human-readable identifier for the subscription
  - `status` 'pending' | 'active' | 'ended', required — Status of the subscription
  - `estimated_usage` number, required — Estimated yearly usage in kWh, provided by the customer in the checkout.
  - `created_at` union, required — Timestamp when the subscription was created
    - string
    - string, date-time
  - `updated_at` union, required — Timestamp when the subscription was updated
    - string
    - string, date-time
  - `start_at` union — Timestamp when delivery was started / will start
    - string
    - string, date-time
    - unknown
  - `terminated_at` union — Timestamp when delivery was terminated
    - string
    - string, date-time
    - unknown
  - `end_at` union — Timestamp when the subscription was ended / will end
    - string
    - string, date-time
    - unknown
  - `metadata` object, nullable — Metadata of the subscription. Store any type of information, custom to your needs. E.g. the `user_id` of your in-house user. Restricted to 10KB.
  - `type` 'consumption' | 'feed_in', required — Whether the subscription covers electricity consumption or feed-in. Feed-in subscriptions are only available from the 2026-05-27.curie API version onwards.
  - `billing_address` string, required — ID of the billing address

## Other responses

- `400` — The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
- `401` — The client must authenticate itself to get the requested response.
- `402` — A higher pricing plan is required to access the resource.
- `403` — The client does not have the necessary permissions to access the resource.
- `404` — The server can't find the requested resource.
- `405` — The request method is not allowed.
- `409` — The request could not be completed due to a conflict mainly due to unique constraints.
- `422` — The request was well-formed but was unable to be followed due to semantic errors.
- `429` — The client has sent too many requests.
- `500` — The server has encountered a situation it doesn't know how to handle.

---

[API](https://skmtc.dev/nomos/apis/nomos-api.md) · [All operations](https://skmtc.dev/nomos/apis/nomos-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/nomos/nomos-api/revisions/da60ad83e92f/schema)
