Skip to main content

Data Import REST API Changelog

This page shows recent changes to Data Import REST API.

Reset

1 July 2026 - Latest

New
{
    "x-enum-descriptions": {
        "cje_pd_high_eac": "CJE: PD - High EAC",
        "cje_pd_post_field_review": "CJE: PD - Post Field Review"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CJE: PD - High EAC": "CJE: PD - High EAC",
        "CJE: PD - Post Field Review": "CJE: PD - Post Field Review"
    }
}
Old
{
    "x-enum-descriptions": {}
}

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
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "sub-meter-billing-enabled",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "cypl.exclude-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "billing.charges-duos",
            "billing.charges-duos-fixed",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke",
            "cypl.similar_category.electric_vehicles",
            "onboarding_journey.outgoing.export.electricity.prime"
        ],
        "x-spec-enum-id": "b5730b8a19da8a93"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "sub-meter-billing-enabled",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "billing.charges-duos",
            "billing.charges-duos-fixed",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke",
            "cypl.similar_category.electric_vehicles",
            "onboarding_journey.outgoing.export.electricity.prime"
        ],
        "x-spec-enum-id": "1541ca1e592932d1"
    }
}
New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "sub-meter-billing-enabled",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "billing.charges-duos",
            "billing.charges-duos-fixed",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke",
            "cypl.similar_category.electric_vehicles",
            "onboarding_journey.outgoing.export.electricity.prime"
        ],
        "x-spec-enum-id": "1541ca1e592932d1"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "sub-meter-billing-enabled",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke",
            "cypl.similar_category.electric_vehicles",
            "onboarding_journey.outgoing.export.electricity.prime"
        ],
        "x-spec-enum-id": "cea1bd78002c6e74"
    }
}

29 June 2026

New
{
    "x-enum-descriptions": {
        "heat_pump_service_plan_customer": "Heat Pump Service Plan Customer"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Heat Pump Service Plan Customer": "Heat Pump Service Plan Customer"
    }
}
Old
{
    "x-enum-descriptions": {}
}

26 June 2026

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
{
    "x-enum-descriptions": {
        "iog_plug_in_hot": "IOG plug in hot"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "IOG plug in hot": "IOG plug in hot"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 June 2026

New
{
    "x-enum-descriptions": {
        "ELECTROVERSE_STAFF_USE_ONLY_REFUND": "ELECTROVERSE_STAFF_USE_ONLY_REFUND",
        "ELECTROVERSE_STAFF_USE_ONLY_CUSTOMER_SERVICE_GESTURE": "ELECTROVERSE_STAFF_USE_ONLY_CUSTOMER_SERVICE_GESTURE"
    }
}
Old
{
    "x-enum-descriptions": {
        "ELECTROVERSE_REFUND": "ELECTROVERSE_REFUND",
        "ELECTROVERSE_CUSTOMER_SERVICE_GESTURE": "ELECTROVERSE_CUSTOMER_SERVICE_GESTURE"
    }
}
New
{
    "x-enum-descriptions": {
        "COSY_SERVICE_PLAN_UPFRONT": "COSY_SERVICE_PLAN_UPFRONT"
    }
}
Old
{
    "x-enum-descriptions": {}
}

23 June 2026

No attributes to display

22 June 2026

New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "scb_lb": "SCB - LB",
        "scb_lc": "SCB - LC",
        "scb_epr": "SCB - EPR"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "SCB - LB": "SCB - LB",
        "SCB - LC": "SCB - LC",
        "SCB - EPR": "SCB - EPR"
    }
}
New
{
    "x-enum-descriptions": {
        "scb_mm": "SCB - MM",
        "scb_si": "SCB - SI"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "SCB - MM": "SCB - MM",
        "SCB - SI": "SCB - SI"
    }
}
Old
{
    "x-enum-descriptions": {}
}
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

19 June 2026

No attributes to display
New
{
    "x-enum-descriptions": {
        "charge_pack": "Charge Pack"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Charge Pack": "Charge Pack"
    }
}
Old
{
    "x-enum-descriptions": {}
}

18 June 2026

No attributes to display
New
{
    "gbr-gas.payment-method": "#/components/schemas/Gbr-gas.payment-methodCharacteristic"
}
New
[
    {
        "$ref": "#/components/schemas/Gbr-gas.meter-point-grid-supply-point-equivalentCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-gas.payment-methodCharacteristic"
    },
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    },
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-gas.meter-point-grid-supply-point-equivalentCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    }
]
New
{
    "x-enum-descriptions": {
        "flex_eligibility_bypass": "ResiFlex: Eligibility Bypass"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ResiFlex: Eligibility Bypass": "ResiFlex: Eligibility Bypass"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ccj_obtained": "CCJ Obtained"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CCJ Obtained": "CCJ Obtained"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
New
{
    "gbr-gas.meter-point-grid-supply-point-equivalent": "#/components/schemas/Gbr-gas.meter-point-grid-supply-point-equivalentCharacteristic"
}
New
[
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-gas.meter-point-grid-supply-point-equivalentCharacteristic"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    },
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    }
]

17 June 2026

No attributes to display

16 June 2026

New
{
    "x-enum-descriptions": {
        "faulty_ppm_meter": "Faulty PPM Meter"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Faulty PPM Meter": "Faulty PPM Meter"
    }
}
Old
{
    "x-enum-descriptions": {}
}

15 June 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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
No attributes to display

12 June 2026

No attributes to display
No attributes to display

11 June 2026

New
{
    "x-enum-descriptions": {
        "energy_safety_after_visit": "Energy Safety: After Visit",
        "energy_safety_before_visit": "Energy Safety: Before Visit"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Energy Safety: After Visit": "Energy Safety: After Visit",
        "Energy Safety: Before Visit": "Energy Safety: Before Visit"
    }
}
Old
{
    "x-enum-descriptions": {}
}

10 June 2026

New
{
    "x-enum-descriptions": {
        "watt_a_save_pub": "Watt a Save Pub"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Watt a Save Pub": "Watt a Save Pub"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke",
            "cypl.similar_category.electric_vehicles",
            "onboarding_journey.outgoing.export.electricity.prime"
        ],
        "x-spec-enum-id": "cea1bd78002c6e74"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke",
            "cypl.similar_category.electric_vehicles"
        ],
        "x-spec-enum-id": "f61ade7209ff27d2"
    }
}

