Skip to main content

Data Import REST API Changelog

This page shows recent changes to Data Import REST API.

Reset

11 September 2026 - Latest

New
[
    {
        "name": "Validate that either <code>\u2068partner_commission_number\u2069</code> or <code>\u2068partner_commission\u2069</code> are provided",
        "description": "Validate that exactly one of <code>\u2068partner_commission_number\u2069</code> or <code>\u2068partner_commission\u2069</code> is provided.",
        "possible_errors": [
            "mutually_exclusive_field_required"
        ]
    },
    {
        "name": "Validate an uplift is only applied to a trailing partner commission",
        "description": "Validate that apply_uplift is not set for a one-off partner commission, which has no price-adjustment bundle to uplift.",
        "possible_errors": [
            "partner_commission_definition_invalid"
        ]
    },
    {
        "name": "Validate a fixed-amount override is only applied to a one-off partner commission",
        "description": "Validate that override_fixed_amount is not set for a trailing partner commission, which has no fixed-amount override on its contract.",
        "possible_errors": [
            "partner_commission_definition_invalid"
        ]
    }
]
Old
[
    {
        "name": "Validate a fixed-amount override is only applied to a one-off partner commission",
        "description": "Validate that override_fixed_amount is not set for a trailing partner commission, which has no fixed-amount override on its contract.",
        "possible_errors": [
            "partner_commission_definition_invalid"
        ]
    }
]
No attributes to display
Old
{
    "required": true
}
New
{
    "x-validators": [
        {
            "name": "Validate partner commission numbers exist",
            "description": "Validate that all partner commission numbers in the term configurations exist in Kraken.",
            "possible_errors": [
                "not_found"
            ]
        },
        {
            "name": "Validate partner commission definitions are unique",
            "description": "Validate that no two configurations in the term describe the same partner commission, which would resolve to one commission held twice by the term.",
            "possible_errors": [
                "duplicate_partner_commission_definitions"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate partner commission numbers exist",
            "description": "Validate that all partner commission numbers in the term configurations exist in Kraken.",
            "possible_errors": [
                "not_found"
            ]
        }
    ]
}
New
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        },
        {
            "name": "Validate calorific corrected volume",
            "description": "When provided, the calorific_corrected_volume reading extra must be a floating point number for gas readings",
            "possible_errors": [
                "invalid_calorific_corrected_volume"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        },
        {
            "name": "Require calorific corrected volume",
            "description": "A floating point calorific_corrected_volume reading extra is required for gas readings",
            "possible_errors": [
                "missing_calorific_corrected_volume"
            ]
        }
    ]
}

10 September 2026

No attributes to display
No attributes to display
No attributes to display
New
[
    {
        "name": "Validate that <code>amount</code> is provided unless <code>fee_type</code> is <code>NLD_COMPUTED</code>",
        "description": "Validate that <code>amount</code> is provided, unless <code>fee_type</code> is <code>NLD_COMPUTED</code>, in which case the stored amount is unused and computed at termination time instead.",
        "possible_errors": [
            "required"
        ]
    }
]
Old
[
    {
        "name": "Validate that <code>\u2068supply_type\u2069</code> and <code>\u2068market_name\u2069</code> are not both provided",
        "description": "Validate that \u2068supply_type\u2069 and \u2068market_name\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate that <code>amount</code> is provided unless <code>fee_type</code> is <code>NLD_COMPUTED</code>",
        "description": "Validate that <code>amount</code> is provided, unless <code>fee_type</code> is <code>NLD_COMPUTED</code>, in which case the stored amount is unused and computed at termination time instead.",
        "possible_errors": [
            "required"
        ]
    }
]
New
{
    "required": true
}

4 September 2026

New
{
    "allOf": [
        {
            "$ref": "#/components/schemas/VandebronAccount"
        }
    ]
}
Old
{
    "allOf": [
        {
            "$ref": "#/components/schemas/NldAccount"
        }
    ]
}
New
{
    "allOf": [
        {
            "$ref": "#/components/schemas/VandebronAccount"
        }
    ]
}
Old
{
    "allOf": [
        {
            "$ref": "#/components/schemas/NldAccount"
        }
    ]
}
No attributes to display

2 September 2026

No attributes to display
No attributes to display
No attributes to display
No attributes to display
No attributes to display
No attributes to display
No attributes to display
No attributes to display

28 August 2026

New
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        },
        {
            "name": "Require calorific corrected volume",
            "description": "A floating point calorific_corrected_volume reading extra is required for gas readings",
            "possible_errors": [
                "missing_calorific_corrected_volume"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        }
    ]
}

27 August 2026

No attributes to display
No attributes to display
No attributes to display
New
{
    "required": true
}
New
[
    {
        "name": "Validate <code>\u2068effective_to\u2069</code> not before <code>\u2068effective_from\u2069</code>",
        "description": "Validates that <code>\u2068effective_to\u2069</code>, if given, is on or later than <code>\u2068effective_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate addons are compatible with their agreement",
        "description": "Validate that addons provided for an agreement are compatible and configured for agreement's product.",
        "possible_errors": [
            "addon_band_not_valid_for_agreement",
            "multiple_addons_in_the_same_family"
        ]
    },
    {
        "name": "Validate that the rate bands given in the rate overrides are valid for the product code",
        "description": "Validate that the rate bands given in the rate overrides exist for the agreement's product.",
        "possible_errors": [
            "invalid_period",
            "rate_band_does_not_exist"
        ]
    },
    {
        "name": "Validate that required product characteristics are provided",
        "description": "Validates that when an agreement's product is linked to a specification defining product characteristics, a value for each required characteristic is provided in <code>characteristics</code>.",
        "possible_errors": [
            "missing_required_product_characteristics"
        ]
    },
    {
        "name": "Validate that cost detail bands match product rates",
        "description": "Validate that all bands specified in the monthly advance charge template cost details exist as rate bands on the selected product.",
        "possible_errors": [
            "cost_detail_adjustment_delta_has_rate_source_system",
            "cost_detail_band_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068effective_to\u2069</code> not before <code>\u2068effective_from\u2069</code>",
        "description": "Validates that <code>\u2068effective_to\u2069</code>, if given, is on or later than <code>\u2068effective_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate addons are compatible with their agreement",
        "description": "Validate that addons provided for an agreement are compatible and configured for agreement's product.",
        "possible_errors": [
            "addon_band_not_valid_for_agreement",
            "multiple_addons_in_the_same_family"
        ]
    },
    {
        "name": "Validate that the rate bands given in the rate overrides are valid for the product code",
        "description": "Validate that the rate bands given in the rate overrides exist for the agreement's product.",
        "possible_errors": [
            "invalid_period",
            "rate_band_does_not_exist"
        ]
    },
    {
        "name": "Validate that cost detail bands match product rates",
        "description": "Validate that all bands specified in the monthly advance charge template cost details exist as rate bands on the selected product.",
        "possible_errors": [
            "cost_detail_adjustment_delta_has_rate_source_system",
            "cost_detail_band_not_on_product"
        ]
    }
]

26 August 2026

No attributes to display
No attributes to display

25 August 2026

No attributes to display

20 August 2026

No attributes to display
No attributes to display

19 August 2026

No attributes to display
New
{
    "x-enum-descriptions": {
        "ADVANCE_PAYMENT": "Advance Payment"
    }
}
Old
{
    "x-enum-descriptions": {}
}

18 August 2026

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate contracted volume bounds are ordered",
        "description": "Validate that a contracted volume period's minimum is not greater than its maximum",
        "possible_errors": [
            "contracted_volume_minimum_exceeds_maximum"
        ]
    },
    {
        "name": "Validate contracted volume unit is valid for its market",
        "description": "Validate that a contracted volume period's unit is one its market accepts",
        "possible_errors": [
            "contracted_volume_unit_invalid_for_market"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    }
]
No attributes to display
No attributes to display
No attributes to display

14 August 2026

New
{
    "x-enum-descriptions": {
        "NO_CONTRACT": "No contract",
        "OVERPAYMENT": "Overpayment",
        "TRANSFER_ISU": "Transfer (ISU)",
        "DD_FAILURE_ISU": "Direct debit failure (ISU)",
        "CONTRACT_CANCELLATION": "Contract cancellation"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "SOHOSME": "SOHOSME",
        "SOHOSME__MINDER": "SOHOSME__MINDER",
        "SOHOSME__GASLICHT": "SOHOSME__GASLICHT",
        "SOHOSME__PRICEWISE": "SOHOSME__PRICEWISE"
    }
}
Old
{
    "x-enum-descriptions": {
        "SME": "SME",
        "SME__MINDER": "SME__MINDER",
        "SME__GASLICHTBUSINESS": "SME__GASLICHTBUSINESS",
        "SME__PRICEWISEBUSINESS": "SME__PRICEWISEBUSINESS"
    }
}
New
{
    "x-enum-descriptions": {
        "SOHOSME": "SOHOSME",
        "SOHOSME__MINDER": "SOHOSME -> Minder",
        "SOHOSME__GASLICHT": "SOHOSME -> Gaslicht",
        "SOHOSME__PRICEWISE": "SOHOSME -> Pricewise"
    }
}
Old
{
    "x-enum-descriptions": {
        "SME": "SME",
        "SME__MINDER": "SME -> Minder",
        "SME__GASLICHTBUSINESS": "SME -> GaslichtBusiness",
        "SME__PRICEWISEBUSINESS": "SME -> PricewiseBusiness"
    }
}
New
{
    "x-enum-descriptions": {
        "SOHOSME": "SOHOSME",
        "SOHOSME__MINDER": "SOHOSME -> Minder",
        "SOHOSME__GASLICHT": "SOHOSME -> Gaslicht",
        "SOHOSME__PRICEWISE": "SOHOSME -> Pricewise"
    }
}
Old
{
    "x-enum-descriptions": {
        "SME": "SME",
        "SME__MINDER": "SME -> Minder",
        "SME__GASLICHTBUSINESS": "SME -> GaslichtBusiness",
        "SME__PRICEWISEBUSINESS": "SME -> PricewiseBusiness"
    }
}
New
{
    "x-removal-date": "2026-08-28"
}
New
{
    "x-removal-date": "2026-08-28"
}
New
{
    "x-removal-date": "2026-08-28"
}
New
{
    "x-removal-date": "2026-10-16"
}

13 August 2026

