What Are TILs?
Tariff Information Labels (TILs) are standardised disclosure documents mandated by Ofgem under Standard Licence Condition 31 (SLC 31). Every domestic energy supplier in the United Kingdom must produce a TIL for each tariff they offer to household consumers.
The purpose of a TIL is straightforward: give consumers a consistent, comparable summary of the key terms and costs of an energy tariff. The concept is modelled on the nutrition labels you find on food packaging — a regulated format that lets you compare products at a glance, regardless of which supplier produces them.
TILs were introduced to address a specific market failure. Before their mandate, suppliers presented tariff information in wildly different formats, making like-for-like comparison nearly impossible for consumers and comparison services alike. Ofgem's solution was to require every supplier to produce a label with a fixed set of fields, in a prescribed visual layout.
Regulatory basis. Standard Licence Condition 31 of the Electricity Supply Licence and Gas Supply Licence requires suppliers to provide clear, accessible tariff information to domestic customers. TILs are the primary mechanism for complying with this obligation.
What a TIL Contains
Every TIL must include a specific set of data fields. These fields capture the core commercial terms of a tariff and are designed to make cross-supplier comparison straightforward:
| Field | Description |
|---|---|
| Unit rates | The price per kilowatt-hour for electricity (p/kWh) and gas (p/kWh). For multi-register meters, separate rates apply to each register. |
| Standing charges | A fixed daily charge (p/day) applied regardless of consumption. Covers the cost of maintaining the connection to the grid. |
| Contract type | Whether the tariff is fixed-rate or variable. Fixed tariffs lock in rates for a defined period; variable tariffs can change with notice. |
| Contract end date | For fixed-term tariffs, the date on which the fixed period expires and the customer may be moved to a default tariff. |
| Exit fees | Any charges applied if the customer leaves the tariff before the contract end date. Expressed in pounds sterling. |
| Payment method | The required payment mechanism — typically direct debit, prepayment, or standard credit. |
| Estimated annual costs | The projected yearly cost based on Ofgem's Typical Domestic Consumption Values (TDCVs): 2,700 kWh for electricity and 11,500 kWh for gas. |
| Discounts & additional charges | Any additional discounts (e.g., dual fuel, paperless billing) or surcharges that apply to the tariff. |
| Supplier contact details | Name, phone number, and website of the energy supplier. |
The Typical Domestic Consumption Values are particularly important. They provide the benchmark that makes estimated annual costs comparable across suppliers. Without a standardised consumption assumption, every supplier could use a different baseline, rendering cost comparisons meaningless.
The Data Problem
Here is the paradox: Ofgem mandates a standardised visual format for TILs, but there is no mandated machine-readable format. The regulation prescribes what a TIL must look like on screen or on paper, but says nothing about how the underlying data should be structured, stored, or transmitted.
In practice, this means every supplier shares TIL data in whatever format they choose:
- PDFs emailed to comparison sites on an ad-hoc basis
- CSV files uploaded to an FTP server, with each supplier using different column names
- Excel spreadsheets with custom layouts, macros, and embedded formulas
- Bespoke REST APIs with proprietary schemas
- Manually updated web pages that must be scraped
This creates the N×M bilateral agreement problem. If there are 73 suppliers and 11 comparison sites, the market needs up to 803 individual data-sharing arrangements — each with its own format negotiation, integration code, and maintenance burden.
Every new supplier that enters the market must negotiate and build integrations with every comparison site. Every new comparison site must reverse-engineer or negotiate access to every supplier's proprietary format. The administrative and technical overhead scales multiplicatively.
The cost of non-standardisation. When Ofgem introduced TILs, they solved the consumer-facing comparison problem. But they did not solve the machine-to-machine data exchange problem. ClauseHub exists to close that gap.
How ClauseHub Standardises TILs
ClauseHub maps every field in a TIL to a well-defined JSON:API schema. Suppliers publish their tariff data once, and ClauseHub normalises it into a consistent, machine-readable format that any consumer — comparison site, regulator, fintech, or AI agent — can query via a standard REST API.
The core data model represents a tariff as a JSON:API resource with three main structural components:
- Consumables — an array of rate objects covering unit rates (electricity and gas) and standing charges, each with a value, unit, and fuel type.
- Contract — an object capturing the tariff type (fixed or variable), payment method, exit fees, contract end date, and any discounts.
- Regions — an array of PES area codes indicating where the tariff is available, since pricing varies by distribution region.
Here is what a tariff resource looks like in practice:
// GET /energy/suppliers/octopus/tariffs/t_48f2a9b1 { "data": { "type": "tariffs", "id": "t_48f2a9b1", "attributes": { "name": "Flexible Oct 2025", "consumableRange": "Dual", "status": "active", "version": 3, "consumables": [ { "fuelType": "electricity", "rateType": "unit-rate", "value": 24.50, "unit": "p/kWh" }, { "fuelType": "gas", "rateType": "unit-rate", "value": 6.20, "unit": "p/kWh" }, { "fuelType": "electricity", "rateType": "standing-charge", "value": 46.36, "unit": "p/day" }, { "fuelType": "gas", "rateType": "standing-charge", "value": 31.43, "unit": "p/day" } ], "contract": { "type": "fixed", "endDate": "2026-09-30", "paymentMethod": "direct-debit", "exitFees": { "value": 0, "currency": "GBP" }, "discounts": [ { "name": "Dual fuel discount", "value": -15.00, "unit": "GBP/year" } ] }, "regions": [ { "pesCode": "10", "name": "Eastern" }, { "pesCode": "13", "name": "London" }, { "pesCode": "15", "name": "Southern" } ], "estimatedAnnualCost": { "value": 1568, "currency": "GBP", "tdcv": { "electricityKwh": 2700, "gasKwh": 11500 } }, "createdAt": "2025-10-01T08:00:00Z", "updatedAt": "2025-12-15T14:30:00Z" } }, "links": { "self": "/energy/suppliers/octopus/tariffs/t_48f2a9b1" } }
Every field from the original TIL has a home in this schema. The consumables array captures unit rates and standing charges for each fuel type. The contract object holds the commercial terms. And the regions array links the tariff to its applicable distribution areas.
The key advantage is consistency. Whether a supplier originally published their data in a PDF, a CSV, or a bespoke API, the output from ClauseHub always conforms to this schema. Consumers of the API write one integration and get access to every supplier's data.
Regions and PES Codes
UK electricity is distributed across 14 Distribution Network Operator (DNO) regions, each identified by a PES (Public Electricity Supply) area code. These regions are a legacy of the regional electricity boards that existed before privatisation, and they remain the fundamental geographic unit for electricity pricing.
Tariff pricing varies by region because distribution costs differ depending on the density and topology of the local network. A tariff that costs 24.50 p/kWh in the Eastern region might cost 25.10 p/kWh in the North Scotland region, because the cost of delivering electricity to remote Highland locations is higher than delivering it to suburban Essex.
The 14 DNO regions and their PES codes are:
| PES Code | Region | DNO |
|---|---|---|
10 | Eastern | UK Power Networks |
11 | East Midlands | National Grid |
12 | London | UK Power Networks |
13 | Merseyside & North Wales | SP Energy Networks |
14 | West Midlands | National Grid |
15 | North Eastern | Northern Powergrid |
16 | North Western | Electricity North West |
17 | Northern | Northern Powergrid |
18 | Scottish Hydro | SSEN |
19 | Scottish Power | SP Energy Networks |
20 | South Eastern | UK Power Networks |
21 | Southern | SSEN |
22 | South Wales | National Grid |
23 | South Western | National Grid |
ClauseHub maps each tariff to its applicable regions. When a supplier publishes a tariff, they specify which PES codes it covers. Consumers can then filter tariffs by region — for example, retrieving all fixed-rate electricity tariffs available in the London area (PES code 12).
Gas regions are different. Gas distribution uses a separate set of regions (Local Distribution Zones) managed by the gas distribution networks. However, for TIL purposes, pricing is typically mapped to the electricity PES regions for consumer simplicity.
Immutable Versioning
Energy tariffs change. Suppliers update unit rates, adjust standing charges, modify exit fees, or extend contract dates. In the current market, when a supplier updates a tariff, the old version typically vanishes — overwritten in a database, replaced on a website, or superseded by a new PDF.
ClauseHub takes a fundamentally different approach. When a supplier updates a tariff, ClauseHub does not overwrite the existing record. Instead, it creates a new version. The previous version is preserved exactly as it was, with its original data, its original timestamp, and its original version number.
This immutable versioning model has three important consequences:
- Regulatory audit. Ofgem and other regulators can query the full history of any tariff — every rate change, every contract modification, every update — with a single API call to the
/versionsendpoint. - Consumer protection. If a dispute arises about what terms a customer signed up to, the historical record exists and is tamper-proof. The version that was active on a given date can be retrieved precisely.
- Market analysis. Researchers and analysts can track how tariffs evolve over time, identify pricing trends, and detect anomalies across the market.
Every resource in the ClauseHub API carries a version field that increments with each change. Updates insert new rows; deletes create archived versions. Nothing is ever physically deleted.
# Retrieve all versions of a tariff GET /energy/suppliers/octopus/tariffs/t_48f2a9b1/versions # Returns versions 3, 2, 1 — newest first # Each version contains the complete tariff state at that point in time
Try It Yourself
The ClauseHub Energy API exposes a public search endpoint that requires no authentication. You can query live tariff data right now, without signing up or obtaining an API key.
# Public search — no authentication required GET https://api.clausehub.net/energy/tariffs/search/public # Filter by region (London, PES code 12) GET https://api.clausehub.net/energy/tariffs/search/public?filter[region]=12 # Filter by tariff type and fuel GET https://api.clausehub.net/energy/tariffs/search/public?filter[type]=fixed&filter[fuel]=electricity
The public search endpoint returns the same JSON:API response format as the authenticated endpoints, with cursor-based pagination via links.next. It is rate-limited but freely accessible.
For full API access — including supplier endpoints, version history, and bulk operations — you can request an API key. Authentication uses Supabase JWT tokens, and client libraries are available for Python and TypeScript.
Explore the full API. The complete OpenAPI specification is available at GET /schema. You can also browse the API documentation for endpoint references, response formats, and error handling.
TILs are one of the most important consumer-facing tools in the UK energy market. By standardising the underlying data into a machine-readable format, ClauseHub makes it possible for comparison sites, regulators, fintechs, and AI agents to build on top of TIL data without the friction of bilateral data agreements. One API, one schema, every supplier.