9 June 2026

New
{
    "x-enum-descriptions": {
        "cje_ft_c_0426": "CJE: FT C 0426"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CJE: FT C 0426": "CJE: FT C 0426"
    }
}
Old
{
    "x-enum-descriptions": {}
}

8 June 2026

New
{
    "x-enum-descriptions": {
        "POWER_PACK_CREDIT": "POWER_PACK_CREDIT",
        "CHARGE_PACK_REWARD": "CHARGE_PACK_REWARD"
    }
}
Old
{
    "x-enum-descriptions": {}
}

4 June 2026

New
{
    "x-enum-descriptions": {
        "fte_revoke": "FTE Revoke"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "FTE Revoke": "FTE Revoke"
    }
}
Old
{
    "x-enum-descriptions": {}
}
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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
New
{
    "x-enum-descriptions": {
        "SYSTEM": "System"
    }
}
Old
{
    "x-enum-descriptions": {}
}

3 June 2026

New
{
    "x-enum-descriptions": {
        "charging_streaks_testers": "Charging Streaks Testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Charging Streaks Testers": "Charging Streaks Testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke",
            "cypl.similar_category.electric_vehicles"
        ],
        "x-spec-enum-id": "f61ade7209ff27d2"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke"
        ],
        "x-spec-enum-id": "9a834c80bcff5c8a"
    }
}

2 June 2026

New
{
    "x-enum-descriptions": {
        "2g_north_replacement_required": "2G comms hub in North - requires replacement"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "2G comms hub in North - requires replacement": "2G comms hub in North - requires replacement"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "flapjack_staff_tester": "Flapjack Staff Tester"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Flapjack Staff Tester": "Flapjack Staff Tester"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-validators": [
        {
            "name": "Validate that the market participant exists",
            "description": "Validate that the market participant ID passed in the payload exists in Kraken.",
            "possible_errors": [
                "market_participant_not_found",
                "supply_type_not_recognised"
            ]
        }
    ]
}

1 June 2026

New
{
    "x-enum-descriptions": {
        "property_has_vwan_capable_device": "VWAN at property"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "VWAN at property": "VWAN at property"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "hce_business": "HCE: Business"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "HCE: Business": "HCE: Business"
    }
}
Old
{
    "x-enum-descriptions": {}
}

27 May 2026

New
{
    "x-enum-descriptions": {
        "ct_sce": "CT:SCE"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CT:SCE": "CT:SCE"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "fte_master": "FTE Master",
        "octoplus_scratchcard_testers": "Octoplus Scratchcard Testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "FTE Master": "FTE Master",
        "Octoplus Scratchcard Testers": "Octoplus Scratchcard Testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}

26 May 2026

New
{
    "x-enum-descriptions": {
        "mkt_fte_test": "MKT FTE Test",
        "mkt_fte_test_9": "MKT FTE TEST 9"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "MKT FTE Test": "MKT FTE Test",
        "MKT FTE TEST 9": "MKT FTE TEST 9"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 May 2026

No attributes to display
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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
Old
{
    "maxItems": 1
}

20 May 2026

New
{
    "x-enum-descriptions": {
        "credit_team_enforcement_dropout": "CT : ED",
        "credit_team_enforcement_nofurtheraction": "CT : E.NFA"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CT : ED": "CT : ED",
        "CT : E.NFA": "CT : E.NFA"
    }
}
Old
{
    "x-enum-descriptions": {}
}
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": [
        "Test"
    ],
    "type": "string",
    "x-spec-enum-id": "597ae7d9619c7b2b",
    "x-enum-descriptions": {
        "Test": "Test"
    }
}
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": [
        "Test"
    ],
    "type": "string",
    "x-spec-enum-id": "597ae7d9619c7b2b",
    "x-enum-descriptions": {
        "Test": "Test"
    }
}
New
{
    "x-enum-descriptions": {
        "cje_unconfirmed_address": "CJE: Unconfirmed Address",
        "cje_validated_address_traced": "CJE: Validated Address - Traced",
        "cje_validated_address_confirmed": "CJE: Validated Address - Confirmed"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CJE: Unconfirmed Address": "CJE: Unconfirmed Address",
        "CJE: Validated Address - Traced": "CJE: Validated Address - Traced",
        "CJE: Validated Address - Confirmed": "CJE: Validated Address - Confirmed"
    }
}
Old
{
    "x-enum-descriptions": {}
}

19 May 2026

No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "se_london_evc_marketing": "Marketing - South East & London EVC Campaign"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing - South East & London EVC Campaign": "Marketing - South East & London EVC Campaign"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "hce": "HCE",
        "hce_withdrawn": "HCE: Withdrawn",
        "hce_writ_obtained": "HCE: Writ Obtained",
        "hce_positive_outcome": "HCE: Positive Outcome"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "HCE": "HCE",
        "HCE: Withdrawn": "HCE: Withdrawn",
        "HCE: Writ Obtained": "HCE: Writ Obtained",
        "HCE: Positive Outcome": "HCE: Positive Outcome"
    }
}
Old
{
    "x-enum-descriptions": {}
}