New
[
    {
        "name": "Validate that business information is provided if not linking account to business with contract",
        "description": "Validate that business information is provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is false for the given import supplier.",
        "possible_errors": [
            "business_information_required_if_not_linking_via_contract"
        ]
    },
    {
        "name": "Validate that business information is not provided if linking an account to the business of the business contract.",
        "description": "Validate that business information is not provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is true for the given import supplier.",
        "possible_errors": [
            "business_information_not_required_if_linking_via_contract"
        ]
    },
    {
        "name": "Validate that at least one contract identifier is provided for import",
        "description": "Validate that at least one of <code>business_contract_identifiers</code> or <code>business_contract_identifier</code> is provided in the payload.",
        "possible_errors": [
            "missing_contract_identifier"
        ]
    },
    {
        "name": "Validate that <code>\u2068business_contract_identifiers\u2069</code> and <code>\u2068business_contracts\u2069</code> are not both provided",
        "description": "Validate that \u2068business_contract_identifiers\u2069 and \u2068business_contracts\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    }
]
Old
[
    {
        "name": "Validate that business information is provided if not linking account to business with contract",
        "description": "Validate that business information is provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is false for the given import supplier.",
        "possible_errors": [
            "business_information_required_if_not_linking_via_contract"
        ]
    },
    {
        "name": "Validate that business information is not provided if linking an account to the business of the business contract.",
        "description": "Validate that business information is not provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is true for the given import supplier.",
        "possible_errors": [
            "business_information_not_required_if_linking_via_contract"
        ]
    },
    {
        "name": "Validate that at least one contract identifier is provided for import",
        "description": "Validate that at least one of <code>business_contract_identifiers</code> or <code>business_contract_identifier</code> is provided in the payload.",
        "possible_errors": [
            "missing_contract_identifier"
        ]
    }
]
No attributes to display
Use instead
business_contracts
New
{
    "x-use-instead": "business_contracts"
}
Old
{
    "x-use-instead": "business_contract_identifiers"
}

11 August 2026

No attributes to display

7 August 2026

New
{
    "oneOf": [
        {
            "type": "string",
            "format": "email",
            "maxLength": 254
        },
        {
            "type": "string",
            "maxLength": 0
        }
    ]
}
Old
{
    "type": "string",
    "format": "email",
    "maxLength": 254
}
New
{
    "oneOf": [
        {
            "type": "string",
            "format": "email",
            "maxLength": 254
        },
        {
            "type": "string",
            "maxLength": 0
        }
    ]
}
Old
{
    "type": "string",
    "format": "email",
    "maxLength": 254
}
New
{
    "oneOf": [
        {
            "type": "string",
            "format": "email",
            "maxLength": 254
        },
        {
            "type": "string",
            "maxLength": 0
        }
    ]
}
Old
{
    "type": "string",
    "format": "email",
    "maxLength": 254
}
New
{
    "oneOf": [
        {
            "type": "string",
            "format": "email",
            "maxLength": 254
        },
        {
            "type": "string",
            "maxLength": 0
        }
    ]
}
Old
{
    "type": "string",
    "format": "email",
    "maxLength": 254
}

4 August 2026

New
{
    "x-enum-descriptions": {
        "DUMMY_FLEX": "DUMMY_FLEX"
    }
}
Old
{
    "x-enum-descriptions": {}
}

3 August 2026

No attributes to display
No attributes to display

31 July 2026

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before or equal to <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is strictly later than \u2068valid_from\u2069.",
        "possible_errors": [
            "start_date_same_as_end_date"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before or equal to <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is strictly later than \u2068valid_from\u2069.",
        "possible_errors": [
            "start_date_same_as_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]
Old
{
    "x-validators": [
        {
            "name": "Validate product code exists",
            "description": "Validate that the product code exists in Kraken.",
            "possible_errors": [
                "product_code_does_not_exist"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate bespoke rate items are unique",
            "description": "Validate that no two bespoke rate items in a schedule share the same rate specification code, rate specification type, and variant profile.",
            "possible_errors": [
                "duplicate_bespoke_rate_items"
            ]
        }
    ]
}
New
{
    "x-validators": [
        {
            "name": "Validate bespoke rates do not conflict",
            "description": "Validate bespoke rates for the same target and rate do not conflict during the same period. The target of a bespoke rate is determined by the supply point identifier and product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        },
        {
            "name": "Validate bespoke rate schedules are valid",
            "description": "Validate that each schedule references an existing product, contains unique items, represents rates defined by the product specification, and satisfies the product's rate override strategies.",
            "possible_errors": [
                "bespoke_rate_cannot_be_overridden",
                "characteristic_code_not_found",
                "duplicate_bespoke_rate_items",
                "invalid_characteristic_value",
                "invalid_profile_variant_for_specification",
                "missing_required_bespoke_rate",
                "product_code_does_not_exist",
                "product_specification_not_found_for_product",
                "rate_specification_not_found_for_product",
                "shared_rate_not_found",
                "shared_rate_not_found_for_product"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate bespoke rates do not conflict",
            "description": "Validate bespoke rates for the same target and rate do not conflict during the same period. The target of a bespoke rate is determined by the supply point identifier and product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        }
    ]
}

28 July 2026

New
{
    "TRANCHE_TARGET_CONFIGURATION": "#/components/schemas/TrancheTargetConfiguration"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/NldTerminationFee"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetConfiguration"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/NldTerminationFee"
    }
]

21 July 2026

No attributes to display

17 July 2026

No attributes to display
No attributes to display

16 July 2026

No attributes to display
Old
{
    "x-validators": [
        {
            "name": "Validate alternative phone number is not in kraken",
            "description": "Validate the alternative phone number provided does not exist in the database.",
            "possible_errors": [
                "alternative_phone_numbers_already_exists"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate alternative phone number is not in kraken",
            "description": "Validate the alternative phone number provided does not exist in the database.",
            "possible_errors": [
                "alternative_phone_numbers_already_exists"
            ]
        }
    ]
}

15 July 2026

New
[
    {
        "name": "Validate that current statement transactions are after the last statement closing date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are after the <code>last_statement_closing_date</code>, if this date is given.",
        "possible_errors": [
            "current_statement_transaction_before_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that there are no current statement transactions for unbillable ledger",
        "description": "Validate that transactions for ledgers that will never issue any bills are only in <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "unbillable_ledger_transactions_in_current_statement_transactions"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate if <code>historical_statement_transactions</code> has been provided, that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Historical statement transactions require <code>last_statement_closing_date</code> for invoices",
        "description": "When <code>historical_statement_transactions</code> are provided, the <code>last_statement_closing_date</code> must also be provided to properly create and archive the initial invoice.",
        "possible_errors": [
            "historical_statement_transactions_require_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that only supply charges and payments are allowed in open settlement period",
        "description": "Validate that only <code>SUPPLY_CHARGE</code> and <code>PAYMENT</code> transactions are allowed in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "transactions_other_than_supply_charge_and_payment_in_open_settlement_period"
        ]
    },
    {
        "name": "Validate that a last settlement closing date is provided for non-zero last settlement balance",
        "description": "Validate that if <code>last_settlement_balance</code> is not zero then a <code>last_settlement_closing_date</code> is required.",
        "possible_errors": [
            "last_settlement_closing_balance_without_last_settlement_closing_date"
        ]
    },
    {
        "name": "Validate that the transactions in the open settlement period match the ledger balance",
        "description": "Validate that the <code>amount</code> of each transaction in <code>transactions_in_open_settlement_period</code> plus the <code>last_settlement_balance</code> matches the <code>ledger_balance</code>.",
        "possible_errors": [
            "balance_mismatch_on_ledger_balance"
        ]
    },
    {
        "name": "Validate that the ledger balance matches the last settlement balance",
        "description": "Validate that the <code>ledger_balance</code> matches the <code>last_settlement_balance</code>. This means that the balance change during the open settlement period is effectively zero.",
        "possible_errors": [
            "balance_mismatch_on_ledger_balance"
        ]
    },
    {
        "name": "Validate that the line items are within the open settlement period",
        "description": "Validate that the <code>start_date</code> of each line item in <code>line_items</code> starts after the <code>last_settlement_closing_date</code>.",
        "possible_errors": [
            "line_item_period_should_start_after_last_settlement_closing_date"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the historical statement transactions do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that each <code>associated_invoice_number</code> in the <code>historical_statement_transactions</code> does not match any <code>associated_invoice_number</code> in the </code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "historical_invoice_number_match_found_in_open_settlement_transactions"
        ]
    },
    {
        "name": "Validate that the line items in the historical statement transactions are before the open settlement period",
        "description": "Validate that the <code>end_date</code> of each line item in <code>line_items</code> in <code>historical_statement_transactions</code> is before or on the <code>last_settlement_closing_date</code>.",
        "possible_errors": [
            "historical_transaction_line_item_ends_after_last_settlement_closing_date"
        ]
    },
    {
        "name": "Validate that the last settlement closing date is provided if there are historical statement transactions",
        "description": "Validate that the <code>last_settlement_closing_date</code> is provided if there are any <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "historical_transactions_without_last_settlement_closing_date"
        ]
    },
    {
        "name": "vandebron:data-import--validation--cashback-transaction-reasons-are-valid--display-name",
        "description": "vandebron:data-import--validation--cashback-transaction-reasons-are-valid--help-text",
        "possible_errors": [
            "cashback_transaction_reasons_invalid"
        ]
    },
    {
        "name": "vandebron:data-import--validation--billing-frequency-specification-required-for-billable-ledger--display-name",
        "description": "vandebron:data-import--validation--billing-frequency-specification-required-for-billable-ledger--help-text",
        "possible_errors": [
            "billing_frequency_specification_required_for_billable_ledger"
        ]
    }
]
Old
[
    {
        "name": "Validate that current statement transactions are after the last statement closing date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are after the <code>last_statement_closing_date</code>, if this date is given.",
        "possible_errors": [
            "current_statement_transaction_before_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that there are no current statement transactions for unbillable ledger",
        "description": "Validate that transactions for ledgers that will never issue any bills are only in <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "unbillable_ledger_transactions_in_current_statement_transactions"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate if <code>historical_statement_transactions</code> has been provided, that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Historical statement transactions require <code>last_statement_closing_date</code> for invoices",
        "description": "When <code>historical_statement_transactions</code> are provided, the <code>last_statement_closing_date</code> must also be provided to properly create and archive the initial invoice.",
        "possible_errors": [
            "historical_statement_transactions_require_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that only supply charges and payments are allowed in open settlement period",
        "description": "Validate that only <code>SUPPLY_CHARGE</code> and <code>PAYMENT</code> transactions are allowed in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "transactions_other_than_supply_charge_and_payment_in_open_settlement_period"
        ]
    },
    {
        "name": "Validate that a last settlement closing date is provided for non-zero last settlement balance",
        "description": "Validate that if <code>last_settlement_balance</code> is not zero then a <code>last_settlement_closing_date</code> is required.",
        "possible_errors": [
            "last_settlement_closing_balance_without_last_settlement_closing_date"
        ]
    },
    {
        "name": "Validate that the transactions in the open settlement period match the ledger balance",
        "description": "Validate that the <code>amount</code> of each transaction in <code>transactions_in_open_settlement_period</code> plus the <code>last_settlement_balance</code> matches the <code>ledger_balance</code>.",
        "possible_errors": [
            "balance_mismatch_on_ledger_balance"
        ]
    },
    {
        "name": "Validate that the ledger balance matches the last settlement balance",
        "description": "Validate that the <code>ledger_balance</code> matches the <code>last_settlement_balance</code>. This means that the balance change during the open settlement period is effectively zero.",
        "possible_errors": [
            "balance_mismatch_on_ledger_balance"
        ]
    },
    {
        "name": "Validate that the line items are within the open settlement period",
        "description": "Validate that the <code>start_date</code> of each line item in <code>line_items</code> starts after the <code>last_settlement_closing_date</code>.",
        "possible_errors": [
            "line_item_period_should_start_after_last_settlement_closing_date"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the historical statement transactions do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that each <code>associated_invoice_number</code> in the <code>historical_statement_transactions</code> does not match any <code>associated_invoice_number</code> in the </code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "historical_invoice_number_match_found_in_open_settlement_transactions"
        ]
    },
    {
        "name": "Validate that the line items in the historical statement transactions are before the open settlement period",
        "description": "Validate that the <code>end_date</code> of each line item in <code>line_items</code> in <code>historical_statement_transactions</code> is before or on the <code>last_settlement_closing_date</code>.",
        "possible_errors": [
            "historical_transaction_line_item_ends_after_last_settlement_closing_date"
        ]
    },
    {
        "name": "Validate that the last settlement closing date is provided if there are historical statement transactions",
        "description": "Validate that the <code>last_settlement_closing_date</code> is provided if there are any <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "historical_transactions_without_last_settlement_closing_date"
        ]
    },
    {
        "name": "vandebron:data-import--validation--cashback-transaction-reasons-are-valid--display-name",
        "description": "vandebron:data-import--validation--cashback-transaction-reasons-are-valid--help-text",
        "possible_errors": [
            "cashback_transaction_reasons_invalid"
        ]
    }
]
Old
{
    "required": true
}
New
{
    "TERMINATION_FEE": "#/components/schemas/NldTerminationFee"
}
Old
{
    "TERMINATION_FEE": "#/components/schemas/TerminationFee"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/NldTerminationFee"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]

14 July 2026

New
[
    {
        "name": "data-import--validation--shared-rate-exists-for-product",
        "description": "Validate that the shared rate code provided matches the shared rate for the product with the provided product code.",
        "possible_errors": [
            "product_specification_not_found_for_product",
            "time_series_not_found_for_product"
        ]
    }
]
Old
[
    {
        "name": "data-import--validation--time-series-exists-for-product",
        "description": "Validate that the time series code provided matches the time series for the product with the provided product code.",
        "possible_errors": [
            "product_specification_not_found_for_product",
            "time_series_not_found_for_product"
        ]
    }
]

13 July 2026

New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
No attributes to display
New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
No attributes to display

9 July 2026

New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Derive occupier billing address from supply address",
        "description": "When an occupier account has no explicit billing address and exactly one supply address is provided, copy the supply address into the billing address fields.",
        "possible_errors": []
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product",
            "line_item_rate_specification_not_on_product",
            "line_item_time_series_specification_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product",
            "line_item_rate_specification_not_on_product",
            "line_item_time_series_specification_not_on_product"
        ]
    }
]

8 July 2026

New
{
    "x-validators": [
        {
            "name": "Validate bespoke rates do not conflict",
            "description": "Validate bespoke rates for the same target and rate do not conflict during the same period. The target of a bespoke rate is determined by the supply point identifier and product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate schedules do not overlap",
            "description": "Validate bespoke rate schedules for the same target do not overlap. The supply point identifier will be used as the target if provided, falling back to the product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        }
    ]
}

7 July 2026

No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "external_cluster_id": "external_cluster_id",
        "external_customer_id": "external_customer_id"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before or equal to <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is strictly later than \u2068valid_from\u2069.",
        "possible_errors": [
            "start_date_same_as_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]

6 July 2026

No attributes to display

2 July 2026

New
{
    "PARTNER_COMMISSION": "#/components/schemas/PartnerCommission"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
No attributes to display
No attributes to display
Old
{
    "maxItems": 1
}
Old
{
    "maxItems": 1
}

1 July 2026

New
{
    "x-validators": [
        {
            "name": "Validate bespoke rate items are unique",
            "description": "Validate that no two bespoke rate items in a schedule share the same rate specification code, rate specification type, and variant profile.",
            "possible_errors": [
                "duplicate_bespoke_rate_items"
            ]
        }
    ]
}

30 June 2026

No attributes to display
New
[
    {
        "name": "Ensures only <code>user_details</code> or <code>details</code> are provided",
        "description": "Ensures that only <code>user_details</code> or <code>details</code> are provided, not both.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate no contact details for occupier",
        "description": "Validates that a customer identified as \"The Occupier\" does not have contact details. If contact details are provided it implies that the identity of the customer is known, and it therefore not an unknown occupier.",
        "possible_errors": [
            "contact_details_for_occupier"
        ]
    },
    {
        "name": "Validate that the customer's name is not \"The Occupier\"",
        "description": "Validate that the customer's name is not \"The Occupier\". To indicate an occupier account, use the <code>unknown_occupier</code> flag at the account-level.",
        "possible_errors": [
            "customer_may_not_be_named_the_occupier"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate user role",
        "description": "Validates that at least one user role is provided through <code>portfolio_roles</code> or <code>account_roles</code>.",
        "possible_errors": [
            "required_user_role"
        ]
    },
    {
        "name": "Validate exclusive role assignment",
        "description": "Validates that an exclusively-assignable role is not assigned to a user alongside any other role, whether in the same payload or already held by the user.",
        "possible_errors": [
            "customer_has_exclusive_role_conflict"
        ]
    },
    {
        "name": "Validate that <code>\u2068customer_preferences\u2069</code> and <code>\u2068consents\u2069</code> are not both provided",
        "description": "Validate that \u2068customer_preferences\u2069 and \u2068consents\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    }
]
Old
[
    {
        "name": "Ensures only <code>user_details</code> or <code>details</code> are provided",
        "description": "Ensures that only <code>user_details</code> or <code>details</code> are provided, not both.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate no contact details for occupier",
        "description": "Validates that a customer identified as \"The Occupier\" does not have contact details. If contact details are provided it implies that the identity of the customer is known, and it therefore not an unknown occupier.",
        "possible_errors": [
            "contact_details_for_occupier"
        ]
    },
    {
        "name": "Validate that the customer's name is not \"The Occupier\"",
        "description": "Validate that the customer's name is not \"The Occupier\". To indicate an occupier account, use the <code>unknown_occupier</code> flag at the account-level.",
        "possible_errors": [
            "customer_may_not_be_named_the_occupier"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate user role",
        "description": "Validates that at least one user role is provided through <code>portfolio_roles</code> or <code>account_roles</code>.",
        "possible_errors": [
            "required_user_role"
        ]
    },
    {
        "name": "Validate that <code>\u2068customer_preferences\u2069</code> and <code>\u2068consents\u2069</code> are not both provided",
        "description": "Validate that \u2068customer_preferences\u2069 and \u2068consents\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    }
]
No attributes to display
No attributes to display
New
{
    "x-validators": [
        {
            "name": "Validate that the reading date is midnight-aligned",
            "description": "Validate that the <code>reading_date</code> field for every reading on a register is at midnight in the Europe/Amsterdam timezone.",
            "possible_errors": [
                "reading_date_not_midnight_aligned"
            ]
        }
    ]
}
New
{
    "x-validators": [
        {
            "name": "Validate that the reading date is midnight-aligned",
            "description": "Validate that the <code>reading_date</code> field for every reading on a register is at midnight in the Europe/Amsterdam timezone.",
            "possible_errors": [
                "reading_date_not_midnight_aligned"
            ]
        }
    ]
}

26 June 2026

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    }
]
New
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate no duplicate portfolio reference namespaces",
        "description": "Validate that there are no duplicate portfolio reference namespaces in the payload.",
        "possible_errors": [
            "duplicate_portfolio_references"
        ]
    }
]
Old
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    }
]
New
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate no duplicate portfolio reference namespaces",
        "description": "Validate that there are no duplicate portfolio reference namespaces in the payload.",
        "possible_errors": [
            "duplicate_portfolio_references"
        ]
    }
]
Old
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    }
]
New
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate no duplicate portfolio reference namespaces",
        "description": "Validate that there are no duplicate portfolio reference namespaces in the payload.",
        "possible_errors": [
            "duplicate_portfolio_references"
        ]
    }
]
Old
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    }
]

