openapi: "3.0.3" info: title: Digital Waste Tracking Receipt API version: "1.0" description: |
This API is for waste receivers, software developers and third party software users. It enables operators of permitted or licensed waste receiving sites to report details of each waste movement arriving at their site. This will be mandatory from October 2026. More information about Digital Waste Tracking is available here:
The API is based on REST principles and uses seven endpoints: POST, PUT and five GET methods that return data in JSON format. It uses standard HTTP error response codes.
The API POST method is used to create a record for a waste movement that has arrived at a waste receiving site. It returns a waste tracking ID and a validation result.
The API PUT method is used to update a waste tracking record using a waste tracking ID to identify the movement. It returns a validation result.
The first GET method is used to retrieve a list of European Waste Codes (EWC).
The second GET method is used to retrieve a list of Hazardous Property Codes (called Special Waste Codes in Scotland).
The third GET method is used to retrieve a list of Disposal or Recovery codes.
The fourth GET method is used to retrieve a list of Container Types.
The fifth GET method is used to retrieve a list of POP (Persistent Organic Pollutant) name codes.
isHazardous
This boolean field indicates whether the waste code is classified as hazardous waste (true) or non-hazardous waste (false). This classification is crucial for regulatory compliance and handling procedures.
entryTypeDesc
This describes the type of entry for the waste code. It indicates whether the entry is:
- Absolute hazardous (always hazardous, marked with *)
- Absolute non-hazardous (never hazardous)
- Dual code entry (hazardous or non-hazardous depending on composition).This classification is important for determining if additional assessment is needed.
chapter
Refers to the first two digits of the six-digit List of Waste (LoW) code. It defines the main category of waste, usually based on the industry or process generating the waste.
Example:
01 – Wastes from mining and physical/chemical treatment of minerals
10 – Wastes from thermal processes
subChapter
Corresponds to the third and fourth digits of the LoW code. It narrows down the category to a more specific process or material within the chapter.
Example:
10 02 – Wastes from the iron and steel industry
content:
application/json:
schema:
type: array
items:
type: object
properties:
code:
type: string
description: |
The EWC code.
example: 010101
isHazardous:
type: boolean
description: True if the EWC code is for hazardous waste, otherwise False. The full list of valid EWC codes is returned by the GET ewc-codes method.
example: true
entryTypeDesc:
type: string
description: The EWC code entry type description.
example: Absolute non-hazardous
chapter:
type: string
description: The EWC code chapter.
example: Wastes resulting from exploration, mining, quarrying, and physical and chemical treatment of minerals
subChapter:
type: string
description: The EWC code sub-chapter.
example: Wastes from mineral excavation
description:
type: string
description: The EWC code description.
example: Wastes from mineral metalliferous excavation
/reference-data/hazardous-property-codes:
get:
description: |
Endpoint used to get a list of hazardous property codes. It returns a code list on 200 success or a 401 on failure.
Example Request
```json
curl --request GET \--url https://waste-tracking.api.defra.gov.uk/reference-data/hazardous-property-codes \
--header "authorization": Bearer eyJraWQiOiJQYnJiZXZvYUF5d1NQcG5KUWlsQXVCT1Q4aVdyNUFcL3RaQkZHaTk5TU5CTT0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIybHRldXNlaHN...
```
responses:
"200":
description: |
A truncated list of hazardous property codes obtained using the GET hazardous-property-codes method
```json
[
{
"code": "HP_1",
"shortDesc": "Explosive",
"longDesc": "Waste that can cause dangerous chemical reactions, producing gas that can damage surroundings (e.g., pyrotechnic or self-reactive waste)."
},
{
"code": "HP_2",
"shortDesc": "Oxidizing",
"longDesc": "Waste that can provide oxygen, causing or contributing to the combustion of other materials."
}, ... cont
```
The response fields: "shortDesc" and "longDesc"
shortDesc (Short Description)
- A concise label or summary of the hazardous property.
- Usually just a few words or a short phrase.
- Intended for quick identification in tables, lists, or UI elements.
Example: "Flammable Liquid" or "Acute Toxicity".
longDesc (Long Description)
- A more detailed explanation of the hazardous property.
- Provides context, definitions, or conditions under which the hazard applies.
- Often includes regulatory references or clarifications.
Key Differences:
UTC is the global time standard and does not observe daylight saving time. BST is UTC+1, used in the UK during daylight saving time (typically from late March to late October). example: UTC - 2025-09-15T12:12:28Z, BST - 2025-09-15T13:12:28+01:00 hazardousWasteConsignmentCode: type: string description: Hazardous waste consignment code. If the EWC is HAZ, then this field is mandatory.England & Wales:
Format- XXXXXX/YYYYY
Where XXXXXX can be a mixture of letters and/or numbers, i.e. alphanumeric.The consignment note code must follow the format- XXXXXX/YYYYY.
The first XXXXXX part is made up of six alphanumeric characters and must be followed by a forward slash /
The YYYYY part is a five alphanumeric character unique identifier of the users' choice (no spaces or symbols).
Scotland
Format- SA, SB or SC followed by a 7-digit number (e.g. SB1234567). Also known as Special Waste Consignment Note
Northern Ireland and Eire:
Format- DA, DB or DC followed by a 7-digit number (e.g. DA5301234)
Business Rules:
| Reason | Reason Code |
|---|---|
| Non-Haz Waste Transfer | NON_HAZ_WASTE_TRANSFER |
| No documentation provided with Waste | NO_DOC_WITH_WASTE |
| Household Wast Recycling Centre Receipt | HWRC_RECEIPT |
Business Rules:
Business Rules:
- Must be six digits (no spaces) and be in the official wasteItem.ewcCode EWC catalog EUR-Lex.Business Rule:
Must be “Gas”, “Liquid”, “Solid”, Powder”, “Sludge” or “Mixed”. Note: The field is case-sensitive, please use the case specified in the description. example: Sludge numberOfContainers: type: integer minimum: 0 nullable: false description: Number of containers for storing, transporting and disposing of waste materials.Business Rule:
This must be a non-negative integer (0 or greater). example: 2 typeOfContainers: type: string nullable: false description: | Containers are receptacles used for storing, transporting and disposing of waste materials. They come in various sizes and types, ranging from small desk-side bins to large industrial skips. Enter the container code, e.g. DRU for Drum.Business Rule:
Must be in typeOfContainers list. example: SKI weight: $ref: "#/components/schemas/weight" containsPops: type: boolean description: | Does the waste consignment contain POPs? This should be a boolean value, i.e. true or false. Persistent organic pollutants (POPs) are chemical substances that do not break down in the environment. They are a danger to human health and the environment. POPs can be present in hazardous and non-hazardous waste. example: true pops: type: object required: - sourceOfComponents properties: sourceOfComponents: type: string enum: [NOT_PROVIDED, PROVIDED_WITH_WASTE, GUIDANCE, OWN_TESTING] description: | Indicates the source of POP component details. - NOT_PROVIDED: Carrier did not provide component details - PROVIDED_WITH_WASTE: Components provided with the waste - GUIDANCE: Components determined from guidance - OWN_TESTING: Components determined from own testingBusiness Rules:
Business Rule:
Optional field. If provided, it must be a valid POP code from the reference list returned by the GET method. The code is validated against reference data to ensure accuracy. example: PFHXS concentration: type: number minimum: 0 exclusiveMinimum: true description: The concentration of the POP in mg per kg, e.g. 50 mg per kg of Chlordane.Business Rule:
Optional field. If provided, must be a positive decimal number (greater than 0) example: 12.5 description: | The list of POP components.Business Rules:
Business Rules:
The official hazardous code list is found here in Appendix C: Waste Classification Technical Guidance WM3 document.
Notes:Business Rule:
If wasteItem.containsHazardous is true then wasteItem.hazardous.hazCodes must be a valid code. example: - HP_5 - HP_10 items: type: string components: type: array items: type: object required: - name properties: name: type: string description: Name of the hazardous component, e.g. Mercury.Business Rule:
Optional field. If provided, must be a valid chemical or biological component name. example: lead concentration: type: number minimum: 0 exclusiveMinimum: true description: The concentration of the hazardous component in milligrams per kilo, e.g. 30mg per kg.Business Rule:
Optional field. If provided, must be a positive numeric value (greater than 0). example: 25.5 disposalOrRecoveryCodes: type: array items: $ref: "#/components/schemas/disposalOrRecoveryCode" carrier: type: object required: - registrationNumber - organisationName - meansOfTransport properties: registrationNumber: type: string nullable: true description: |A waste carrier registration number is a legal requirement for businesses that transport, buy, sell or dispose of waste. This license ensures that waste is handled and transported in a responsible and environmentally friendly manner.
Home Nations Codes:
General Format where 9 is a digit 0-9
Wales NRW:
CBDL9, CBDL99, CBDU999 (1+ digits)i.e. CBDU999999 (Upper Tier) or CBDL999999 (Lower Tier), where "CBD" stands for "Carrier, Broker, Dealer"
England:
CBDL9, CBDL99, CBDU999 (1+ digits)i.e. CBDU999999 (Upper Tier) or CBDL999999 (Lower Tier), where "CBD" stands for "Carrier, Broker, Dealer"
Scotland SEPA:
WCR/R/9999999, SCO/999999, SEA/999999, SNO/999999, SWE/999999, WCR/999999, PCT-X-999, PCT-X-9999, PCT-X-99999, PCT-X-999999 and PCT-X-9999999 (where X = a single capital letter and 9 = a single numeral of between 3 and 7 digits in length).Typically starts with WCR followed by numbers and potentially letters according to the Scottish Environment Protection Agency (SEPA).
Current format – WCR/R/1234567
Previous formats – SCO/123456, SEA/123456, SNO/123456, SWE/123456, WCR/123456, PCT-E-083, PCT-N-0050000
Northern Ireland NI
ROC UT 9,ROC UT 99,ROC UT 999,ROC UT 9999,ROC UT 99999, ROC LT 9, ROC LT 99, ROC LT 999, ROC LT 9999, ROC LT 99999
Include a prefix like ROC followed by UT (Upper Tier) or LT (Lower Tier) and then numbers. Note the spaces are not mandatory. For example: ROC UT 9999 ROCLT9999General Format where 9 is a digit 0-9
example: CBDL6 reasonForNoRegistrationNumber: type: string description: | If you have not provided a registration number, then here you must provide an appropriate reason code from the list below:Business Rules:
Business Rules:
Business Rule:
Must be either Road, Rail, Air, Sea, “Inland Waterway”, Piped or Other. example: Rail brokerOrDealer: type: object required: - organisationName properties: organisationName: type: string description: The broker or dealer organisation name who arranged this transfer. example: Waste Disposal Ltd address: $ref: "#/components/schemas/address" emailAddress: type: string format: email description: The email address of the broker or dealer. example: mailbox@example.co.uk phoneNumber: type: string description: The phone number of the broker or dealer. example: 020 4756 XXXX registrationNumber: type: string description: |A waste broker or dealer who buys or sells waste or arranges the buying, selling or disposal of waste must be registered. Upon registration, a registration number is given to the organisation.
Home Nations Codes:
General Format where 9 is a digit 0-9
Wales NRW:
CBDL999999, CBDU999999i.e. CBDU999999 (Upper Tier) or CBDL999999 (Lower Tier), where "CBD" stands for "Carrier, Broker, Dealer"
England:
CBDL999999, CBDU999999i.e. CBDU999999 (Upper Tier) or CBDL999999 (Lower Tier), where "CBD" stands for "Carrier, Broker, Dealer"
Scotland SEPA:
WCR/R/9999999, SCO/999999, SEA/999999, SNO/999999, SWE/999999, WCR/999999 and PCT-X-999, PCT-X-9999, PCT-X-99999, PCT-X-999999 and PCT-X-9999999 (where X = a single capital letter and 9 = a single numeral of between 3 and 7 digits in length).Typically starts with WCR followed by numbers and potentially letters according to the Scottish Environment Protection Agency (SEPA).
Current format – WCR/R/1234567
Previous formats – SCO/123456, SEA/123456, SNO/123456, SWE/123456, WCR/123456, PCT-E-083, PCT-N-0050000
Northern Ireland (NI)
ROC UT 9,ROC UT 99,ROC UT 999, ROC UT 9999, ROC UT 99999, ROC LT 9, ROC LT 99, ROC LT 999, ROC LT 9999, ROC LT 99999 Include a prefix like ROC followed by UT (Upper Tier) or LT (Lower Tier) and then numbers. Note that spaces are not mandatory. ROC UT 9999 ROCLT9999Note: where 9 is a digit 0-9
example: CBDL6 receiver: type: object required: - siteName - authorisationNumber properties: siteName: type: string description: The name of the site receiving the waste. emailAddress: type: string description: The email address of the organisation receiving the waste. example: mailbox@example.co.uk phoneNumber: type: string description: The UK or Irish phone number of the organisation receiving the waste. example: 020 4756 XXXX authorisationNumber: type: string description: | This is the site's authorisation (permit) number that allows it to accept waste for intended recovery and disposal operation. Only one authorisation number is required per site.Home Nations Codes:
(where 9 is a digit 0-9, X is a letter A-Z)England:
Scotland (SEPA):
Wales (NRW):
Northern Ireland (NRI):
LN/99/# (where # could mean any positive integer and can also have 01,02,---09, 10-99,100-999, etc))
WML 99/# (Could have /T appended) which means a transferLN/99/# (Could have any of the following (/M-modification, /V#-variation, /T-transfer, /C-closure) appended in any combination.
In V#, # means any positive integer. Rationale: Licences have file reference beginning WML and a licence number beginning LN. Additional characters may be appended (/M-modification, /V#-variation, /T-transfer, /C-closure) eg WML 07/61 LN/13/02/M/V2, WML 19/36/T LN/10/35/T/M. Format of licence number when granted following appeal to PAC can vary, eg WML 04/38 PAC/2014/WCL001Further explanation below:
Business Rules:
Business Rule:
Must be positive integers (greater than 0). example: - 343 - 456 - 789 receipt: type: object required: - address properties: address: $ref: "#/components/schemas/receiptAddress" disposalOrRecoveryCode: type: object required: - code - weight properties: code: type: string description: | Disposal and Recovery Codes play a crucial role in categorising the methods by which waste is managed, whether through recovery or disposal processes. These codes (Recovery (R) and Disposal (D)) serve as a standardised system to ensure proper handling and treatment of waste materials. Specifically, they aid in classifying whether waste is to be recovered for further use or disposed of in a safe and environmentally responsible manner.Notes:
Business Rule:
If disposalOrRecoveryCode.code entered, then it should be in the disposalOrRecoveryCode.code listed in EUR-Lex. example: | "R1" weight: $ref: "#/components/schemas/weight" weight: type: object required: - metric - amount - isEstimate properties: metric: type: string enum: [Grams, Kilograms, Tonnes] description: Unit of measurement in which the waste is being accepted.Business Rule:
Must be “Grams”, “Kilograms” or “Tonnes” example: Tonnes amount: type: number minimum: 0 exclusiveMinimum: true description: Total weight of the waste in a unit specified - Grams - Kilograms - TonnesBusiness Rule:
Must be a positive number (greater than 0). Note-Weight in terms of the Waste Item is the total weight of the waste being received.
Weight in terms of the DisposalRecoveryCode is the total weight of the waste being disposed of or recovered for final treatment.
example: 150 isEstimate: type: boolean description: Specifies whether the weight of waste is estimated. This a boolean value, i.e. true for estimated or false for not estimated. example: true validationResult: type: object properties: key: type: string example: wasteItems[0].disposalOrRecoveryCodes errorType: type: string description: | can be one of the following type: - NotProvided: A required field was not provided - NotAllowed: The value provided is not allowed - InvalidType: The value provided is of the wrong type - InvalidFormat: The value provided is not in the correct format - InvalidValue: The value provided is not valid based on the business rules - OutOfRange: The value provided is outside the allowed range - BusinessRuleViolation: The value provided violates a specific business rule. example: NotProvided message: type: string example: Success/Failure description: Waste description is/is not successfully stored. address: type: object required: - postcode properties: fullAddress: type: string description: The business location address of the carrier or broker/dealer. example: 26a Oil Drum Lane, London, UK postcode: type: string description: A valid postcode must be included.Note-
Carriers, Brokers/Dealers accept UK and Irish post codes. example: W12 7ZL receiptAddress: type: object required: - fullAddress - postcode properties: fullAddress: type: string description: This is the address the waste is received at. example: 26a Oil Drum Lane, London, UK postcode: type: string description: A valid postcode must be included.Note-
Carriers, Brokers/Dealers accept UK and Irish post codes. Receivers accept only UK post codes.
Business Rule:
Must be in specified receiptAddress.postcode format. example: W12 7ZL responses: "400": description: Input was not in the correct format. content: application/json: schema: type: object example: { "validation": { "errors": [ { "key": "waste.0.ewcCodes", "errorType": "NotProvided", "message": "\"waste[0].ewcCodes\" is required" }, { "key": "waste.0.wasteDescription", "errorType": "NotProvided", "message": "\"waste[0].wasteDescription\" is required" }, { "key": "receiver.authorisationNumber", "errorType": "Required", "message": "Site authorisation number is required" }, { "key": "receiver.authorisationNumber", "errorType": "InvalidFormat", "message": "Site authorisation number must be in a valid UK format" }, ] } } properties: validation: type: object properties: errors: type: array items: $ref: "#/components/schemas/validationResult"