15 May 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-hmc-guarantee",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke"
        ],
        "x-spec-enum-id": "9a834c80bcff5c8a"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke"
        ],
        "x-spec-enum-id": "d2c3620b50595a54"
    }
}
New
{
    "x-enum-descriptions": {
        "credit_team_wist_brand_change": "Credit Team: WIST Brand Change"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: WIST Brand Change": "Credit Team: WIST Brand Change"
    }
}
Old
{
    "x-enum-descriptions": {}
}

14 May 2026

New
{
    "x-enum-descriptions": {
        "issuance_migrated": "Issuance migrated",
        "market_supply_migration_completed": "Market Supply migration: Completed",
        "market_supply_migration_in_progress": "Market Supply migration: In progress"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Issuance migrated": "Issuance migrated",
        "Market Supply migration: Completed": "Market Supply migration: Completed",
        "Market Supply migration: In progress": "Market Supply migration: In progress"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display

13 May 2026

New
{
    "x-enum-descriptions": {
        "fte5": "FTE5",
        "fte10": "FTE10",
        "fte14": "FTE14"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "FTE5": "FTE5",
        "FTE10": "FTE10",
        "FTE14": "FTE14"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "hendon_battery_trial": "Marketing - Hendon battery trial"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing - Hendon battery trial": "Marketing - Hendon battery trial"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CHARGEBACK": "Chargeback"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "rts_phase-out_20260406": "RTS Phase-out action W/C 2026-04-06",
        "rts_phase-out_20260413": "RTS Phase-out action w/c 2026-04-13",
        "rts_phase-out_20260420": "RTS Phase-out action w/c 2026-04-20",
        "rts_phase-out_20260427": "RTS Phase-out action w/c 2026-04-27",
        "rts_phase-out_20260504": "RTS Phase-out action w/c 2026-05-04",
        "rts_phase-out_20260511": "RTS Phase-out action w/c 2026-05-11",
        "rts_phase-out_20260518": "RTS Phase-out action w/c 2026-05-18",
        "rts_phase-out_20260525": "RTS Phase-out action w/c 2026-05-25",
        "rts_phase-out_20260601": "RTS Phase-out action w/c 2026-06-01",
        "rts_phase-out_20260608": "RTS Phase-out action w/c 2026-06-08",
        "rts_phase-out_20260615": "RTS Phase-out action w/c 2026-06-15"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "RTS Phase-out action W/C 2026-04-06": "RTS Phase-out action W/C 2026-04-06",
        "RTS Phase-out action w/c 2026-04-13": "RTS Phase-out action w/c 2026-04-13",
        "RTS Phase-out action w/c 2026-04-20": "RTS Phase-out action w/c 2026-04-20",
        "RTS Phase-out action w/c 2026-04-27": "RTS Phase-out action w/c 2026-04-27",
        "RTS Phase-out action w/c 2026-05-04": "RTS Phase-out action w/c 2026-05-04",
        "RTS Phase-out action w/c 2026-05-11": "RTS Phase-out action w/c 2026-05-11",
        "RTS Phase-out action w/c 2026-05-18": "RTS Phase-out action w/c 2026-05-18",
        "RTS Phase-out action w/c 2026-05-25": "RTS Phase-out action w/c 2026-05-25",
        "RTS Phase-out action w/c 2026-06-01": "RTS Phase-out action w/c 2026-06-01",
        "RTS Phase-out action w/c 2026-06-08": "RTS Phase-out action w/c 2026-06-08",
        "RTS Phase-out action w/c 2026-06-15": "RTS Phase-out action w/c 2026-06-15"
    }
}
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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]

11 May 2026

New
{
    "x-enum-descriptions": {
        "HMC_GUARANTEE_FULL": "Hourly Matching Credit Guarantee Full rate (pence per kWh) for business tariffs",
        "HMC_GUARANTEE_ADVANCE": "Hourly Matching Credit Guarantee Advance rate (pence per kWh) for business tariffs"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "smartflex_multiple_ev_tester": "SmartFlex Multi-EV Tester",
        "smartflex_re_authenticate_device_tester": "SmartFlex ReAuthentication journey tester"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "SmartFlex Multi-EV Tester": "SmartFlex Multi-EV Tester",
        "SmartFlex ReAuthentication journey tester": "SmartFlex ReAuthentication journey tester"
    }
}
No attributes to display

8 May 2026

New
{
    "x-removal-date": "2026-05-25"
}
No attributes to display
No attributes to display

7 May 2026

New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "iog_oe_one": "IOG - OE 1"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "IOG - OE 1": "IOG - OE 1"
    }
}
New
{
    "x-enum-descriptions": {
        "credit_team_payr1": "Credit Team: PayR1",
        "credit_team_payr2": "Credit Team: PayR2",
        "credit_team_payr3": "Credit Team: PayR3",
        "credit_team_payr4": "Credit Team: PayR4",
        "credit_team_payr5": "Credit Team: PayR5"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: PayR1": "Credit Team: PayR1",
        "Credit Team: PayR2": "Credit Team: PayR2",
        "Credit Team: PayR3": "Credit Team: PayR3",
        "Credit Team: PayR4": "Credit Team: PayR4",
        "Credit Team: PayR5": "Credit Team: PayR5"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "iog_oe_one": "IOG - OE 1"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "IOG - OE 1": "IOG - OE 1"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "milly_test_iog": "Milly test IOG"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Milly test IOG": "Milly test IOG"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
No attributes to display
No attributes to display

6 May 2026

New
{
    "x-enum-descriptions": {
        "supply_downgrade": "Supply Downgrade"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Supply Downgrade": "Supply Downgrade"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "iog_oe": "IOG - OE",
        "iog_ohme": "IOG - Ohme",
        "iog_bmw_polestar": "IOG - BMW Group / Polestar"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "IOG - OE": "IOG - OE",
        "IOG - Ohme": "IOG - Ohme",
        "IOG - BMW Group / Polestar": "IOG - BMW Group / Polestar"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "OFGEM_DRS_WRITE_OFF": "OFGEM_DRS_WRITE_OFF"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "credit_team_cwt_visit_completed": "Credit Team: CWT Visit Completed"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: CWT Visit Completed": "Credit Team: CWT Visit Completed"
    }
}
Old
{
    "x-enum-descriptions": {}
}

5 May 2026

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

1 May 2026

New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "cje_vc_0126": "CJE: VC 0126"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "CJE: VC 0126": "CJE: VC 0126"
    }
}