25 June 2026

New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
No attributes to display
New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
No attributes to display

22 June 2026

New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    }
]
New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    },
    {
        "name": "Validate that there's no readings within inoperable periods",
        "description": "Validate that there's no readings within configuration periods where the physical status indicates the meter is not operational",
        "possible_errors": [
            "unexpected_readings_in_inoperable_period"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    }
]
New
[
    {
        "name": "Validate that business information is provided if not linking account to business with contract",
        "description": "Validate that business information is provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is false for the given import supplier.",
        "possible_errors": [
            "business_information_required_if_not_linking_via_contract"
        ]
    },
    {
        "name": "Validate that business information is not provided if linking an account to the business of the business contract.",
        "description": "Validate that business information is not provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is true for the given import supplier.",
        "possible_errors": [
            "business_information_not_required_if_linking_via_contract"
        ]
    },
    {
        "name": "Validate that at least one contract identifier is provided for import",
        "description": "Validate that at least one of <code>business_contract_identifiers</code> or <code>business_contract_identifier</code> is provided in the payload.",
        "possible_errors": [
            "missing_contract_identifier"
        ]
    }
]
Old
[
    {
        "name": "Validate that values are unique in Kraken for unique registered keys",
        "description": "Validate that keys with unique constraints do not already have provided value in Kraken.",
        "possible_errors": [
            "business_detail_value_exists_for_unique_key"
        ]
    },
    {
        "name": "Validate that business information is provided if not linking account to business with contract",
        "description": "Validate that business information is provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is false for the given import supplier.",
        "possible_errors": [
            "business_information_required_if_not_linking_via_contract"
        ]
    },
    {
        "name": "Validate that business information is not provided if linking an account to the business of the business contract.",
        "description": "Validate that business information is not provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is true for the given import supplier.",
        "possible_errors": [
            "business_information_not_required_if_linking_via_contract"
        ]
    },
    {
        "name": "Validate that at least one contract identifier is provided for import",
        "description": "Validate that at least one of <code>business_contract_identifiers</code> or <code>business_contract_identifier</code> is provided in the payload.",
        "possible_errors": [
            "missing_contract_identifier"
        ]
    }
]
No attributes to display

18 June 2026

