Skip to main content

Overview

This document outlines the mandatory and optional fields for the POST /orders endpoint, including conditional requirements based on contract type and reason.

Field Requirement Levels

SymbolMeaning
RequiredAlways mandatory
⚠️ ConditionalRequired based on specific conditions
ℹ️ OptionalNot required but recommended
ExcludedMust be null for certain scenarios

1. Top-Level Fields

FieldRequirementNotes
tariffKeyRequiredMandatory for order creation and change process
offerDateℹ️ OptionalMandatory for Fix Tariffs to ensure accurate pricing for the contract
campaignCodeℹ️ OptionalIf a promotion is running and a campaignCode exists, relevant campaign conditions will apply to the contract

2. User Account (userAccount)

FieldRequirementNotes
emailAddressRequiredMandatory for order creation and change process
phoneNumberℹ️ Optional
password⚠️ ConditionalTransmit null, customer is auto-enrolled in password set email flow
firstName⚠️ ConditionalB2C: Required for change process
B2B: Can be null if businessName is provided
lastName⚠️ ConditionalB2C: Required for change process
B2B: Can be null if businessName is provided
businessName⚠️ ConditionalB2B: Required for change process if firstName and lastName are null
genderℹ️ Optional
dateOfBirthℹ️ RequiredMandatory for order creation and change process

3. Contract (contract)

3.1 Contract Top-Level

FieldRequirementNotes
externalIdℹ️ OptionalPartner’s internal reference
typeRequiredRequired for change process (B2C & B2B)
Values: Personal, Business
industry⚠️ ConditionalB2B: Required for Business contracts
B2C: Must be null
Example values: ElectricalEquipment, Manufacturing, Retail, etc.
legalStructure⚠️ ConditionalB2B: Required for Business contracts
B2C: Must be null
Example values: GmbH, AG, KG, OHG, etc.
transactionDateTimeℹ️ Optional

3.2 Delivery Address (contract.deliveryAddress)

FieldRequirementNotes
titleℹ️ Optional
firstName⚠️ ConditionalB2C: Required for change process
B2B: Can be null if businessName is provided
lastName⚠️ ConditionalB2C: Required for change process
B2B: Can be null if businessName is provided
businessName⚠️ ConditionalB2B: Required for change process if firstName and lastName are null
genderℹ️ Optional
extensionℹ️ Optional
streetNameRequiredRequired for change process (B2C & B2B)
houseNumberRequiredRequired for change process (B2C & B2B)
cityRequiredRequired for change process (B2C & B2B)
postCodeRequiredRequired for change process (B2C & B2B)
countryCodeRequiredRequired for change process (B2C & B2B)
Expected: DE

3.3 Billing Address (contract.billingAddress)

FieldRequirementNotes
billingAddressℹ️ OptionalIf null, billing address = delivery address, all data fields must be transmitted if it deviates from the deliveryAddress

3.4 Bank Details (contract.bankDetails)

FieldRequirementNotes
accountHolder⚠️ ConditionalRequired if hasAcceptedDirectDebit is true
iban⚠️ ConditionalRequired if hasAcceptedDirectDebit is true
bicℹ️ Optional
bankNameℹ️ Optional
hasAcceptedDirectDebitRequiredRequired for change process (B2C & B2B)

4. Delivery Details (contract.deliveryDetails)

4.1 Meter & Location Identifiers

FieldRequirementNotes
meterNumberRequiredRequired for change process (B2C & B2B)
maLoIdentifierℹ️ OptionalRecommended: Increases speed at which change process progresses (e.g., invalid address, invalid meter number)
meLoIdentifierℹ️ Optional

4.2 Contract Reason & Dates

FieldRequirementNotes
contractReasonRequiredValues: ChangeOfSupplier, NewDeliveryLocation
Conditional Fields Based on contractReason:

If contractReason = ChangeOfSupplier (Supplier Switch)

FieldRequirementNotes
desiredTransitionDateRequiredRequired for change process (B2C & B2B)
moveInDateExcludedMust be null
previousSelfCancelledDateRequiredRequired for change process (B2C & B2B)

If contractReason = NewDeliveryLocation (Move-In)

FieldRequirementNotes
desiredTransitionDateExcludedMust be null
moveInDateRequiredRequired for change process (B2C & B2B)
previousSelfCancelledDateExcludedMust be null

4.3 Previous Supplier & Consumption

FieldRequirementNotes
previousSupplierCodeRequiredRequired for change process (B2C & B2B)
13-digit supplier code
previousAnnualConsumptionKwhRequiredRequired for order creation and change process - Value must be above 1000 kWh

4.4 Capabilities (contract.deliveryDetails.capabilities)

FieldRequirementNotes
hasElectricVehicleRequiredRequired for order creation and change process
hasSmartMeterRequiredRequired for order creation and change process
hasHeatPumpRequiredRequired for order creation and change process

5. Agreements (contract.agreements)

FieldRequirementNotes
termsAndConditionsRequiredRequired for order creation and change process
Must be true
privacyPolicyRequiredRequired for order creation and change process
Must be true
revocationPolicyRequiredRequired for order creation and change process
Must be true

Quick Reference: Contract Reason Decision Tree

contractReason?
├── ChangeOfSupplier (Supplier Switch)
│   ├── ✅ desiredTransitionDate (required)
│   ├── ✅ previousSelfCancelledDate (required)
│   └── ❌ moveInDate (must be null)

└── NewDeliveryLocation (Move-In)
    ├── ✅ moveInDate (required)
    ├── ❌ desiredTransitionDate (must be null)
    └── ❌ previousSelfCancelledDate (must be null)