30 April 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced",
            "mhhs_smart",
            "mhhs_bespoke"
        ],
        "x-spec-enum-id": "d2c3620b50595a54"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced"
        ],
        "x-spec-enum-id": "de5e712cee65e220"
    }
}
New
{
    "x-enum-descriptions": {
        "cje_ft_s_0426": "CJE: FT S 0426"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CJE: FT S 0426": "CJE: FT S 0426"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CPO_SMART_CHARGING_TRIAL": "CPO_SMART_CHARGING_TRIAL"
    }
}
Old
{
    "x-enum-descriptions": {}
}

29 April 2026

New
{
    "x-enum-descriptions": {
        "credit_team_ascr": "Credit Team: ASCR"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: ASCR": "Credit Team: ASCR"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
No attributes to display

28 April 2026

No attributes to display

27 April 2026

New
{
    "x-enum-descriptions": {
        "cje_lfpd_0426": "CJE: LFPD 0426",
        "cje_lfpd_c_0426": "CJE: LFPD C 0426"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CJE: LFPD 0426": "CJE: LFPD 0426",
        "CJE: LFPD C 0426": "CJE: LFPD C 0426"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 April 2026

No attributes to display
New
{
    "gbr-electricity.payment-method": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
}
New
[
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    },
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    }
]

23 April 2026

Old
{
    "gbr-electricity.payment-method": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
}
New
[
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    },
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    }
]
No attributes to display
New
{
    "x-enum-descriptions": {
        "aryza_b2b_data": "Aryza B2B Data Clean"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Aryza B2B Data Clean": "Aryza B2B Data Clean"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "REVERSED_WRITE_BACK_INCORRECT_VAT_DOMESTIC": "REVERSED_WRITE_BACK_INCORRECT_VAT_DOMESTIC"
    }
}
Old
{
    "x-enum-descriptions": {}
}

22 April 2026

New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "GBE": "National Grid GBE"
    }
}
New
{
    "x-enum-descriptions": {
        "drive_pack_24_40": "Drive Pack 24th - \u00a340",
        "drive_pack_8th_40": "Drive Pack 8th - \u00a340"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Drive Pack 8th - \u00a340": "Drive Pack 8th - \u00a340",
        "Drive Pack 24th - \u00a340": "Drive Pack 24th - \u00a340"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "octopus_charge_owners": "Marketing - Octopus Charge owners"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing - Octopus Charge owners": "Marketing - Octopus Charge owners"
    }
}
Old
{
    "x-enum-descriptions": {}
}

21 April 2026

New
{
    "x-enum-descriptions": {
        "mhhs_export_smart": "Manual MHHS Export Billed - Smart",
        "mhhs_export_advanced": "Manual MHHS Export Billed - Advanced"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Manual MHHS Export Billed - Smart": "Manual MHHS Export Billed - Smart",
        "Manual MHHS Export Billed - Advanced": "Manual MHHS Export Billed - Advanced"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack",
            "mhhs_advanced"
        ],
        "x-spec-enum-id": "de5e712cee65e220"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack"
        ],
        "x-spec-enum-id": "1a183d7294a6157f"
    }
}

20 April 2026

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

17 April 2026

New
{
    "x-enum-descriptions": {
        "credit_team_isct": "Credit Team: ISCT"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: ISCT": "Credit Team: ISCT"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
No attributes to display

15 April 2026

No attributes to display
New
{
    "x-enum-descriptions": {
        "ccex_banner_test": "CCEX Banner Test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CCEX Banner Test": "CCEX Banner Test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "involuntary_prepayment_fan_enrolled": "Involuntary Prepayment: FAN enrolled"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Involuntary Prepayment: FAN enrolled": "Involuntary Prepayment: FAN enrolled"
    }
}
Old
{
    "x-enum-descriptions": {}
}

14 April 2026

New
{
    "x-enum-descriptions": {
        "credit_team_dialler_alert": "Credit Team: Dialler Alert"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: Dialler Alert": "Credit Team: Dialler Alert"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "scb_sl": "SCB - SL"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "SCB - SL": "SCB - SL"
    }
}
Old
{
    "x-enum-descriptions": {}
}

13 April 2026

New
{
    "x-enum-descriptions": {
        "ELECTRIC_MATCH_CLUB": "ELECTRIC_MATCH_CLUB"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "TENANT_POWER_DISCOUNT": "TENANT_POWER_DISCOUNT"
    }
}
Old
{
    "x-enum-descriptions": {}
}

7 April 2026

New
{
    "x-enum-descriptions": {
        "marketing_g2b_renewal_test": "Marketing G2b renewal test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing G2b renewal test": "Marketing G2b renewal test"
    }
}
Old
{
    "x-enum-descriptions": {}
}

2 April 2026

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

1 April 2026

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

31 March 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product",
            "intelligent_drive_pack"
        ],
        "x-spec-enum-id": "1a183d7294a6157f"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product"
        ],
        "x-spec-enum-id": "e3cb4d03de0ad277"
    }
}
New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup",
            "drive.pack.product"
        ],
        "x-spec-enum-id": "e3cb4d03de0ad277"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup"
        ],
        "x-spec-enum-id": "db0a75e0b387bac6"
    }
}