New
[
    {
        "name": "Validate <code>\u2068active_to\u2069</code> not before <code>\u2068active_from\u2069</code>",
        "description": "Validates that <code>\u2068active_to\u2069</code>, if given, is on or later than <code>\u2068active_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate the gas smart meter register id",
        "description": "Validate that the gas smart meter register id is 1.8.0, 1.8.1 or 1.8.2.",
        "possible_errors": [
            "invalid_register_ids"
        ]
    },
    {
        "name": "data-import--validation--at-least-one-reading-per-register--display-name",
        "description": "data-import--validation--at-least-one-reading-per-register--help-text",
        "possible_errors": [
            "no_reading_on_register"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068active_to\u2069</code> not before <code>\u2068active_from\u2069</code>",
        "description": "Validates that <code>\u2068active_to\u2069</code>, if given, is on or later than <code>\u2068active_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate the gas smart meter register id",
        "description": "Validate that the gas smart meter register id is 1.8.0, 1.8.1 or 1.8.2.",
        "possible_errors": [
            "invalid_register_ids"
        ]
    }
]
New
[
    {
        "name": "Validate <code>\u2068active_to\u2069</code> not before <code>\u2068active_from\u2069</code>",
        "description": "Validates that <code>\u2068active_to\u2069</code>, if given, is on or later than <code>\u2068active_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate the number of registers on an electricity meter",
        "description": "Validate that the number of registers on an electricity meter is between 1 and 4, and on a smart electricity meter, 2 or 4.",
        "possible_errors": [
            "incorrect_number_of_registers"
        ]
    },
    {
        "name": "Validate that the metering direction and time of use combination is correct",
        "description": "Validate that the <code>metering_direction</code> and <code>time_of_use</code> combination is correct. i.e. <code>register_id</code>: 1.8.1, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>; <code>register_id</code>: 1.8.2, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>PEAK</code>; <code>register_id</code>: 2.8.1, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>: <code>register_id</code>: 2.8.2, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>PEAK</code>.",
        "possible_errors": []
    },
    {
        "name": "Validate that the metering direction and time of use combination is correct for conventional meters",
        "description": "Validate that the <code>metering_direction</code> and <code>time_of_use</code> combination is valid for a conventional electricity meter. Valid combinations are <code>CONSUMPTION</code>/<code>PRODUCTION</code> with <code>PEAK</code> or <code>OFF_PEAK</code>. <code>TOTAL</code> is not a valid time of use for conventional electricity meters.",
        "possible_errors": [
            "combination_of_metering_direction_and_time_of_use_not_permitted"
        ]
    },
    {
        "name": "Validate the electricity smart meter register ids",
        "description": "Validate that the electricity smart meter register ids are 1.8.1, 1.8.2, 2.8.1, 2.8.2.",
        "possible_errors": [
            "invalid_register_ids"
        ]
    },
    {
        "name": "Validate the register ids for a conventional electricity meter",
        "description": "Validate that register ids are integers between 1 and 9 for a conventional electricity meter.",
        "possible_errors": [
            "invalid_conventional_electricity_register_ids"
        ]
    },
    {
        "name": "data-import--validation--at-least-one-reading-per-register--display-name",
        "description": "data-import--validation--at-least-one-reading-per-register--help-text",
        "possible_errors": [
            "no_reading_on_register"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068active_to\u2069</code> not before <code>\u2068active_from\u2069</code>",
        "description": "Validates that <code>\u2068active_to\u2069</code>, if given, is on or later than <code>\u2068active_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate the number of registers on an electricity meter",
        "description": "Validate that the number of registers on an electricity meter is between 1 and 4, and on a smart electricity meter, 2 or 4.",
        "possible_errors": [
            "incorrect_number_of_registers"
        ]
    },
    {
        "name": "Validate that the metering direction and time of use combination is correct",
        "description": "Validate that the <code>metering_direction</code> and <code>time_of_use</code> combination is correct. i.e. <code>register_id</code>: 1.8.1, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>; <code>register_id</code>: 1.8.2, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>PEAK</code>; <code>register_id</code>: 2.8.1, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>: <code>register_id</code>: 2.8.2, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>PEAK</code>.",
        "possible_errors": []
    },
    {
        "name": "Validate that the metering direction and time of use combination is correct for conventional meters",
        "description": "Validate that the <code>metering_direction</code> and <code>time_of_use</code> combination is valid for a conventional electricity meter. Valid combinations are <code>CONSUMPTION</code>/<code>PRODUCTION</code> with <code>PEAK</code> or <code>OFF_PEAK</code>. <code>TOTAL</code> is not a valid time of use for conventional electricity meters.",
        "possible_errors": [
            "combination_of_metering_direction_and_time_of_use_not_permitted"
        ]
    },
    {
        "name": "Validate the electricity smart meter register ids",
        "description": "Validate that the electricity smart meter register ids are 1.8.1, 1.8.2, 2.8.1, 2.8.2.",
        "possible_errors": [
            "invalid_register_ids"
        ]
    },
    {
        "name": "Validate the register ids for a conventional electricity meter",
        "description": "Validate that register ids are integers between 1 and 9 for a conventional electricity meter.",
        "possible_errors": [
            "invalid_conventional_electricity_register_ids"
        ]
    }
]
New
[
    {
        "name": "data-import--validation--reading-value-does-not-exceed-register-digits--display-name",
        "description": "data-import--validation--reading-value-does-not-exceed-register-digits--help-text",
        "possible_errors": [
            "reading_exceeds_register_digits"
        ]
    },
    {
        "name": "data-import--validation--reading-values-are-monotonically-increasing--display-name",
        "description": "data-import--validation--reading-values-are-monotonically-increasing--help-text",
        "possible_errors": [
            "reading_values_not_monotonically_increasing"
        ]
    }
]
Old
[
    {
        "name": "data-import--validation--reading-value-does-not-exceed-register-digits--display-name",
        "description": "data-import--validation--reading-value-does-not-exceed-register-digits--help-text",
        "possible_errors": [
            "reading_exceeds_register_digits"
        ]
    }
]
New
[
    {
        "name": "data-import--validation--reading-value-does-not-exceed-register-digits--display-name",
        "description": "data-import--validation--reading-value-does-not-exceed-register-digits--help-text",
        "possible_errors": [
            "reading_exceeds_register_digits"
        ]
    },
    {
        "name": "data-import--validation--reading-values-are-monotonically-increasing--display-name",
        "description": "data-import--validation--reading-values-are-monotonically-increasing--help-text",
        "possible_errors": [
            "reading_values_not_monotonically_increasing"
        ]
    }
]
Old
[
    {
        "name": "data-import--validation--reading-value-does-not-exceed-register-digits--display-name",
        "description": "data-import--validation--reading-value-does-not-exceed-register-digits--help-text",
        "possible_errors": [
            "reading_exceeds_register_digits"
        ]
    }
]

17 June 2026

New
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        },
        {
            "name": "data-import--validation--reading-extras-only-contains-allowed-keys--display-name",
            "description": "data-import--validation--reading-extras-only-contains-allowed-keys--help-text",
            "possible_errors": [
                "reading_extras_contains_unknown_key"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        }
    ]
}

16 June 2026

New
{
    "x-enum-descriptions": {
        "GAS_CASHBACK_AWARDED": "GAS_CASHBACK_AWARDED",
        "ELECTRICITY_CASHBACK_AWARDED": "ELECTRICITY_CASHBACK_AWARDED"
    }
}
Old
{
    "x-enum-descriptions": {
        "GAS_CASHBACK_FULL_CREDIT": "GAS_CASHBACK_FULL_CREDIT",
        "ELECTRICITY_CASHBACK_FULL_CREDIT": "ELECTRICITY_CASHBACK_FULL_CREDIT"
    }
}
New
{
    "x-enum-descriptions": {
        "GAS_CASHBACK_CANCELLED": "GAS_CASHBACK_CANCELLED",
        "ELECTRICITY_CASHBACK_CANCELLED": "ELECTRICITY_CASHBACK_CANCELLED"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    }
]
No attributes to display
New
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Requested supply start date has COS gain processing window",
        "description": "Ensures that the COS_GAIN_PROCESSING_WINDOW application setting is configured when a requested_supply_start_date is provided.",
        "possible_errors": [
            "cos_gain_processing_window_not_configured"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068supply_end_date\u2069</code> not before <code>\u2068supply_start_date\u2069</code>",
        "description": "Validates that <code>\u2068supply_end_date\u2069</code>, if given, is on or later than <code>\u2068supply_start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate agreements do not start before supply start date",
        "description": "Validate that agreements do not start before the supply point's supply start date, if provided.",
        "possible_errors": [
            "agreement_start_date_before_supply_start_date"
        ]
    },
    {
        "name": "Validate that exactly one active agreement is provided",
        "description": "Validate that exactly one active agreement is provided for the supply point if it is already on supply. If the <code>supply_start_date</code> is in the future or the <code>supply_end_date</code> is in the past then we do not check for an active agreement.",
        "possible_errors": [
            "exactly_one_active_agreement_required"
        ]
    },
    {
        "name": "Validate that a future agreement provided if supply start date is in the future",
        "description": "Validate that exactly one future agreement is provided if the supply start date is in the future. This future agreement must start on the supply start date.",
        "possible_errors": [
            "future_agreement_required"
        ]
    },
    {
        "name": "Validate that the cap tar codes are linked to the grid operators by fiscal entity vat id, on the supply point for the same period",
        "description": "Validate that each <code>cap_tar_code</code> in <code>energy_meter_point_configuration_periods</code> is linked to a grid operator in <code>energy_meter_point_grid_operator_effective_periods</code> by fiscal entity vat id, within the same period. The <code>cap_tar_code</code> <code>start_date</code> and <code>end_date</code> do not need to match those of the grid operator exactly, however, the time period of the cap tar code must be within the time period of the grid operator.",
        "possible_errors": [
            "cap_tar_code_not_linked_with_grid_operator"
        ]
    },
    {
        "name": "Validate that the provided meter point has not previously been imported",
        "description": "Validate that a meter point with the same EAN has not previously been imported.",
        "possible_errors": [
            "supply_point_already_exists"
        ]
    }
]
No attributes to display

15 June 2026

New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product",
            "line_item_rate_specification_not_on_product",
            "line_item_time_series_specification_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product",
            "line_item_rate_specification_not_on_product",
            "line_item_time_series_specification_not_on_product"
        ]
    }
]
No attributes to display

12 June 2026

No attributes to display
No attributes to display

11 June 2026