B2C vs B2B Decision Tree

Contract Type?
├── B2C (Personal)
│   ├── userAccount.firstName (required)
│   ├── userAccount.lastName (required)
│   ├── deliveryAddress.firstName (required)
│   ├── deliveryAddress.lastName (required)
│   ├── contract.industry (must be null)
│   ├── contract.legalStructure (must be null)
│   └── businessName fields must be null

└── B2B (Business)
    ├── userAccount.businessName (required)
    ├── deliveryAddress.businessName (required)
    ├── contract.industry (required)
    ├── contract.legalStructure (required)
    └── firstName/lastName fields can be null

Validation Summary

Always Required (All Scenarios)

  • tariffKey
  • userAccount.emailAddress
  • contract.type
  • contract.deliveryAddress (full address: street, house number, city, postcode, country)
  • contract.bankDetails.hasAcceptedDirectDebit
  • contract.deliveryDetails.meterNumber
  • contract.deliveryDetails.previousSupplierCode
  • contract.deliveryDetails.previousAnnualConsumptionKwh
  • contract.deliveryDetails.capabilities (all three flags)
  • contract.agreements (all three must be true)

Conditionally Required

  • Bank details (if direct debit accepted):
    • accountHolder
    • iban
  • B2C contracts:
    • userAccount.firstName
    • userAccount.lastName
    • deliveryAddress.firstName
    • deliveryAddress.lastName
  • B2B contracts:
    • userAccount.businessName
    • deliveryAddress.businessName
    • contract.industry
    • contract.legalStructure
  • ChangeOfSupplier:
    • desiredTransitionDate
    • previousSelfCancelledDate
  • NewDeliveryLocation:
    • moveInDate
  • contract.deliveryDetails.maLoIdentifier - Can prevent delays due to invalid addresses or meter numbers

Example Payloads

Example 1: B2C Supplier Change

{
  "tariffKey": "RabotSmart",
  "offerDate": "2025-08-22",
  "userAccount": {
    "emailAddress": "j.doe@example.tld",
    "phoneNumber": "+491234567890",
    "password": "SomeExamplePassword987.",
    "firstName": "Max",
    "lastName": "Mustermann",
    "businessName": null,
    "gender": "Male",
    "dateOfBirth": "2019-08-24"
  },
  "contract": {
    "type": "Private",
    "deliveryAddress": {
      "firstName": "Thomas",
      "lastName": "Mustermann",
      "businessName": null,
      "streetName": "Grüner Weg",
      "houseNumber": "42",
      "city": "Berlin",
      "postCode": "14109",
      "countryCode": "DE"
    },
    "billingAddress": null,
    "bankDetails": {
      "accountHolder": "Thomas Heinrich Mustermann",
      "iban": "DE89370400440532013000",
      "hasAcceptedDirectDebit": true
    },
    "contractReason": "ChangeOfSupplier",
    "deliveryDetails": {
      "meterNumber": "123456789",
      "maLoIdentifier": "99987999749",
      "desiredTransitionDate": "2024-05-01",
      "moveInDate": null,
      "previousSelfCancelledDate": "2024-04-22",
      "previousSupplierCode": "9979250000006",
      "previousAnnualConsumptionKwh": 2600,
      "capabilities": {
        "hasElectricVehicle": false,
        "hasSmartMeter": true,
        "hasHeatPump": true
      }
    },
    "agreements": {
      "termsAndConditions": true,
      "privacyPolicy": true,
      "revocationPolicy": true
                  },
"transactionDateTime": "2024-04-01 00:00:00",
"industry": null,
"legalStructure": null
    },
"campaignCode": "string"
}

Example 2: B2B Move-In

{
  "tariffKey": "RabotSmart",
  "userAccount": {
    "emailAddress": "info@example-business.de",
    "firstName": null,
    "lastName": null,
    "businessName": "Example GmbH"
  },
  "contract": {
    "type": "Business",
    "deliveryAddress": {
      "firstName": null,
      "lastName": null,
      "businessName": "Example GmbH",
      "streetName": "Hauptstraße",
      "houseNumber": "100",
      "city": "München",
      "postCode": "80331",
      "countryCode": "DE"
    },
    "bankDetails": {
      "accountHolder": "Example GmbH",
      "iban": "DE89370400440532013000",
      "hasAcceptedDirectDebit": true
    },
    "contractReason": "NewDeliveryLocation",
    "deliveryDetails": {
      "meterNumber": "987654321",
      "desiredTransitionDate": null,
      "moveInDate": "2024-06-01",
      "previousSelfCancelledDate": null,
      "previousSupplierCode": "9979250000006",
      "previousAnnualConsumptionKwh": 50000,
      "capabilities": {
        "hasElectricVehicle": false,
        "hasSmartMeter": true,
        "hasHeatPump": false
      }
    },
    "agreements": {
      "termsAndConditions": true,
      "privacyPolicy": true,
      "revocationPolicy": true
    },
    "transactionDateTime": "2024-04-01 00:00:00",
"industry": "ElectricalEquipment",
"legalStructure": "GmbH"
    },
"campaignCode": "string"
}

Common Validation Errors

Error ScenarioCauseSolution
Missing mandatory fieldRequired field is null or omittedReview requirement tables above
Invalid contract reason combinationmoveInDate provided with ChangeOfSupplierFollow contract reason decision tree
Missing bank detailsDirect debit accepted but IBAN/account holder missingProvide both fields when hasAcceptedDirectDebit: true
B2C/B2B mismatchBusiness name provided with personal contract typeAlign contract.type with name fields
Invalid addressAddress cannot be found in systemProvide maLoIdentifier to improve matching