30 March 2026

New
{
    "x-enum-descriptions": {
        "charging_order": "Charging Order",
        "attachment_of_earnings": "Attachment of Earnings"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Charging Order": "Charging Order",
        "Attachment of Earnings": "Attachment of Earnings"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
No attributes to display

27 March 2026

New
{
    "x-enum-descriptions": {
        "CUSTOM": "Custom"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CUSTOM": "Custom"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "iogo_ev_charging_clash": "Marketing: IOGo EV charging clash",
        "marketing_ev_charge_clash_test": "Marketing: EV Charge clash test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing: EV Charge clash test": "Marketing: EV Charge clash test",
        "Marketing: IOGo EV charging clash": "Marketing: IOGo EV charging clash"
    }
}
Old
{
    "x-enum-descriptions": {}
}

26 March 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity",
            "onboarding_journey.product_is_enabled_for_lookup"
        ],
        "x-spec-enum-id": "db0a75e0b387bac6"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity"
        ],
        "x-spec-enum-id": "73f68b63816a2f48"
    }
}
New
{
    "x-enum-descriptions": {
        "REVERSED_UNLIKELY_TO_RECOVER_WRITE_OFF_DOMESTIC": "REVERSED_UNLIKELY_TO_RECOVER_WRITE_OFF_DOMESTIC"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "hceo_200": "HCEO 200"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "HCEO 200": "HCEO 200"
    }
}
Old
{
    "x-enum-descriptions": {}
}

25 March 2026

New
{
    "x-enum-descriptions": {
        "credit_team_scmcl": "Credit Team: SCMCL"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: SCMCL": "Credit Team: SCMCL"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 March 2026

New
{
    "x-enum-descriptions": {
        "ccex_app_test": "CCEX app test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CCEX app test": "CCEX app test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-removal-date": "2026-04-29"
}

23 March 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat",
            "onboarding_journey.nissan_v2g.import.electricity",
            "onboarding_journey.nissan_v2g.export.electricity"
        ],
        "x-spec-enum-id": "73f68b63816a2f48"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat"
        ],
        "x-spec-enum-id": "88a6d5ea4bb5bdf5"
    }
}
New
{
    "x-enum-descriptions": {
        "fan_club_testers": "Fan Club Testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Fan Club Testers": "Fan Club Testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}

20 March 2026

New
{
    "x-enum-descriptions": {
        "credit_team_pdc1": "Credit Team: PDC1",
        "credit_team_pdc2": "Credit Team: PDC2",
        "credit_team_pdc3": "Credit Team: PDC3"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: PDC1": "Credit Team: PDC1",
        "Credit Team: PDC2": "Credit Team: PDC2",
        "Credit Team: PDC3": "Credit Team: PDC3"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "marketing_london_evc_targeting": "Marketing - London EVC app tile targeting"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing - London EVC app tile targeting": "Marketing - London EVC app tile targeting"
    }
}
Old
{
    "x-enum-descriptions": {}
}

17 March 2026

New
{
    "x-enum-descriptions": {
        "rts_phase-out_20260302": "RTS Phase-out action w/c 2026-03-02",
        "rts_phase-out_20260309": "RTS Phase-out action w/c 2026-03-09",
        "rts_phase-out_20260316": "RTS Phase-out action w/c 2026-03-16",
        "rts_phase-out_20260323": "RTS Phase-out action w/c 2026-03-23",
        "rts_phase-out_20260330": "RTS Phase-out action w/c 2026-03-30"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "RTS Phase-out action w/c 2026-03-02": "RTS Phase-out action w/c 2026-03-02",
        "RTS Phase-out action w/c 2026-03-09": "RTS Phase-out action w/c 2026-03-09",
        "RTS Phase-out action w/c 2026-03-16": "RTS Phase-out action w/c 2026-03-16",
        "RTS Phase-out action w/c 2026-03-23": "RTS Phase-out action w/c 2026-03-23",
        "RTS Phase-out action w/c 2026-03-30": "RTS Phase-out action w/c 2026-03-30"
    }
}
Old
{
    "x-enum-descriptions": {}
}

16 March 2026

New
{
    "x-enum-descriptions": {
        "marketing-dorset-wind": "Marketing - Dorset"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing - Dorset": "Marketing - Dorset"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
New
{
    "gbr-electricity.meter-rate-profile": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
}
New
[
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    },
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.meter-rate-profileCharacteristic"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/SalesChannelCharacteristic"
    },
    {
        "$ref": "#/components/schemas/Gbr-electricity.payment-methodCharacteristic"
    }
]
New
{
    "x-enum-descriptions": {
        "atu_cd": "ATU: CD",
        "atu_dd": "ATU: DD",
        "atu_rr": "ATU: RR",
        "atu_rpa": "ATU: RPA",
        "account_tune_up": "Account Tune Up"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ATU: CD": "ATU: CD",
        "ATU: DD": "ATU: DD",
        "ATU: RR": "ATU: RR",
        "ATU: RPA": "ATU: RPA",
        "Account Tune Up": "Account Tune Up"
    }
}
Old
{
    "x-enum-descriptions": {}
}

13 March 2026

New
{
    "x-enum-descriptions": {
        "GBE": "National Grid GBE"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CHARITY_DONATIONS_POST_AGREEMENT_END_REFUND": "CHARITY_DONATIONS_POST_AGREEMENT_END_REFUND"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "marketing_g2c_renewal_test": "Marketing: G2c renewal test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing: G2c renewal test": "Marketing: G2c renewal test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable",
            "onboarding_journey.outgoing.export.electricity.flat"
        ],
        "x-spec-enum-id": "88a6d5ea4bb5bdf5"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable"
        ],
        "x-spec-enum-id": "c2aa23244090c67d"
    }
}