New
{
    "x-enum-descriptions": {
        "PARTNERCAMPAIGN__BUURTKADOOS": "PARTNERCAMPAIGN__BUURTKADOOS"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "PARTNERCAMPAIGN__BUURTKADOOS": "PartnerCampaign -> BuurtKadoos"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "PARTNERCAMPAIGN__BUURTKADOOS": "PartnerCampaign -> BuurtKadoos"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display

9 June 2026

New
[
    {
        "name": "Validate <code>\u2068active_to\u2069</code> not before <code>\u2068active_from\u2069</code>",
        "description": "Validates that <code>\u2068active_to\u2069</code>, if given, is on or later than <code>\u2068active_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate the number of registers on an electricity meter",
        "description": "Validate that the number of registers on an electricity meter is between 1 and 4, and on a smart electricity meter, 2 or 4.",
        "possible_errors": [
            "incorrect_number_of_registers"
        ]
    },
    {
        "name": "Validate that the metering direction and time of use combination is correct",
        "description": "Validate that the <code>metering_direction</code> and <code>time_of_use</code> combination is correct. i.e. <code>register_id</code>: 1.8.1, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>; <code>register_id</code>: 1.8.2, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>PEAK</code>; <code>register_id</code>: 2.8.1, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>: <code>register_id</code>: 2.8.2, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>PEAK</code>.",
        "possible_errors": []
    },
    {
        "name": "Validate that the metering direction and time of use combination is correct for conventional meters",
        "description": "Validate that the <code>metering_direction</code> and <code>time_of_use</code> combination is valid for a conventional electricity meter. Valid combinations are <code>CONSUMPTION</code>/<code>PRODUCTION</code> with <code>PEAK</code> or <code>OFF_PEAK</code>. <code>TOTAL</code> is not a valid time of use for conventional electricity meters.",
        "possible_errors": [
            "combination_of_metering_direction_and_time_of_use_not_permitted"
        ]
    },
    {
        "name": "Validate the electricity smart meter register ids",
        "description": "Validate that the electricity smart meter register ids are 1.8.1, 1.8.2, 2.8.1, 2.8.2.",
        "possible_errors": [
            "invalid_register_ids"
        ]
    },
    {
        "name": "Validate the register ids for a conventional electricity meter",
        "description": "Validate that register ids are integers between 1 and 9 for a conventional electricity meter.",
        "possible_errors": [
            "invalid_conventional_electricity_register_ids"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068active_to\u2069</code> not before <code>\u2068active_from\u2069</code>",
        "description": "Validates that <code>\u2068active_to\u2069</code>, if given, is on or later than <code>\u2068active_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate the number of registers on an electricity meter",
        "description": "Validate that the number of registers on an electricity meter is between 1 and 4, and on a smart electricity meter, 2 or 4.",
        "possible_errors": [
            "incorrect_number_of_registers"
        ]
    },
    {
        "name": "Validate that the metering direction and time of use combination is correct",
        "description": "Validate that the <code>metering_direction</code> and <code>time_of_use</code> combination is correct. i.e. <code>register_id</code>: 1.8.1, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>; <code>register_id</code>: 1.8.2, <code>metering_direction</code>: <code>CONSUMPTION</code>, <code>time_of_use</code>: <code>PEAK</code>; <code>register_id</code>: 2.8.1, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>OFF_PEAK</code>: <code>register_id</code>: 2.8.2, <code>metering_direction</code>: <code>PRODUCTION</code>, <code>time_of_use</code>: <code>PEAK</code>.",
        "possible_errors": []
    },
    {
        "name": "Validate the electricity smart meter register ids",
        "description": "Validate that the electricity smart meter register ids are 1.8.1, 1.8.2, 2.8.1, 2.8.2.",
        "possible_errors": [
            "invalid_register_ids"
        ]
    },
    {
        "name": "Validate the register ids for a conventional electricity meter",
        "description": "Validate that register ids are integers between 1 and 9 for a conventional electricity meter.",
        "possible_errors": [
            "invalid_conventional_electricity_register_ids"
        ]
    }
]

8 June 2026

New
{
    "x-enum-descriptions": {
        "SME": "SME",
        "OTHER": "OTHER",
        "RETAIL": "RETAIL",
        "WINBACK": "WINBACK",
        "FLAGSHIP": "FLAGSHIP",
        "REFERRAL": "REFERRAL",
        "TELESALES": "TELESALES",
        "DOORTODOOR": "DOORTODOOR",
        "NEWBUSINESS": "NEWBUSINESS",
        "SME__MINDER": "SME__MINDER",
        "UNALLOCATED": "UNALLOCATED",
        "PARTNERWINBACK": "PARTNERWINBACK",
        "CUSTOMERSERVICE": "CUSTOMERSERVICE",
        "OTHER__EXTERNAL": "OTHER__EXTERNAL",
        "OTHER__INTERNAL": "OTHER__INTERNAL",
        "PARTNERCAMPAIGN": "PARTNERCAMPAIGN",
        "TELESALES__INBOUND": "TELESALES__INBOUND",
        "TELESALES__OUTBOUND": "TELESALES__OUTBOUND",
        "COMPARATOR__GASLICHT": "COMPARATOR__GASLICHT",
        "EXTERNALOUTBOUNDCALL": "EXTERNALOUTBOUNDCALL",
        "PARTNERCAMPAIGN__KPN": "PARTNERCAMPAIGN__KPN",
        "TELESALES__RETENTION": "TELESALES__RETENTION",
        "COMPARATOR__PRICEWISE": "COMPARATOR__PRICEWISE",
        "SME__GASLICHTBUSINESS": "SME__GASLICHTBUSINESS",
        "COMPARATOR__INDEPENDER": "COMPARATOR__INDEPENDER",
        "SME__PRICEWISEBUSINESS": "SME__PRICEWISEBUSINESS",
        "COMPARATOR__OVERSTAPPEN": "COMPARATOR__OVERSTAPPEN",
        "COMPARATOR__ENERGIEVERGELIJKEN": "COMPARATOR__ENERGIEVERGELIJKEN"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "SME": "SME",
        "OTHER": "Other",
        "RETAIL": "Retail",
        "WINBACK": "Winback",
        "FLAGSHIP": "Flagship",
        "REFERRAL": "Referral",
        "TELESALES": "Telesales",
        "DOORTODOOR": "DoorToDoor",
        "NEWBUSINESS": "NewBusiness",
        "SME__MINDER": "SME -> Minder",
        "UNALLOCATED": "Unallocated",
        "PARTNERWINBACK": "PartnerWinback",
        "CUSTOMERSERVICE": "CustomerService",
        "OTHER__EXTERNAL": "Other -> External",
        "OTHER__INTERNAL": "Other -> Internal",
        "PARTNERCAMPAIGN": "PartnerCampaign",
        "TELESALES__INBOUND": "Telesales -> Inbound",
        "TELESALES__OUTBOUND": "Telesales -> Outbound",
        "COMPARATOR__GASLICHT": "Comparator -> Gaslicht",
        "EXTERNALOUTBOUNDCALL": "ExternalOutboundCall",
        "PARTNERCAMPAIGN__KPN": "PartnerCampaign -> KPN",
        "TELESALES__RETENTION": "Telesales -> Retention",
        "COMPARATOR__PRICEWISE": "Comparator -> Pricewise",
        "SME__GASLICHTBUSINESS": "SME -> GaslichtBusiness",
        "COMPARATOR__INDEPENDER": "Comparator -> Independer",
        "SME__PRICEWISEBUSINESS": "SME -> PricewiseBusiness",
        "COMPARATOR__OVERSTAPPEN": "Comparator -> Overstappen",
        "COMPARATOR__ENERGIEVERGELIJKEN": "Comparator -> Energievergelijken"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "SME": "SME",
        "OTHER": "Other",
        "RETAIL": "Retail",
        "WINBACK": "Winback",
        "FLAGSHIP": "Flagship",
        "REFERRAL": "Referral",
        "TELESALES": "Telesales",
        "DOORTODOOR": "DoorToDoor",
        "NEWBUSINESS": "NewBusiness",
        "SME__MINDER": "SME -> Minder",
        "UNALLOCATED": "Unallocated",
        "PARTNERWINBACK": "PartnerWinback",
        "CUSTOMERSERVICE": "CustomerService",
        "OTHER__EXTERNAL": "Other -> External",
        "OTHER__INTERNAL": "Other -> Internal",
        "PARTNERCAMPAIGN": "PartnerCampaign",
        "TELESALES__INBOUND": "Telesales -> Inbound",
        "TELESALES__OUTBOUND": "Telesales -> Outbound",
        "COMPARATOR__GASLICHT": "Comparator -> Gaslicht",
        "EXTERNALOUTBOUNDCALL": "ExternalOutboundCall",
        "PARTNERCAMPAIGN__KPN": "PartnerCampaign -> KPN",
        "TELESALES__RETENTION": "Telesales -> Retention",
        "COMPARATOR__PRICEWISE": "Comparator -> Pricewise",
        "SME__GASLICHTBUSINESS": "SME -> GaslichtBusiness",
        "COMPARATOR__INDEPENDER": "Comparator -> Independer",
        "SME__PRICEWISEBUSINESS": "SME -> PricewiseBusiness",
        "COMPARATOR__OVERSTAPPEN": "Comparator -> Overstappen",
        "COMPARATOR__ENERGIEVERGELIJKEN": "Comparator -> Energievergelijken"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "AUCTION": "AUCTION",
        "COMPARATOR": "COMPARATOR",
        "COMPARATOR__DAISYCON": "COMPARATOR__DAISYCON",
        "AUCTION__CONSUMENTENBOND": "AUCTION__CONSUMENTENBOND",
        "PROTECTIVEADMINISTRATION": "PROTECTIVEADMINISTRATION",
        "COMPARATOR__ENERGIEKIEZER": "COMPARATOR__ENERGIEKIEZER",
        "AUCTION__VERENIGINGEIGENHUIS": "AUCTION__VERENIGINGEIGENHUIS",
        "COMPARATOR__ENERGIELEVERANCIERS": "COMPARATOR__ENERGIELEVERANCIERS"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "AUCTION": "Auction",
        "COMPARATOR": "Comparator",
        "COMPARATOR__DAISYCON": "Comparator -> Daisycon",
        "AUCTION__CONSUMENTENBOND": "Auction -> ConsumentenBond",
        "PROTECTIVEADMINISTRATION": "ProtectiveAdministration",
        "COMPARATOR__ENERGIEKIEZER": "Comparator -> EnergieKiezer",
        "AUCTION__VERENIGINGEIGENHUIS": "Auction -> VerenigingEigenHuis",
        "COMPARATOR__ENERGIELEVERANCIERS": "Comparator -> Energieleveranciers"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "AUCTION": "Auction",
        "COMPARATOR": "Comparator",
        "COMPARATOR__DAISYCON": "Comparator -> Daisycon",
        "AUCTION__CONSUMENTENBOND": "Auction -> ConsumentenBond",
        "PROTECTIVEADMINISTRATION": "ProtectiveAdministration",
        "COMPARATOR__ENERGIEKIEZER": "Comparator -> EnergieKiezer",
        "AUCTION__VERENIGINGEIGENHUIS": "Auction -> VerenigingEigenHuis",
        "COMPARATOR__ENERGIELEVERANCIERS": "Comparator -> Energieleveranciers"
    }
}
Old
{
    "x-enum-descriptions": {}
}

5 June 2026

New
[
    {
        "name": "Promotion assignment discount targets are valid",
        "description": "Validates that the promotion exists, discounts are defined in the promotion, target types match the discount target type, and target identifiers are valid.",
        "possible_errors": [
            "discount_not_in_promotion",
            "invalid_input_data",
            "promotion_not_registered",
            "rate_source_provider_not_registered",
            "source_data_not_supported_for_fixed_rate",
            "source_data_reference_mismatch",
            "target_identifier_invalid",
            "target_type_mismatch",
            "target_type_not_registered"
        ]
    },
    {
        "name": "Promotion assignment params are valid",
        "description": "Validates that the params field contains only valid values. If promotion_start_date is provided, it must be a valid ISO 8601 datetime string.",
        "possible_errors": [
            "invalid_promotion_start_date"
        ]
    }
]
Old
[
    {
        "name": "Promotion assignment discount targets are valid",
        "description": "Validates that the promotion exists, discounts are defined in the promotion, target types match the discount target type, and target identifiers are valid.",
        "possible_errors": [
            "discount_not_in_promotion",
            "invalid_input_data",
            "promotion_not_registered",
            "rate_source_provider_not_registered",
            "source_data_not_supported_for_fixed_rate",
            "source_data_reference_mismatch",
            "target_identifier_invalid",
            "target_type_mismatch",
            "target_type_not_registered"
        ]
    }
]
No attributes to display

4 June 2026

New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product",
            "line_item_rate_specification_not_on_product",
            "line_item_time_series_specification_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]
No attributes to display
No attributes to display
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]
New
{
    "x-enum-descriptions": {
        "SYSTEM": "System"
    }
}
Old
{
    "x-enum-descriptions": {}
}

3 June 2026

New
[
    {
        "name": "Validate <code>\u2068effective_to\u2069</code> not before <code>\u2068effective_from\u2069</code>",
        "description": "Validates that <code>\u2068effective_to\u2069</code>, if given, is on or later than <code>\u2068effective_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate addons are compatible with their agreement",
        "description": "Validate that addons provided for an agreement are compatible and configured for agreement's product.",
        "possible_errors": [
            "addon_band_not_valid_for_agreement",
            "multiple_addons_in_the_same_family"
        ]
    },
    {
        "name": "Validate that the rate bands given in the rate overrides are valid for the product code",
        "description": "Validate that the rate bands given in the rate overrides exist for the agreement's product.",
        "possible_errors": [
            "invalid_period",
            "rate_band_does_not_exist"
        ]
    },
    {
        "name": "Validate that cost detail bands match product rates",
        "description": "Validate that all bands specified in the monthly advance charge template cost details exist as rate bands on the selected product.",
        "possible_errors": [
            "cost_detail_adjustment_delta_has_rate_source_system",
            "cost_detail_band_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068effective_to\u2069</code> not before <code>\u2068effective_from\u2069</code>",
        "description": "Validates that <code>\u2068effective_to\u2069</code>, if given, is on or later than <code>\u2068effective_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate addons are compatible with their agreement",
        "description": "Validate that addons provided for an agreement are compatible and configured for agreement's product.",
        "possible_errors": [
            "addon_band_not_valid_for_agreement",
            "multiple_addons_in_the_same_family"
        ]
    },
    {
        "name": "Validate that the rate bands given in the rate overrides are valid for the product code",
        "description": "Validate that the rate bands given in the rate overrides exist for the agreement's product.",
        "possible_errors": [
            "invalid_period",
            "rate_band_does_not_exist"
        ]
    },
    {
        "name": "Validate that cost detail bands match product rates",
        "description": "Validate that all bands specified in the monthly advance charge template cost details exist as rate bands on the selected product.",
        "possible_errors": [
            "cost_detail_band_not_on_product"
        ]
    }
]
No attributes to display
New
{
    "x-enum-descriptions": {
        "WEBSITE": "WEBSITE",
        "WEBSITE__ONLINE": "WEBSITE__ONLINE"
    }
}
Old
{
    "x-enum-descriptions": {
        "OWN_CHANNEL": "OWN_CHANNEL",
        "EXTERNAL_CHANNEL": "EXTERNAL_CHANNEL",
        "OWN_CHANNEL__WEBSITE": "OWN_CHANNEL__WEBSITE",
        "OWN_CHANNEL__WEBSITE__ONLINE": "OWN_CHANNEL__WEBSITE__ONLINE"
    }
}
New
{
    "x-enum-descriptions": {
        "WEBSITE": "Website",
        "WEBSITE__ONLINE": "Website -> Online"
    }
}
Old
{
    "x-enum-descriptions": {
        "OWN_CHANNEL": "Own channel",
        "EXTERNAL_CHANNEL": "External channel",
        "OWN_CHANNEL__WEBSITE": "Own channel -> Website",
        "OWN_CHANNEL__WEBSITE__ONLINE": "Own channel -> Website -> Online"
    }
}
New
{
    "x-enum-descriptions": {
        "WEBSITE": "Website",
        "WEBSITE__ONLINE": "Website -> Online"
    }
}
Old
{
    "x-enum-descriptions": {
        "OWN_CHANNEL": "Own channel",
        "EXTERNAL_CHANNEL": "External channel",
        "OWN_CHANNEL__WEBSITE": "Own channel -> Website",
        "OWN_CHANNEL__WEBSITE__ONLINE": "Own channel -> Website -> Online"
    }
}

2 June 2026

New
{
    "TRANCHE_TARGET_RESIDUAL_FEE": "#/components/schemas/TrancheTargetResidualFee"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]

29 May 2026

New
{
    "x-enum-descriptions": {
        "OWN_CHANNEL": "OWN_CHANNEL",
        "EXTERNAL_CHANNEL": "EXTERNAL_CHANNEL",
        "OWN_CHANNEL__WEBSITE": "OWN_CHANNEL__WEBSITE",
        "OWN_CHANNEL__WEBSITE__ONLINE": "OWN_CHANNEL__WEBSITE__ONLINE"
    }
}
Old
{
    "x-enum-descriptions": {
        "UNKNOWN": "UNKNOWN",
        "WEBSITE": "WEBSITE"
    }
}
New
{
    "x-enum-descriptions": {
        "OWN_CHANNEL": "Own channel",
        "EXTERNAL_CHANNEL": "External channel",
        "OWN_CHANNEL__WEBSITE": "Own channel -> Website",
        "OWN_CHANNEL__WEBSITE__ONLINE": "Own channel -> Website -> Online"
    }
}
Old
{
    "x-enum-descriptions": {
        "UNKNOWN": "Unknown",
        "WEBSITE": "Website"
    }
}
New
{
    "x-enum-descriptions": {
        "OWN_CHANNEL": "Own channel",
        "EXTERNAL_CHANNEL": "External channel",
        "OWN_CHANNEL__WEBSITE": "Own channel -> Website",
        "OWN_CHANNEL__WEBSITE__ONLINE": "Own channel -> Website -> Online"
    }
}
Old
{
    "x-enum-descriptions": {
        "UNKNOWN": "Unknown",
        "WEBSITE": "Website"
    }
}

28 May 2026

New
{
    "x-enum-descriptions": {
        "FILE_ATTACHMENT_CONTRACT_SUMMARY": "Contractsamenvatting",
        "FILE_ATTACHMENT_GENERAL_CONDITIONS": "Algemene voorwaarden",
        "FILE_ATTACHMENT_DELIVERY_CONDITIONS": "Leveringsvoorwaarden",
        "FILE_ATTACHMENT_PROMOTION_CONDITIONS": "Actievoorwaarden"
    }
}
Old
{
    "x-enum-descriptions": {
        "FILE_ATTACHMENT_CONDITIONS": "Voorwaarden"
    }
}

27 May 2026

No attributes to display
New
{
    "enum": [
        "OptIn_Product_Service_Feedback__c",
        "OptIn_Contract_Offers_Email__c",
        "OptIn_News_Other_Offers__c",
        "OptIn_Contract_Offers_Phone__c",
        "OptIn_Phone_Telesales_Date__c",
        "OptIn_Customer_Panel",
        "Customer_Forward_For_VSL"
    ],
    "type": "string",
    "x-spec-enum-id": "2eb1fc50b6d24017",
    "x-enum-descriptions": {
        "OptIn_Customer_Panel": "OptIn_Customer_Panel",
        "Customer_Forward_For_VSL": "Early Detection (Vroeg Signaleren - VSL) to identify potential customers that need help with payments",
        "OptIn_News_Other_Offers__c": "OptIn_News_Other_Offers__c",
        "OptIn_Phone_Telesales_Date__c": "OptIn_Phone_Telesales_Date__c",
        "OptIn_Contract_Offers_Email__c": "OptIn_Contract_Offers_Email__c",
        "OptIn_Contract_Offers_Phone__c": "OptIn_Contract_Offers_Phone__c",
        "OptIn_Product_Service_Feedback__c": "OptIn_Product_Service_Feedback__c"
    }
}
Old
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
New
{
    "enum": [
        "OptIn_Product_Service_Feedback__c",
        "OptIn_Contract_Offers_Email__c",
        "OptIn_News_Other_Offers__c",
        "OptIn_Contract_Offers_Phone__c",
        "OptIn_Phone_Telesales_Date__c",
        "OptIn_Customer_Panel",
        "Customer_Forward_For_VSL"
    ],
    "type": "string",
    "x-spec-enum-id": "2eb1fc50b6d24017",
    "x-enum-descriptions": {
        "OptIn_Customer_Panel": "OptIn_Customer_Panel",
        "Customer_Forward_For_VSL": "Early Detection (Vroeg Signaleren - VSL) to identify potential customers that need help with payments",
        "OptIn_News_Other_Offers__c": "OptIn_News_Other_Offers__c",
        "OptIn_Phone_Telesales_Date__c": "OptIn_Phone_Telesales_Date__c",
        "OptIn_Contract_Offers_Email__c": "OptIn_Contract_Offers_Email__c",
        "OptIn_Contract_Offers_Phone__c": "OptIn_Contract_Offers_Phone__c",
        "OptIn_Product_Service_Feedback__c": "OptIn_Product_Service_Feedback__c"
    }
}
Old
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
New
{
    "items": {
        "enum": [
            "ADMIN"
        ],
        "type": "string",
        "x-spec-enum-id": "de8e12dd9efc3c8d",
        "x-enum-descriptions": {
            "ADMIN": "ADMIN"
        }
    }
}
Old
{
    "items": {
        "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
        "x-spec-enum-id": "4f53cda18c2baa0c"
    }
}
New
{
    "items": {
        "enum": [
            "ADMIN"
        ],
        "type": "string",
        "x-spec-enum-id": "de8e12dd9efc3c8d",
        "x-enum-descriptions": {
            "ADMIN": "ADMIN"
        }
    }
}
Old
{
    "items": {
        "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
        "x-spec-enum-id": "4f53cda18c2baa0c"
    }
}
New
{
    "type": "string",
    "x-enum-descriptions": {
        "ADMIN": "ADMIN"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "enum": [
            "ADMIN"
        ],
        "type": "string",
        "x-spec-enum-id": "de8e12dd9efc3c8d",
        "x-enum-descriptions": {
            "ADMIN": "ADMIN"
        }
    }
}
Old
{
    "items": {
        "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
        "x-spec-enum-id": "4f53cda18c2baa0c"
    }
}
New
{
    "x-enum-descriptions": {
        "Vandebron": "Vandebron"
    }
}
Old
{
    "x-enum-descriptions": {}
}

26 May 2026

New
{
    "enum": [
        "WEBSITE",
        "UNKNOWN"
    ],
    "type": "string",
    "x-spec-enum-id": "2790b55263a45c89",
    "x-enum-descriptions": {
        "UNKNOWN": "UNKNOWN",
        "WEBSITE": "WEBSITE"
    }
}
Old
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
New
{
    "x-enum-descriptions": {
        "UNKNOWN": "Unknown",
        "WEBSITE": "Website"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "enum": [
        "WEBSITE",
        "UNKNOWN"
    ],
    "type": "string",
    "x-spec-enum-id": "913ba7daf23d3945",
    "x-enum-descriptions": {
        "UNKNOWN": "Unknown",
        "WEBSITE": "Website"
    }
}
Old
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}

24 May 2026

No attributes to display
No attributes to display

22 May 2026

New
{
    "enum": [
        "FILE_ATTACHMENT_CONTRACT",
        "FILE_ATTACHMENT_CONDITIONS",
        "FILE_ATTACHMENT_QUALITY_CRITERIA",
        "FILE_ATTACHMENT_WITHDRAWAL_FORM",
        "FILE_ATTACHMENT_CONNECTION_AND_TRANSPORT_AGREEMENT"
    ],
    "x-spec-enum-id": "2a4b9d1be9d67710",
    "x-enum-descriptions": {
        "FILE_ATTACHMENT_CONTRACT": "Contract",
        "FILE_ATTACHMENT_CONDITIONS": "Voorwaarden",
        "FILE_ATTACHMENT_WITHDRAWAL_FORM": "Herroepingsformulier",
        "FILE_ATTACHMENT_QUALITY_CRITERIA": "Kwaliteitscriteria",
        "FILE_ATTACHMENT_CONNECTION_AND_TRANSPORT_AGREEMENT": "ATO"
    }
}
Old
{
    "maxLength": 225
}
New
{
    "nullable": true
}
Old
{
    "required": true
}
No attributes to display
No attributes to display

21 May 2026

No attributes to display
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]
Old
{
    "maxItems": 1
}

20 May 2026

New
{
    "x-validators": [
        {
            "name": "Validate S3 key does not already have a file attachment",
            "description": "Validate that the <code>s3_key</code> provided does not already have a file attachment in Kraken.",
            "possible_errors": [
                "s3_key_already_has_file_attachment"
            ]
        },
        {
            "name": "Validate path exists in file store",
            "description": "Validate that the given path corresponds to a file that has previously been uploaded to the migration file store. Note that this validation is disabled by default: get in touch with the Kraken team to check if it has been enabled for this migration.",
            "possible_errors": [
                "path_does_not_exist_in_file_store"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate S3 key does not already have a file attachment",
            "description": "Validate that the <code>s3_key</code> provided does not already have a file attachment in Kraken.",
            "possible_errors": [
                "s3_key_already_has_file_attachment"
            ]
        }
    ]
}
New
{
    "PRODUCT_TERM": "#/components/schemas/ProductTermCharacteristic"
}
New
[
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/ProductTermCharacteristic"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    }
]

19 May 2026

No attributes to display
No attributes to display

18 May 2026

New
{
    "CORRECTIVE_PERIOD": "#/components/schemas/CorrectivePeriod"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]

14 May 2026

No attributes to display

13 May 2026

New
{
    "x-enum-descriptions": {
        "CHARGEBACK": "Chargeback"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]

12 May 2026

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product"
        ]
    }
]
No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "GAS_CASHBACK_CREDIT": "GAS_CASHBACK_CREDIT",
        "GAS_CASHBACK_FULL_CREDIT": "GAS_CASHBACK_FULL_CREDIT",
        "ELECTRICITY_CASHBACK_CREDIT": "ELECTRICITY_CASHBACK_CREDIT",
        "ELECTRICITY_CASHBACK_FULL_CREDIT": "ELECTRICITY_CASHBACK_FULL_CREDIT"
    }
}
Old
{
    "x-enum-descriptions": {
        "CASHBACK_RENEWAL": "CASHBACK_RENEWAL",
        "CASHBACK_SIGN_UP": "CASHBACK_SIGN_UP"
    }
}
New
{
    "x-enum-descriptions": {
        "GAS_CASHBACK_PAYOUT": "GAS_CASHBACK_PAYOUT",
        "ELECTRICITY_CASHBACK_PAYOUT": "ELECTRICITY_CASHBACK_PAYOUT"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "$ref": "#/components/schemas/VandebronLedgerRecordWithTransactions"
    }
}
Old
{
    "items": {
        "$ref": "#/components/schemas/NldLedgerRecordWithTransactions"
    }
}

11 May 2026

No attributes to display

8 May 2026

New
{
    "x-removal-date": "2026-05-25"
}
New
{
    "x-removal-date": "2026-05-25"
}

7 May 2026

No attributes to display
No attributes to display
No attributes to display

6 May 2026

No attributes to display
New
[
    {
        "name": "data-import--validation--time-series-exists-for-product",
        "description": "Validate that the time series code provided matches the time series for the product with the provided product code.",
        "possible_errors": [
            "product_specification_not_found_for_product",
            "time_series_not_found_for_product"
        ]
    }
]
Old
[
    {
        "name": "data-import--validation--time-series-exists-for-product",
        "description": "Validate that the time series code provided matches the time series for the product with the provided product code.",
        "possible_errors": [
            "time_series_not_found_for_product"
        ]
    }
]

5 May 2026

New
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
Old
{
    "enum": [
        "EVENTS",
        "DIGI_TELESALES",
        "HIGH_REFERRER",
        "PEOPLE_POWER",
        "MOVE_IN",
        "WORKPLACE_POP_UP",
        "ACQUISITION",
        "LANDLORD",
        "SUPPLIER_OF_LAST_RESORT",
        "GIFT_OF_KIT",
        "DEBT_COLLECTION_AGENCY",
        "AGGREGATOR",
        "TELESALES",
        "NEW_TENANT",
        "DIRECT",
        "PRICE_COMPARISON",
        "PARENT_POWER",
        "WORKS_WITH_OCTOPUS",
        "FIELD_SALES",
        "PARTNERSHIPS",
        "BROKER"
    ],
    "type": "string",
    "x-spec-enum-id": "2c5347e84652fd95",
    "x-enum-descriptions": {
        "BROKER": "BROKER",
        "DIRECT": "DIRECT",
        "EVENTS": "EVENTS",
        "MOVE_IN": "MOVE_IN",
        "LANDLORD": "LANDLORD",
        "TELESALES": "TELESALES",
        "AGGREGATOR": "AGGREGATOR",
        "NEW_TENANT": "NEW_TENANT",
        "ACQUISITION": "ACQUISITION",
        "FIELD_SALES": "FIELD_SALES",
        "GIFT_OF_KIT": "GIFT_OF_KIT",
        "PARENT_POWER": "PARENT_POWER",
        "PARTNERSHIPS": "PARTNERSHIPS",
        "PEOPLE_POWER": "PEOPLE_POWER",
        "HIGH_REFERRER": "HIGH_REFERRER",
        "DIGI_TELESALES": "DIGI_TELESALES",
        "PRICE_COMPARISON": "PRICE_COMPARISON",
        "WORKPLACE_POP_UP": "WORKPLACE_POP_UP",
        "WORKS_WITH_OCTOPUS": "WORKS_WITH_OCTOPUS",
        "DEBT_COLLECTION_AGENCY": "DEBT_COLLECTION_AGENCY",
        "SUPPLIER_OF_LAST_RESORT": "SUPPLIER_OF_LAST_RESORT"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "BROKER": "Broker",
        "DIRECT": "Direct",
        "EVENTS": "Events",
        "MOVE_IN": "Move in",
        "LANDLORD": "Landlord",
        "TELESALES": "Telesales",
        "AGGREGATOR": "Aggregator",
        "NEW_TENANT": "New tenant",
        "ACQUISITION": "Acquisition",
        "FIELD_SALES": "Field sales",
        "GIFT_OF_KIT": "Gift of kit",
        "PARENT_POWER": "Parent power",
        "PARTNERSHIPS": "Partnerships",
        "PEOPLE_POWER": "People power",
        "HIGH_REFERRER": "High referrer",
        "DIGI_TELESALES": "Digital telesales",
        "PRICE_COMPARISON": "Price comparison",
        "WORKPLACE_POP_UP": "Workplace pop-up",
        "WORKS_WITH_OCTOPUS": "Works with octopus",
        "DEBT_COLLECTION_AGENCY": "Debt collection agency",
        "SUPPLIER_OF_LAST_RESORT": "Supplier of last resort"
    }
}
New
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
Old
{
    "enum": [
        "DIRECT",
        "PRICE_COMPARISON",
        "TELESALES",
        "DIGI_TELESALES",
        "EVENTS",
        "FIELD_SALES",
        "AGGREGATOR",
        "PARTNERSHIPS",
        "NEW_TENANT",
        "MOVE_IN",
        "WORKPLACE_POP_UP",
        "BROKER",
        "PARENT_POWER",
        "PEOPLE_POWER",
        "GIFT_OF_KIT",
        "HIGH_REFERRER",
        "SUPPLIER_OF_LAST_RESORT",
        "ACQUISITION",
        "WORKS_WITH_OCTOPUS",
        "LANDLORD",
        "DEBT_COLLECTION_AGENCY"
    ],
    "type": "string",
    "x-spec-enum-id": "f4ccf4dcda60c174",
    "x-enum-descriptions": {
        "BROKER": "Broker",
        "DIRECT": "Direct",
        "EVENTS": "Events",
        "MOVE_IN": "Move in",
        "LANDLORD": "Landlord",
        "TELESALES": "Telesales",
        "AGGREGATOR": "Aggregator",
        "NEW_TENANT": "New tenant",
        "ACQUISITION": "Acquisition",
        "FIELD_SALES": "Field sales",
        "GIFT_OF_KIT": "Gift of kit",
        "PARENT_POWER": "Parent power",
        "PARTNERSHIPS": "Partnerships",
        "PEOPLE_POWER": "People power",
        "HIGH_REFERRER": "High referrer",
        "DIGI_TELESALES": "Digital telesales",
        "PRICE_COMPARISON": "Price comparison",
        "WORKPLACE_POP_UP": "Workplace pop-up",
        "WORKS_WITH_OCTOPUS": "Works with octopus",
        "DEBT_COLLECTION_AGENCY": "Debt collection agency",
        "SUPPLIER_OF_LAST_RESORT": "Supplier of last resort"
    }
}