12 March 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "ECO10",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable"
        ],
        "x-spec-enum-id": "c2aa23244090c67d"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable"
        ],
        "x-spec-enum-id": "4b0e559b1216f546"
    }
}
New
{
    "x-enum-descriptions": {
        "credit_team_litigation_claim_issued": "Credit Team: Litigation Claim Issued"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: Litigation Claim Issued": "Credit Team: Litigation Claim Issued"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "milly_retention_test": "Milly retention test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Milly retention test": "Milly retention test"
    }
}
Old
{
    "x-enum-descriptions": {}
}

11 March 2026

New
{
    "x-enum-descriptions": {
        "marketing_g2a_renewal_test": "Marketing: G2a renewal test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing: G2a renewal test": "Marketing: G2a renewal test"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "credit_team_cobra_oi": "Credit Team: COBRA - OI",
        "credit_team_cobra_om": "Credit Team: COBRA - OM",
        "credit_team_cobra_pi": "Credit Team: COBRA - PI",
        "credit_team_cobra_pm": "Credit Team: COBRA - PM",
        "cosy_heat_pump_owner_cai_install": "Cosy Heat Pump Owner - CAI Install",
        "cosy_heat_pump_owner_oes_install": "Cosy Heat Pump Owner - OES Install"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Team: COBRA - OI": "Credit Team: COBRA - OI",
        "Credit Team: COBRA - OM": "Credit Team: COBRA - OM",
        "Credit Team: COBRA - PI": "Credit Team: COBRA - PI",
        "Credit Team: COBRA - PM": "Credit Team: COBRA - PM",
        "Cosy Heat Pump Owner - CAI Install": "Cosy Heat Pump Owner - CAI Install",
        "Cosy Heat Pump Owner - OES Install": "Cosy Heat Pump Owner - OES Install"
    }
}
Old
{
    "x-enum-descriptions": {}
}

10 March 2026

New
{
    "x-enum-descriptions": {
        "PREPAY_JOB_CARD_BALANCE_CORRECTION": "PREPAY_JOB_CARD_BALANCE_CORRECTION"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "PREPAY_JOB_CARD_BALANCE_CORRECTION": "PREPAY_JOB_CARD_BALANCE_CORRECTION"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "charity_donations_testers": "Charity Donations Testers"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "Charity Donations Testers": "Charity Donations Testers"
    }
}

4 March 2026

New
{
    "x-enum-descriptions": {
        "credit_iet_chatbot": "Credit: IET Chatbot"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit: IET Chatbot": "Credit: IET Chatbot"
    }
}
Old
{
    "x-enum-descriptions": {}
}

3 March 2026

New
{
    "x-enum-descriptions": {
        "credit_sr1": "Credit: SR1"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit: SR1": "Credit: SR1"
    }
}
Old
{
    "x-enum-descriptions": {}
}

27 February 2026

New
{
    "x-validators": [
        {
            "name": "Validate <code>organisation_number</code>",
            "description": "Validate that the given <code>organisation_number</code> has a corresponding organisation registered in the database.",
            "possible_errors": [
                "partner_organisation_does_not_exist"
            ]
        }
    ]
}

25 February 2026

New
{
    "x-enum-descriptions": {
        "power_ups_spen": "Power-Ups SPEN"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Power-Ups SPEN": "Power-Ups SPEN"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "io_go_smb_testers": "IO GO submeter billing testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "IO GO submeter billing testers": "IO GO submeter billing testers"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 February 2026

No attributes to display

23 February 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed",
            "onboarding_journey.cosy.import.electricity.variable"
        ],
        "x-spec-enum-id": "4b0e559b1216f546"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed"
        ],
        "x-spec-enum-id": "fd28c268bea43a07"
    }
}
New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "price-protection.pseudo-default",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed"
        ],
        "x-spec-enum-id": "fd28c268bea43a07"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed"
        ],
        "x-spec-enum-id": "5c22df5b475fa207"
    }
}
New
{
    "x-enum-descriptions": {
        "domestic_to_business_migration_post_migration": "Domestic to Business Migration - Post-migration"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Domestic to Business Migration - Post-migration": "Domestic to Business Migration - Post-migration"
    }
}
Old
{
    "x-enum-descriptions": {}
}

20 February 2026

New
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed",
            "onboarding_journey.io_go.import.electricity.fixed"
        ],
        "x-spec-enum-id": "5c22df5b475fa207"
    }
}
Old
{
    "items": {
        "enum": [
            "charging.use_costing",
            "charging.use_costing_experiment",
            "quoting.use_costing",
            "spayg.default",
            "safeguarding.rollover",
            "cypl.include-in-product-pool",
            "kraken-flex-enabled",
            "cost-of-usage-enabled",
            "dynamic-half-hourly",
            "quasi-two-rate",
            "sub-meter-billing-enabled",
            "billing.charges-duos",
            "billing.charges-rag",
            "billing.charges-seasonal",
            "billing.charges-tnuos",
            "billing.charges-complex",
            "billing.charges-day-ahead-index",
            "billing.charges-fer-power",
            "billing.charges-d2021-data",
            "seg",
            "waive-exit-fee-for-internal-product-changes",
            "waive-exit-fee-when-switching-to",
            "hold-and-archive-bills",
            "cos_loss.skip_contract_objection",
            "product.is_retired",
            "available_products.for_renewal_quote",
            "statement.show_half_hourly_summary_pages",
            "acquisition.domestic_direct",
            "acquisition.domestic_field_sales",
            "acquisition.business_direct",
            "commercially_sensitive.business",
            "exit_fee.business",
            "tracker",
            "tracker.deactivated",
            "agile",
            "agile.deactivated",
            "intelligent.octopus",
            "go",
            "snug",
            "shape_shifters",
            "shape_shifters_agile",
            "shape_shifters_trio",
            "intelligent_octopus_flux",
            "intelligent_octopus_cosy",
            "intelligent_octopus_go_fallback_product",
            "onboarding_journey.tracker",
            "onboarding_journey.io_go",
            "onboarding_journey.io_go.fixed",
            "onboarding_journey.io_go.variable",
            "onboarding_journey.snug",
            "onboarding_journey.ss.agile",
            "onboarding_journey.ss.trio",
            "onboarding_journey.io_flux",
            "onboarding_journey.flux",
            "onboarding_journey.io_cosy",
            "onboarding_journey.go.fixed",
            "onboarding_journey.go.variable",
            "brand.shell",
            "onboarding_journey.agile",
            "onboarding_journey.cosy",
            "onboarding_journey.go",
            "onboarding_journey.outgoing.agile",
            "onboarding_journey.outgoing.fixed",
            "onboarding_journey.seg",
            "tariff_explorer.excluded",
            "onboarding_journey.idp.fixed",
            "onboarding_journey.idp.variable",
            "onboarding_journey.idp.flexible",
            "onboarding_journey.cosy.fixed",
            "onboarding_journey.cosy.variable",
            "onboarding_journey.zero_bills.5_year",
            "onboarding_journey.zero_bills.10_year",
            "onboarding_journey.zero_bills.upgrade",
            "onboarding_journey.io_go.import.electricity.variable",
            "onboarding_journey.io_flux.import.electricity",
            "onboarding_journey.io_flux.export.electricity",
            "onboarding_journey.tracker.import.electricity",
            "onboarding_journey.tracker.import.gas",
            "onboarding_journey.agile.import.electricity",
            "onboarding_journey.snug.import.electricity",
            "onboarding_journey.go.import.electricity.variable",
            "onboarding_journey.flux.import.electricity",
            "onboarding_journey.flux.export.electricity",
            "onboarding_journey.cosy.import.electricity.fixed",
            "onboarding_journey.shape_shifters.import.electricity.trio",
            "onboarding_journey.shape_shifters.import.electricity.agile",
            "onboarding_journey.outgoing.export.electricity.fixed",
            "onboarding_journey.outgoing.export.electricity.agile",
            "onboarding_journey.seg.export.electricity",
            "business.pricing_band_1",
            "business.pricing_band_2",
            "business.pricing_band_3",
            "business.pricing_band_4",
            "onboarding_journey.zero_bills_homes.import.electricity.5_year",
            "onboarding_journey.zero_bills_homes.export.electricity.5_year",
            "onboarding_journey.zero_bills_homes.import.electricity.10_year",
            "onboarding_journey.zero_bills_homes.export.electricity.10_year",
            "onboarding_journey.zero_bills_homes.import.electricity.upgrade",
            "onboarding_journey.zero_bills_homes.export.electricity.upgrade",
            "onboarding_journey.go.import.electricity.fixed"
        ],
        "x-spec-enum-id": "87bfb8cb5e6cf81f"
    }
}