30 April 2026

New
{
    "DELAYER_DAYS": "#/components/schemas/DelayerDays",
    "BILL_DUE_DATE": "#/components/schemas/BillDueDate",
    "TERMINATION_FEE": "#/components/schemas/TerminationFee",
    "CONTRACT_METADATA": "#/components/schemas/ContractMetaData",
    "LATE_PAYMENT_FEES": "#/components/schemas/LatePaymentFees",
    "ISSUANCE_FREQUENCY": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm",
    "COLLATERAL_REQUIRED": "#/components/schemas/CollateralRequired",
    "PAYS_BY_DIRECT_DEBIT": "#/components/schemas/PaysByDirectDebitTerm",
    "PROMOTION_ASSIGNMENT": "#/components/schemas/PromotionAssignmentTerm",
    "RATE_GROUP_ELIGIBILITY": "#/components/schemas/RateGroupEligibilityConfiguration",
    "CHARACTERISTIC_OVERRIDE": "#/components/schemas/CharacteristicOverrideConfiguration",
    "MINIMUM_CONTRACT_LENGTH": "#/components/schemas/MinimumContractLength",
    "BESPOKE_RATE_CONFIGURATION": "#/components/schemas/BespokeRateConfiguration",
    "TAX_ADJUSTMENT_CONFIGURATION": "#/components/schemas/TaxAdjustmentConfiguration",
    "PRODUCT_RATE_OVERRIDE_SCHEDULE": "#/components/schemas/ProductRateOverrideConfiguration",
    "CONTRACTED_VOLUME_CONFIGURATION": "#/components/schemas/ContractedVolumeConfiguration",
    "GUARANTEE_OF_ORIGIN_CONFIGURATION": "#/components/schemas/GuaranteeOfOriginConfiguration"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]

29 April 2026

No attributes to display
New
{
    "enum": [
        "VDB"
    ],
    "type": "string",
    "x-spec-enum-id": "a39ed622f485beb3",
    "x-enum-descriptions": {
        "VDB": "VANDEBRON"
    }
}
Old
{
    "x-comment": "<p>Import supplier choices will be available once suppliers are created in the system.</p>",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
No attributes to display
New
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        }
    ]
}
No attributes to display
New
{
    "x-validators": [
        {
            "name": "data-import--validation--reading-value-is-non-negative--display-name",
            "description": "data-import--validation--reading-value-is-non-negative--help-text",
            "possible_errors": [
                "reading_value_is_negative"
            ]
        }
    ]
}
No attributes to display
No attributes to display
No attributes to display