19 February 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 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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
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 contracts are consecutive per supply point",
        "description": "Validate that the contracts provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for contracts provided before the current supply period for the supply point. Contracts 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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
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 contracts are consecutive per supply point",
        "description": "Validate that the contracts provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for contracts provided before the current supply period for the supply point. Contracts 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 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 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 that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]
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 contracts are consecutive per supply point",
        "description": "Validate that the contracts provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for contracts provided before the current supply period for the supply point. Contracts 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 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 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 all contracts have supply points",
        "description": "Validates that contracts provided in the payload have a corresponding supply point.",
        "possible_errors": [
            "agreement_has_no_matching_meter_point"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "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 there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate that payment plans and payment schedules for the same ledger are not both in payload",
        "description": "Validate that if there are payment plans in the payload, there are not also payment schedules on the same ledger because payment plans create a schedule containing all of the planned payments.",
        "possible_errors": [
            "payment_plan_and_payment_schedule_not_allowed_on_same_ledger"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "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 agreements cover the last billed to date",
        "description": "Validate that there is an agreement covering the last billed to date for each supply point.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that, for each meter, a last billed to date has been provided in the appropriate place. For electricity meters, it must be provided on each of the meter's settlement registers. For gas meters, it must be provided on the meter. This validation does not apply to meters with half-hourly billing, or meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date. Note that any prepay vend transactions are not included in the above check.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>. Prepay transactions (those with the <code>to_prepay_meter_serial_number</code> field on the transaction) are filtered out as these are treated separately during account creation.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate next bill due date provided for quarterly billing",
        "description": "Validate that if <code>use_industry_billing</code> is false in the account billing options and the <code>period_length</code> is <code>QUARTERLY</code>, then a <code>next_bill_due_date</code> is provided.",
        "possible_errors": [
            "next_bill_to_date_not_provided_for_quarterly_billing"
        ]
    },
    {
        "name": "Validate account billing options",
        "description": "Validate that account billing options have only been provided for business accounts.",
        "possible_errors": [
            "account_billing_options_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate that prepay transactions target initialised prepay meters",
        "description": "Validate that if <code>current_statement_transactions</code> or <code>historical_statement_transactions</code> target a prepay meter (i.e. has the <code>to_prepay_meter_serial_number</code> field), then a prepay meter with that serial number exists in the payload. A prepay meter is identified in the payload by the presence of <code>prepay_details</code>.",
        "possible_errors": [
            "transactions_target_non_initialised_prepay_meter"
        ]
    },
    {
        "name": "Validate tax exemption for appropriate account type",
        "description": "Validate that the tax exemption is only in place for business accounts.",
        "possible_errors": [
            "tax_exemptions_provided_for_domestic_account"
        ]
    },
    {
        "name": "Validate prepay transfer vend read dates match last billed to date",
        "description": "Validate that the transfer vend read dates match the last billed to date. This only applies to prepay meters.The last billed to date can be either at the account level or the at the meter/register level. Last billed to dates at the meter/register level take precedent over the account level date if both are provided.",
        "possible_errors": [
            "prepay_details_on_fully_billed_meter",
            "transfer_vend_read_date_must_match_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that the tariff type and meter point type match",
        "description": "Validate that the tariff we have on a given contract matches the meter point type. For example, check eco7 (2-rate) meter points don't have single-rate tariffs or vice versa.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_point_type"
        ]
    },
    {
        "name": "Validate bespoke rates",
        "description": "Validate that if bespoke rates have been set the account is business.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate billing address provided",
        "description": "Validate <code>billing_address1</code> and <code>billing_postcode</code> are provided for non-occupier accounts.",
        "possible_errors": [
            "billing_address_not_provided"
        ]
    },
    {
        "name": "Validate current AQ for billable meter point",
        "description": "Check that we have a currently valid AQ for a billable MPRN.",
        "possible_errors": [
            "no_current_or_future_aq_entry_found"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate EACs provided for active registers",
        "description": "Validate that EACs are provided in the <code>eac_history</code> array for each active electricity register. EACs are matched to registers using the <code>tpr</code> field present on both the EAC and register objects.",
        "possible_errors": [
            "missing_eacs_for_active_register_tpr"
        ]
    },
    {
        "name": "Validate that prepay meters are matched to agreements of the correct type",
        "description": "Validate that each prepay meter has a matching agreement on a prepay tariff, and similarly non-prepay meters on non-prepay tariffs. Note that this validation only applies for active meters and agreements.",
        "possible_errors": [
            "tariff_type_does_not_match_meter_type"
        ]
    },
    {
        "name": "Validate each agreement is not effective before the product is available",
        "description": "Ensures that the agreement <code>effective_from</code> is not before the datetime the agreement's product is available from. We check this if Kraken will be responsible for billing before the product is available and the product is a variable or tracker product.",
        "possible_errors": [
            "agreement_effective_from_before_product_available_from"
        ]
    },
    {
        "name": "Validate that all variable products on a contract have start dates after the product start date",
        "description": "Validate that any variable products that are part of a contract only become effective after the product is available.",
        "possible_errors": [
            "agreement_cannot_start_before_product_available"
        ]
    },
    {
        "name": "Validate that no meter points are ending supply in the future",
        "description": "Ensure that all meters points have either ended supply or are not planned for supply to end.",
        "possible_errors": [
            "future_supply_end_date"
        ]
    },
    {
        "name": "Validate that all off supply meter points with meters have a final reading",
        "description": "Ensure that all off supply meter points which have meters have a final reading on their end date.",
        "possible_errors": [
            "no_reading_on_supply_end_date"
        ]
    },
    {
        "name": "Validate that no billable meter points are starting supply in the future",
        "description": "Validate that no billable meter points are set to start supply in the future.",
        "possible_errors": [
            "future_supply_start_date"
        ]
    },
    {
        "name": "Validate that all billable meter points have active meters",
        "description": "Ensure that all meter points that are billable have active meters or have an unmetered measurement class provided in the payload.",
        "possible_errors": [
            "meter_point_with_no_meters"
        ]
    },
    {
        "name": "Validate that at least one of the meter points needs billing",
        "description": "Ensure that at least one of the meter points for this account are billable.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate that a domestic account does not have any business only supply points",
        "description": "Validate that a domestic account does not have supply points with supply types <code>REGOS_EXPORT_CERTIFICATES</code> or <code>ROCS_EXPORT_CERTIFICATES</code> which are business only supply types.",
        "possible_errors": [
            "business_supply_type_on_domestic_account"
        ]
    },
    {
        "name": "Validate business account has account billing options with <code>period_start_day</code> and <code>period_length</code>",
        "description": "Validate that business account's <code>account_billing_options</code> include period start day and period length if <code>account_billing_options</code> is being provided. If <code>account_billing_options</code> is not provided then the defaults of 1 for <code>period_start_day</code> and \"MONTHLY\" for <code>period_length</code> will be used.",
        "possible_errors": [
            "business_account_missing_billing_options"
        ]
    },
    {
        "name": "Validate that  customers provided for business accounts",
        "description": "Validate that at least one customer is provided for business accounts. Customers are needed for business accounts to ensure that meter points can be successfully registered for supply.",
        "possible_errors": [
            "business_account_missing_customers"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    }
]

18 February 2026

New
{
    "x-enum-descriptions": {
        "marketing_renewal_g5_test": "Marketing: renewal G5 TEST",
        "marketing_renewal_g5_control": "Marketing: renewal G5 CONTROL"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Marketing: renewal G5 TEST": "Marketing: renewal G5 TEST",
        "Marketing: renewal G5 CONTROL": "Marketing: renewal G5 CONTROL"
    }
}
Old
{
    "x-enum-descriptions": {}
}