28 April 2026

No attributes to display
No attributes to display

22 April 2026

No attributes to display
No attributes to display

20 April 2026

New
{
    "x-removal-date": "2026-05-20"
}
New
{
    "x-removal-date": "2026-05-20"
}
Old
{
    "nullable": true
}

17 April 2026

New
{
    "enum": [
        "BUCKAROO_SEPA",
        "BUCKAROO"
    ],
    "type": "string",
    "x-spec-enum-id": "ba82d8005645876f",
    "x-enum-descriptions": {
        "BUCKAROO": "Buckaroo",
        "BUCKAROO_SEPA": "Buckaroo SEPA"
    }
}
Old
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
New
{
    "enum": [
        "BUCKAROO_SEPA",
        "BUCKAROO"
    ],
    "type": "string",
    "x-spec-enum-id": "ba82d8005645876f",
    "x-enum-descriptions": {
        "BUCKAROO": "Buckaroo",
        "BUCKAROO_SEPA": "Buckaroo SEPA"
    }
}
Old
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
No attributes to display

14 April 2026

New
{
    "x-enum-descriptions": {
        "CASHBACK_RENEWAL": "CASHBACK_RENEWAL",
        "CASHBACK_SIGN_UP": "CASHBACK_SIGN_UP"
    }
}
Old
{
    "x-enum-descriptions": {}
}

13 April 2026

New
{
    "x-validators": [
        {
            "name": "Validate that only supply charges and payments are allowed in open settlement period",
            "description": "Validate that only <code>SUPPLY_CHARGE</code> and <code>PAYMENT</code> transactions are allowed in the <code>transactions_in_open_settlement_period</code>.",
            "possible_errors": [
                "transactions_other_than_supply_charge_and_payment_in_open_settlement_period"
            ]
        },
        {
            "name": "Validate that there are at most two supply charges for every advance invoice",
            "description": "Validate that there are at most two <code>SUPPLY_CHARGE</code> transactions for every unique <code>associated_invoice_number</code>.",
            "possible_errors": [
                "more_than_two_supply_charges_for_advance_invoice"
            ]
        },
        {
            "name": "Validate that the invoice numbers provided in the payment and supply charge transactions match",
            "description": "Validate that the invoice numbers in the <code>SUPPLY_CHARGE</code> and <code>PAYMENT</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
            "possible_errors": [
                "invoice_numbers_do_not_match"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate that only supply charges and payments are allowed in open settlement period",
            "description": "Validate that only <code>SUPPLY_CHARGE</code> and <code>PAYMENT</code> transactions are allowed in the <code>transactions_in_open_settlement_period</code>.",
            "possible_errors": [
                "transactions_other_than_supply_charge_and_payment_in_open_settlement_period"
            ]
        },
        {
            "name": "Validate that there are at most two supply charges for every advance invoice",
            "description": "Validate that there are at most two <code>SUPPLY_CHARGE</code> transactions for every unique <code>associated_invoice_number</code>.",
            "possible_errors": [
                "more_than_two_supply_charges_for_advance_invoice"
            ]
        },
        {
            "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
            "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
            "possible_errors": [
                "invalid_or_missing_rate_band"
            ]
        },
        {
            "name": "Validate that the invoice numbers provided in the payment and supply charge transactions match",
            "description": "Validate that the invoice numbers in the <code>SUPPLY_CHARGE</code> and <code>PAYMENT</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
            "possible_errors": [
                "invoice_numbers_do_not_match"
            ]
        }
    ]
}
New
{
    "x-validators": [
        {
            "name": "Validate that the historical statement transaction type is valid",
            "description": "Validate that the <code>type</code> in a <code>historical_statement_transaction</code> is one of the following: CREDIT, PAYMENT, REPAYMENT, SUPPLY_CHARGE.",
            "possible_errors": [
                "invalid_historical_statement_transaction_type"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate that the historical statement transaction type is valid",
            "description": "Validate that the <code>type</code> in a <code>historical_statement_transaction</code> is one of the following: CREDIT, PAYMENT, REPAYMENT, SUPPLY_CHARGE.",
            "possible_errors": [
                "invalid_historical_statement_transaction_type"
            ]
        },
        {
            "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
            "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
            "possible_errors": [
                "invalid_or_missing_rate_band"
            ]
        }
    ]
}
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    },
    {
        "name": "Validate that the correct rate bands are included in the line items within the transactions in the open settlement period and historical statement transactions",
        "description": "Validate that there are no missing or extra <code>rate_bands</code> in the <code>line_items</code> within the <code>transactions_in_open_settlement_period</code> and <code>historical_statement_transactions</code>.",
        "possible_errors": [
            "line_item_rate_band_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account. For Business accounts, set the family name to 'Business' if it is not provided.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate business type and company number not provided for domestic accounts",
        "description": "Validate that neither a business type or company number are provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate agreements cover last statement closing date",
        "description": "Validate that there is an agreement for each supply point covering each ledger's <code>last_statement_closing_date</code>.",
        "possible_errors": [
            "no_agreement_covering_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate that the energy meter point and billing configuration periods cover the open settlement period",
        "description": "Validate that the energy meter point and billing configuration periods start on or before the <code>last_settlement_closing_date</code> and are open-ended.",
        "possible_errors": [
            "config_period_does_not_cover_open_settlement_period"
        ]
    },
    {
        "name": "Validate that the last settlement closing date aligns with the agreement start date",
        "description": "Validate that the <code>last_settlement_closing_date</code> aligns with the <code>effective_from</code> of the agreement. Alignment is defined as exactly 12 months between the (inclusive) <code>last_settlement_closing_date</code> and the <code>effective_from</code> of the agreement.",
        "possible_errors": [
            "last_settlement_closing_date_does_not_align_with_agreement_start_date"
        ]
    },
    {
        "name": "Validate that each line item start day matches the agreement start day",
        "description": "Validate that each line item start day matches the agreement start day. If the agreement start day is not possible in the line item start month (e.g. 29/30/31), the last day of that month should be used.",
        "possible_errors": [
            "line_item_start_day_does_not_align_with_agreement_start_day"
        ]
    },
    {
        "name": "Validate that the invoice numbers provided in the statements starting after the <code>last_settlement_closing_date</code> and the transactions in the <code>transactions_in_open_settlement_period</code> match",
        "description": "Validate that the invoice numbers provided in the <code>statements</code> starting after the <code>last_settlement_closing_date</code> and the invoice numbers in the <code>SUPPLY_CHARGE</code> <code>transactions</code> in the <code>transactions_in_open_settlement_period</code> are the same.",
        "possible_errors": [
            "invoice_numbers_do_not_match"
        ]
    },
    {
        "name": "Validate that the invoice numbers in the statements, with a start date before or on the last settlement closing date, do not match any invoice numbers in the transactions in the open settlement period",
        "description": "Validate that the invoice numbers in the <code>statements</code>, with a <code>bill_period_from_date</code> before or on the <code>last_settlement_closing_date</code>, do not match any <code>associated_invoice_number</code> in the <code>transactions</code> in the <code>transactions_in_open_settlement_period</code>.",
        "possible_errors": [
            "statement_invoice_number_match_found_in_transactions"
        ]
    },
    {
        "name": "Validate that the statement bill_period_from_date matches the corresponding line items start_date",
        "description": "Validate that the <code>bill_period_from_date</code> of each statement matches the <code>start_date</code> of the corresponding line items.",
        "possible_errors": [
            "statement_bill_period_date_does_not_match_line_item_start_date"
        ]
    }
]
Old
{
    "enum": [
        "ADVANCE_SUPPLIER_DYNAMIC_COST",
        "ADVANCE_SUPPLIER_PURCHASING_COST",
        "ADVANCE_SUPPLIER_FIXED_COST",
        "ADVANCE_GRID_FEE",
        "ADVANCE_ENERGY_TAX_STEP_1",
        "ADVANCE_ENERGY_TAX_STEP_2",
        "ADVANCE_ENERGY_TAX_STEP_3",
        "ADVANCE_ENERGY_TAX_STEP_4",
        "ADVANCE_ENERGY_TAX_STEP_5",
        "ADVANCE_ENERGY_TAX_REDUCTION"
    ],
    "x-spec-enum-id": "7188ffad38109cb8",
    "x-enum-descriptions": {
        "ADVANCE_GRID_FEE": "Advance Grid Fee",
        "ADVANCE_ENERGY_TAX_STEP_1": "Advance Energy Tax Step 1",
        "ADVANCE_ENERGY_TAX_STEP_2": "Advance Energy Tax Step 2",
        "ADVANCE_ENERGY_TAX_STEP_3": "Advance Energy Tax Step 3",
        "ADVANCE_ENERGY_TAX_STEP_4": "Advance Energy Tax Step 4",
        "ADVANCE_ENERGY_TAX_STEP_5": "Advance Energy Tax Step 5",
        "ADVANCE_SUPPLIER_FIXED_COST": "Advance Supplier Fixed Cost",
        "ADVANCE_ENERGY_TAX_REDUCTION": "Advance Energy Tax Reduction",
        "ADVANCE_SUPPLIER_DYNAMIC_COST": "Advance Supplier Dynamic Cost",
        "ADVANCE_SUPPLIER_PURCHASING_COST": "Advance Supplier Purchasing Cost"
    }
}
New
[
    {
        "name": "Validate <code>\u2068effective_to\u2069</code> not before <code>\u2068effective_from\u2069</code>",
        "description": "Validates that <code>\u2068effective_to\u2069</code>, if given, is on or later than <code>\u2068effective_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate addons are compatible with their agreement",
        "description": "Validate that addons provided for an agreement are compatible and configured for agreement's product.",
        "possible_errors": [
            "addon_band_not_valid_for_agreement",
            "multiple_addons_in_the_same_family"
        ]
    },
    {
        "name": "Validate that the rate bands given in the rate overrides are valid for the product code",
        "description": "Validate that the rate bands given in the rate overrides exist for the agreement's product.",
        "possible_errors": [
            "invalid_period",
            "rate_band_does_not_exist"
        ]
    },
    {
        "name": "Validate that cost detail bands match product rates",
        "description": "Validate that all bands specified in the monthly advance charge template cost details exist as rate bands on the selected product.",
        "possible_errors": [
            "cost_detail_band_not_on_product"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068effective_to\u2069</code> not before <code>\u2068effective_from\u2069</code>",
        "description": "Validates that <code>\u2068effective_to\u2069</code>, if given, is on or later than <code>\u2068effective_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate addons are compatible with their agreement",
        "description": "Validate that addons provided for an agreement are compatible and configured for agreement's product.",
        "possible_errors": [
            "addon_band_not_valid_for_agreement",
            "multiple_addons_in_the_same_family"
        ]
    },
    {
        "name": "Validate that the rate bands given in the rate overrides are valid for the product code",
        "description": "Validate that the rate bands given in the rate overrides exist for the agreement's product.",
        "possible_errors": [
            "invalid_period",
            "rate_band_does_not_exist"
        ]
    }
]