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:

Methods

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.

Note- This API specification is currently in Public Beta stage. termsOfService: https://defra.github.io/waste-tracking-service/production/api-terms-of-service/ contact: name: Receipt of Waste API Support email: WasteTracking_Developers@defra.gov.uk servers: - url: https://waste-tracking.api.defra.gov.uk description: Production environment - url: https://waste-tracking.integration.api.defra.gov.uk description: External test environment paths: /movements/receive: post: description: | Endpoint used when waste is received and the receiver submits a waste movement. A waste tracking ID is returned in a 201 response when the movement is successfully stored. When the movement is stored successfully, the API returns a `201 Created` response containing a Waste Tracking ID and any validation warnings. requestBody: $ref: '#/components/requestBodies/receiveMovementRequest' responses: '201': description: Success- The waste movement has been stored. headers: service-charge-expiry-date: $ref: '#/components/headers/service-charge-expiry-date' content: application/json: schema: type: object properties: wasteTrackingId: type: string description: Globally unique identifier of the movement. This ID should be stored and used for any subsequent updates of the movement. It is returned in the response body when a POST request is successful, i.e. return code 201. example: 25HRA0B2 validation: type: object properties: warnings: type: array items: $ref: '#/components/schemas/validationResult' examples: noWarnings: summary: Waste receipt created without warnings value: wasteTrackingId: 25HRA0B2 validation: warnings: [] withWarning: summary: Waste receipt created with a validation warning value: wasteTrackingId: 25HRA0B2 validation: warnings: - key: wasteItems[0].disposalOrRecoveryCodes errorType: NotProvided message: Disposal or recovery codes are recommended '400': $ref: '#/components/responses/400' '402': $ref: '#/components/responses/402' '401': $ref: '#/components/responses/401' /movements/{wasteTrackingId}/receive: put: description: | Endpoint used to update a waste movement record that has already been submitted. It uses the waste tracking ID (wasteTrackingId) returned when the POST endpoint successfully submitted the original waste movement record. The waste tracking ID must be used in the URL path. parameters: - name: wasteTrackingId in: path required: true description: The globally unique id of the movement. example: 25HRA0B2 schema: type: string requestBody: $ref: '#/components/requestBodies/receiveMovementRequest' required: true responses: '200': description: The waste movement receipt has been updated. headers: service-charge-expiry-date: $ref: '#/components/headers/service-charge-expiry-date' content: application/json: schema: type: object properties: validation: type: object properties: warnings: type: array items: $ref: '#/components/schemas/validationResult' examples: noWarnings: summary: Waste receipt updated without warnings value: validation: warnings: [] withWarning: summary: Waste receipt updated with a validation warning value: validation: warnings: - key: wasteItems[0].disposalOrRecoveryCodes errorType: NotProvided message: Disposal or recovery codes are recommended '400': $ref: '#/components/responses/400' '402': $ref: '#/components/responses/402' '404': description: Movement not found. The waste tracking ID used is not correct. '401': $ref: '#/components/responses/401' /production-approval-tests: post: description: | Submit one or more Production Approval Test scenarios for validation.
Each scenario is validated independently. The response contains a result for every scenario submitted.
A `200 OK` response means that the request was processed. It does not mean that every scenario passed. Check the `status` and `message` returned for each result.
The same Waste Tracking ID may be used for different scenario IDs, but each scenario ID may appear only once in a request.
Rejection scenarios C01 and H02 cannot be submitted through this endpoint because they do not generate Waste Tracking IDs.
This endpoint is available in the External Test environment only. It is not available in the Production environment. servers: - url: https://waste-tracking.integration.api.defra.gov.uk description: External Test environment requestBody: required: true description: "A json array containing one or more Production Approval Test scenario submissions. \n" content: application/json: schema: type: array title: ProductionApprovalTestRequest minItems: 1 items: $ref: '#/components/schemas/patScenario' example: - scenarioId: R01 wasteTrackingId: 25HRA0B2 - scenarioId: R02 wasteTrackingId: 25XYZ122 responses: '200': description: | The Production Approval Test scenarios were processed successfully. A result is returned for every scenario submitted. Review the `status` and `message` in each result to determine whether an individual scenario passed or failed. content: application/json: schema: $ref: '#/components/schemas/patSubmissionResponse' example: submissionId: 6a75b4bbe8624f6a79240d78 results: - scenarioId: R01 wasteTrackingId: 25HRA0B2 status: Pass message: '' - scenarioId: R02 wasteTrackingId: 25XYZ122 status: Fail message: Expected more than 1 waste item for R02, found 1 '400': description: | The Production Approval Test request failed validation. content: application/json: schema: $ref: '#/components/schemas/validationErrorResponse' examples: unsupportedScenarioId: summary: Unsupported PAT scenario ID value: validation: errors: - key: 0.scenarioId errorType: InvalidValue message: '"[0].scenarioId" must be one of [R01, R02, R03, R04, R05, R07, C02, B01, P01, H01, H03, X01]' missingWasteTrackingId: summary: Waste Tracking ID not provided value: validation: errors: - key: 0.wasteTrackingId errorType: NotProvided message: '"[0].wasteTrackingId" is required' duplicateScenarioId: summary: Scenario ID included more than once value: validation: errors: - key: ProductionApprovalTestRequest errorType: InvalidValue message: '"ProductionApprovalTestRequest" contains a duplicate scenarioId value' '401': description: | Unauthorized. Authentication is required or the access token is missing, invalid or expired. content: application/json: schema: type: object required: - message properties: message: type: string description: Details explaining why authentication failed. example: Unauthorized summary: Endpoint to be used to run the Production Approval Tests for one or more Waste Tracking IDs. operationId: postProductionapprovaltests tags: - production-approval-tests /reference-data/ewc-codes: get: description: "Endpoint used to get a list of EWC codes. On success 200, it returns a code list including a boolean\ \ value for the waste type, i.e. Hazardous equals true/false. It returns a 401 on failure.

\n\ Example Request\n```json\ncurl --request GET \\ --url https://waste-tracking.api.defra.gov.uk/reference-data/ewc-codes\ \ \\\n --header \"authorization\": Bearer eyJraWQiOiJQYnJiZXZvYUF5d1NQcG5KUWlsQXVCT1Q4aVdyNUFcL3RaQkZHaTk5TU5CTT0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIybHRldX...\n\ ```\n" responses: '200': description: "A truncated list of EWC codes obtained using the GET ewc-codes method

\n```json\n[ \n\ {\n \"code\": \"010101\",\n \"isHazardous\": false,\n \"entryTypeDesc\": \"Absolute non-hazardous\",\n \"\ chapter\": \"Wastes resulting from exploration, mining, quarrying, and physical and chemical treatment of minerals\"\ ,\n \"subChapter\": \"Wastes from mineral excavation\",\n \"description\": \"Wastes from mineral metalliferous\ \ excavation\"\n},\n{\n \"code\": \"010102\",\n \"isHazardous\": false,\n \"entryTypeDesc\": \"Absolute non-hazardous\"\ ,\n \"chapter\": \"Wastes resulting from exploration, mining, quarrying, and physical and chemical treatment\ \ of minerals\",\n \"subChapter\": \"Wastes from mineral excavation\",\n \"description\": \"Wastes from mineral\ \ non-metalliferous excavation\"\n}, ... cont\n```\nThe response fields: \"isHazardous\", \"entryTypeDescription\"\ , \"chapter\" and \"subChapter\" correspond directly to the hierarchical structure of the waste classification\ \ system for EWC codes.

\n

isHazardous
\nThis 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.

\nentryTypeDesc
\nThis describes the type of entry for\ \ the waste code. It indicates whether the entry is:
\n- Absolute hazardous (always hazardous, marked with\ \ *)
\n- Absolute non-hazardous (never hazardous)
\n- Dual code entry (hazardous or non-hazardous depending\ \ on composition).This classification is important for determining if additional assessment is needed.

\n\

chapter
\nRefers 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.

\nExample:

\n\ 01 – Wastes from mining and physical/chemical treatment of minerals
\n10 – Wastes from thermal processes

\n\

\n

subChapter
\nCorresponds 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.

\nExample:

\n10 02 – Wastes\ \ from the iron and steel industry

\n" content: application/json: schema: type: array items: type: object properties: code: type: string description: | The EWC code.
example: 4161 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 '401': $ref: '#/components/responses/401' /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.

content: application/json: schema: type: array items: type: object properties: code: type: string description: The hazardous property code. The full list of valid hazardous property codes is returned by the GET hazardous-property-codes method. example: HP_1 shortDesc: type: string description: The hazardous property code short description. example: Explosive longDesc: type: string description: The hazardous property code long description. example: Waste that can cause dangerous chemical reactions, producing gas that can damage surroundings (e.g., pyrotechnic or self-reactive waste) '401': $ref: '#/components/responses/401' /reference-data/disposal-or-recovery-codes: get: description: | Endpoint used to get a list of disposal or recovery codes.
Note: The field in the specification is case-sensitive, please use the case specified for the code.

Example Request ```json curl --request GET \--url https://waste-tracking.api.defra.gov.uk/reference-data/disposal-or-recovery-codes \ --header "authorization": Bearer eyJraWQiOiJQYnJiZXZvYUF5d1NQcG5KUWlsQXVCT1Q4aVdyNUFcL3RaQkZHaTk5TU5CTT0iLCJhbGciOiJSUzI1NiJ9... ``` responses: '200': description: "A truncated list of disposal or recovery codes obtained using the GET disposal-or-recovery Codes method

\n\ Success\n```json\n[\n{\n \"code\": \"R1\",\n \"isNotRecoveryToFinalProduct\": true,\n \"description\": \"Use\ \ principally as a fuel or other means to generate energy\"\n},\n{\n \"code\": \"R2\",\n \"isNotRecoveryToFinalProduct\"\ : false,\n \"description\": \"Solvent reclamation/regeneration\" \n}, ... cont\n\ ```\nThe field isNotRecoveryToFinalProduct is a boolean flag that indicates whether a specific recovery\ \ operation does not result in the manufacture of a new final product.

\nIf the value is true, it means\ \ that the recovery process is focused on reclaiming materials or energy without producing a new marketable product.\ \ If false, it indicates that the recovery operation leads to the creation of a new final product that can be\ \ used or sold.

\n" content: application/json: schema: type: array items: type: object properties: code: type: string description: "The disposal or recovery code (D1-D15 for disposal operations, R1-R13 for recovery operations).\ \ \nThe full list of valid disposal or recovery codes is returned by the GET disposal-or-recovery-codesmethod.\n" example: R1 isNotRecoveryToFinalProduct: type: boolean description: True if the disposal or recovery code is not considered recovery to a final product, otherwise False. example: true description: type: string description: The disposal or recovery code description. example: Use principally as a fuel or other means to generate energy '401': $ref: '#/components/responses/401' /reference-data/container-types: get: description: "Endpoint used to get a list of container types. It returns a code list on 200 success, or a 401\ \ on failure.
\n Note: The field returned by the method is case-sensitive, please use the case specified\ \ for the code.

\nExample Request\n ```json\ncurl --request GET \\--url https://waste-tracking.api.defra.gov.uk/reference-data/container-types\ \ \\\n--header \"authorization\": Bearer eyJraWQiOiJQYnJiZXZvYUF5d1NQcG5KUWlsQXVCT1Q4aVdyNUFcL3RaQkZHaTk5TU5CTT0iLCJhbGciOiJSUzI1NiJw...\n\ ```\n" responses: '200': description: | A truncated list of container type codes obtained using the GET container-types method

Success ```json [ { "code": "BAG", "description": "Bag / Sack (e.g. rubble bag, refuse sack)" }, { "code": "BAL", "description": "Bale" }, { "code": "BOX", "description": "Box / Carton / Crate" }, ... cont ``` content: application/json: schema: type: array items: type: object properties: code: type: string description: The container type. The full list of valid container type codes is returned by the GET container-types method example: WBI description: type: string description: The container type description. example: Wheelie Bin (any size) '401': $ref: '#/components/responses/401' /reference-data/pop-names: get: description: | Endpoint used to get a list of POP (Persistent Organic Pollutant) name 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/pop-names \ --header "authorization": Bearer eyJraWQiOiJQYnJiZXZvYUF5d1NQcG5KUWlsQXVCT1Q4aVdyNUFcL3RaQkZHaTk5TU5CTT0iLCJhbGciOiJSUzI1NiJ9... ``` responses: '200': description: | A truncated list of POP names obtained using the GET pop-names method

Success

```json [ { "code": "END", "chemicalName": "Endosulfan" }, { "code": "HCBD", "chemicalName": "Hexachlorobutadiene" }, { "code": "PCNS", "chemicalName": "Polychlorinated naphthalenes" }, ... cont ``` content: application/json: schema: type: array items: type: object properties: code: type: string description: The POP name. The full list of valid POP names is returned by the GET pop-names method. example: END chemicalName: type: string description: The POP chemical name. example: Endosulfan '401': $ref: '#/components/responses/401' components: headers: service-charge-expiry-date: description: The date and time when the service charge payment expires. The API uses the UTC ISO 8601 and BST standards for machine-readable dates and times.

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). schema: type: string format: date-time example: '2025-09-15T12:12:28' requestBodies: receiveMovementRequest: description: Details of the waste movement to be created or updated. The mandatory parameters to be included in the API call are the apiCode, dateTimeReceived, carrier, wasteItems, receiver and receipt. required: true content: application/json: schema: type: object required: - apiCode - dateTimeReceived - carrier - wasteItems - receiver - receipt properties: apiCode: type: string format: uuid description: This is a unique sixteen byte identifier for the receiving organisation. An organisation can have one or more apiCodes. The apiCodes for an organisation are produced and managed by that organisation. example: ba6eb330-4f7f-11eb-a2fb-67c34e9ac07c dateTimeReceived: type: string format: date-time description: | This is the date and exact time waste was received at the site. This API uses the UTC ISO 8601 and BST standards for machine-readable dates and times.

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: '2025-09-15T12:12:28' 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)

More information here

Business Rules:

example: CJ32LE/A0001 reasonForNoConsignmentCode: type: string enum: - NON_HAZ_WASTE_TRANSFER - NO_DOC_WITH_WASTE - HWRC_RECEIPT description: If you have not provided a hazardous waste consignment code, then there are three reason codes you can choose to provide. See the table below.
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
Note: The field is case-sensitive, please use the case for the code specified in the table.

Business Rules:

example: NO_DOC_WITH_WASTE yourUniqueReference: type: string description: This could be a unique weighbridge ticket number, waste transfer note number etc. example: wTBrdgAA020 otherReferencesForMovement: type: array items: type: object required: - label - reference properties: label: type: string minLength: 1 description: The type/label of the reference (e.g., 'PO Number', 'Waste Ticket', 'Haulier Note') example: PO Number reference: type: string minLength: 1 description: The actual reference value example: PO-12345 description: Optional array of label-reference pairs for additional tracking information example: - label: PO Number reference: PO-12345 - label: Waste Ticket reference: WT-67890 - label: Haulier Note reference: HN-11111 specialHandlingRequirements: type: string maxLength: 5000 description: "Required when abnormal hazardous waste and some non-hazardous waste contains harmful chemical,\ \ biological or physical characteristics that require some special handling to prevent harm. \n" example: The waste must be fully inspected by the waste handler according to the Hazardous waste consignment and or EWC codes provided. wasteItems: type: array minItems: 1 items: $ref: '#/components/schemas/wasteItem' carrier: $ref: '#/components/schemas/carrier' brokerOrDealer: $ref: '#/components/schemas/brokerOrDealer' receiver: $ref: '#/components/schemas/receiver' receipt: $ref: '#/components/schemas/receipt' schemas: patScenario: type: object additionalProperties: false required: - scenarioId - wasteTrackingId properties: scenarioId: type: string enum: - R01 - R02 - R03 - R04 - R05 - R07 - C02 - B01 - P01 - H01 - H03 - X01 description: The identifier of the Production Approval Test scenario being submitted for validation.
The scenario identifier is included in the corresponding result returned by the API.

Business Rules:

example: R01 wasteTrackingId: type: string description: The waste tracking ID associated with the scenario.

Business Rules:

example: 25HRA0B2 patResult: type: object properties: scenarioId: type: string enum: - R01 - R02 - R03 - R04 - R05 - R07 - C02 - B01 - P01 - H01 - H03 - X01 description: | The identifier of the Production Approval Test scenario that was validated. example: R01 wasteTrackingId: type: string description: The Waste Tracking ID submitted for the Production Approval Test scenario. example: 26BHUT6U status: type: string enum: - Pass - Fail description: | The result of validating the receipt against the requirements of the PAT scenario.
- `Pass`: The receipt satisfies the scenario requirements.
- `Fail`: The receipt does not satisfy one or more scenario requirements.
Values are case-sensitive. example: Pass message: type: string description: | Additional information about the validation result.
For a failed scenario, the message explains why the receipt did not satisfy the scenario requirements.
The value is an empty string when the scenario passes. patSubmissionResponse: type: object properties: submissionId: type: string description: | A unique identifier for this PAT validation submission.
Treat this value as an opaque identifier. Do not attempt to derive information from its format. example: 6a75b4bbe8624f6a79240d78 results: type: array minItems: 1 description: The validation results for the submitted PAT scenarios.
One result is returned for each scenario in the request. Check the`status` and `message` for every result. items: $ref: '#/components/schemas/patResult' example: submissionId: 6a75b4bbe8624f6a79240d78 results: - scenarioId: R01 wasteTrackingId: 26BHUT6U status: Pass message: '' - scenarioId: R02 wasteTrackingId: 26BHUT6U status: Fail message: Expected more than 1 waste item for R02, found 1 wasteItem: type: object required: - ewcCodes - wasteDescription - physicalForm - typeOfContainers - numberOfContainers - weight - containsPops - containsHazardous properties: ewcCodes: type: array items: type: string maxItems: 5 description: "An EWC code is a six digit code listed in the European Waste Catalogue (EWC) and the List of Wastes\ \ Regulations 2005 for the UK. \nThe EWC catalog is a list of waste types which categorise waste based on a combination\ \ of what they are and the process or activity that produces them.

\nNotes:
\n- users must already\ \ know their correct code before using the API
\n- the GET ewc-codes method returns a reference for all EWC\ \ codes
\n- there is no maximum number of waste items that can be entered per movement, but there is\ \ a maximum of five EWC codes that can be applied to each waste item, thus allowing for multiple EWC codes\ \ on some edge cases e.g. Clinical Waste

\nTo find an EWC code for a particular waste item, refer to the\ \ official Waste Classification Technical Guidance WM3 document.

\nPOPs can also be present in hazardous and\ \ non-hazardous waste. See wasteItem.containsPops and wasteItem.pops for more information.
\n

Business Rules:

\n - Must be six digits (no spaces) and be in the official wasteItem.ewcCode\ \ EWC catalog EUR-Lex.
\n - From one to a maximum of five codes per movement can be provided.

\n" example: - '200108' wasteDescription: type: string description: A detailed description of a specific waste material including its physical characteristics, composition and any potential hazards associated with it. example: Basic mixed construction and demolition waste, this includes recyclable house bricks, gypsum plaster and slates. physicalForm: type: string enum: - Gas - Liquid - Solid - Powder - Sludge - Mixed description: This is the form of the waste. This could be a Gas, Liquid, Solid, Powder, Sludge or Mixed.

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.

\nNotes:
\n- A list of all container types can be obtained using the\ \ GET container-types method.
\n- The field is case-sensitive, please use the case specified for the code returned\ \ by the GET method.\n
\n

Business Rule:

\nMust be in typeOfContainers\ \ list.\n" 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.\nPersistent\ \ 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. \n" 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 testing

Note: The field is case-sensitive, please use the case specified in the list above.

Business Rules:

example: PROVIDED_WITH_WASTE components: type: array items: type: object required: - code properties: code: type: string description: "The code of the POP (Persistent Organic Pollutant) component. \nNotes:
\n- A list\ \ of POP names and codes can be obtained using the GET pop-names method.
\n- The field is case-sensitive,\ \ please use the case specified for the code returned by the GET method.\n

Business\ \ Rule:

\nOptional 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.\n" example: PFHXS concentration: type: number minimum: 0 exclusiveMinimum: true nullable: true description: | The concentration of the POP component in milligrams per kilogram (mg/kg).
Where an exact concentration is known, provide the measured value without a `concentrationOperator`.
Where only a threshold or limit is known, provide the numeric threshold in this field and use concentrationOperator to indicate whether the actual concentration is less than or greater than that value.

Business Rules:

example: 12.5 concentrationOperator: type: string enum: - < - '>' description: "Indicates how the actual concentration compares with the value provided in `concentration`.\ \ \n- `<` means the actual concentration is less than the supplied value.\n- `>` means the actual concentration\ \ is greater than the supplied value.\n

Business Rules:

\n\ \n" example: '>' description: | The list of POP components.

Business Rules:

containsHazardous: type: boolean description: Does the waste consignment contain Hazardous Properties, true or false?. This is a mandatory indication. This is a boolean value, i.e. true (contains hazardous properties) or false (does not contain hazardous properties). example: true hazardous: type: object required: - sourceOfComponents properties: sourceOfComponents: type: string enum: - NOT_PROVIDED - PROVIDED_WITH_WASTE - GUIDANCE - OWN_TESTING description: | Indicates the source of hazardous 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 testing

Business Rules:

example: PROVIDED_WITH_WASTE hazCodes: type: array description: "Hazardous property codes are a list of codes that identify the hazardous waste and the potential\ \ risks associated with waste materials, guiding their safe transportation and handling protocols. Common\ \ types could include codes, HP_1 - HP_15. The format of the code to be entered is HP_'number', e.g. HP_1\ \ for Explosive, HP_2 for Oxidizing, etc. \n

The official hazardous code list is found here in Appendix\ \ C:\n Waste Classification Technical Guidance WM3 document.

\n Notes:
\n\n

Business Rule:

\n If provided, each value must be a valid hazardous property\ \ code returned by the reference-data endpoint. Codes are case-sensitive. \n" 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, it must be a valid chemical or biological component name. example: lead concentration: type: number minimum: 0 exclusiveMinimum: true nullable: true description: "The concentration of the Hazardous component in milligrams per kilogram (mg/kg).
\n-\ \ Where an exact concentration is known, provide the measured value without a `concentrationOperator`.\n\ - Where the concentration is known only to have exceeded a threshold, provide the numeric threshold\ \ in this field and use `>` as the `concentrationOperator`.\n

Business Rules:

\ \ \n\n" example: 12.5 concentrationOperator: type: string enum: - '>' description: | Indicates that the actual concentration of the hazardous component is greater than the value supplied in `concentration`.
The only accepted value is `>`.

Business Rules:

  • This field is optional.
  • If provided, concentration is required and must contain a number.
  • Do not provide an operator when concentration is null.
  • The only accepted value is >.
  • The operators '>=' and '<=' are not accepted.
  • example: '>' 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.

    \n

    Home Nations Codes:

    \n

    General Format where 9 is a digit 0-9

    \n\ \

    Wales NRW:

    \n CBDU999 (3+ digits)\n

    i.e. CBDU999 (Upper Tier) or CBDL999 (Lower Tier), where \"CBD\"\ \ stands for \"Carrier, Broker, Dealer\"

    \n

    England:

    \n\ \ CBDU999 (3+ digits)\n

    i.e. CBDU999 (Upper Tier) or CBDL999 (Lower Tier), where \"CBD\" stands for \"Carrier, Broker, Dealer\"

    \ \ \n

    Scotland SEPA:

    \n 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).\n

    Typically\ \ starts with WCR followed by numbers and potentially letters according to the Scottish Environment Protection\ \ Agency (SEPA).

    \n

    Current format – WCR/R/1234567

    \n

    Previous formats – SCO/123456, SEA/123456,\ \ SNO/123456, SWE/123456, WCR/123456, PCT-E-083, PCT-N-0050000

    \n

    Northern Ireland\ \ NI

    \n

    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

    \n 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:\n ROC UT 9999\n \ \ ROCLT9999

    \n

    General Format where 9 is a digit 0-9

    \n" example: CBDL999 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:\n\n

    Business Rules:

    \n\ \n" example: ON_SITE organisationName: type: string description: The business name of the carrier. example: Waste Carriers Lite Ltd address: $ref: '#/components/schemas/address' emailAddress: type: string format: email description: The email address of the carrier. example: mailbox@example.co.uk phoneNumber: type: string description: The UK or international phone number of the carrier. example: 020 4756 XXXX vehicleRegistration: type: string maxLength: 10 description: This is the carrier's vehicle registration number.

    Business Rules:

    example: RNT 493 meansOfTransport: type: string enum: - Road - Rail - Air - Sea - Inland Waterway - Piped - Other description: "This describes how the waste is transported from the carrier to the receiver. \nNote: The field\ \ is case-sensitive, please use the case specified in the list.\n\n

    Business Rule:

    \nMust be one of the specified values in the\ \ list.\n" 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.

    \n

    Home\ \ Nations Codes:

    \n

    General Format where 9 is a digit 0-9

    \n

    Wales\ \ NRW:

    \n CBDU999 (3+ digits)\n

    i.e. CBDU999 (Upper Tier)\ \ or CBDL999 (Lower Tier), where \"CBD\" stands for \"Carrier, Broker, Dealer\"\

    \n

    England:

    \n CBDU999 (3+ digits)\n

    i.e. CBDU999 (Upper Tier) or CBDL999 (Lower Tier), where\ \ \"CBD\" stands for \"Carrier, Broker, Dealer\"

    \n

    Scotland SEPA:

    \n\ \ 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).\n

    Typically starts with WCR followed by numbers and potentially letters according\ \ to the Scottish Environment Protection Agency (SEPA).

    \n

    Current format – WCR/R/1234567

    \n

    Previous\ \ formats – SCO/123456, SEA/123456, SNO/123456, SWE/123456, WCR/123456, PCT-E-083, PCT-N-0050000

    \n

    Northern Ireland (NI)

    \n 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

    \n Include a prefix like ROC\ \ followed by UT (Upper Tier) or LT (Lower Tier) and then numbers. Note that spaces are not mandatory.

    \n\ \ ROC UT 9999\n ROCLT9999

    \n

    Note: where 9 is a digit 0-9

    \n" example: CBDL999 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.\n

    Home Nations Codes:

    (where\ \ 9 is a digit 0-9, X is a letter A-Z)\n

    England:

    \n
      \n \ \
    • EAWML99999, WML99999, EAWML999999, WML999999, EPR/XX9999XX
    • \n
    \n For Mobile Deployments, D’s\ \ prefix deployment numbers as part of permit numbers:\n
      \n
    • XX9999XX/D9999, XX9999XX/D99999, EPR/XX9999XX/D9999,\ \ EPR/XX9999XX/D99999S
    • \n
    \n

    Scotland (SEPA):

    \n
      \n \ \
    • PPC/A/9999999, WML/L/9999999, PPC/A/SEPA9999-9999, PPC/W/9999999, PPC/N/9999999, PPC/E/9999999, WML/L/SEPA9999-9999,\ \ WML/W/9999999, WML/E/9999999, WML/N/9999999, WML/L/9999999/99, WML/W/9999999/99, \n WML/N/9999999/99, WML/E/9999999/99,\ \ EAS/P/999999
    • \n
    \n

    Wales (NRW):

    \n
      \n
    • XX9999XX,\ \ EPR/XX9999XX
    • \n
    \n

    Northern Ireland (NRI):

    \n
      \n \ \
    • P9999/99X, P9999/99X/V#, WPPC 99/99, WPPC 99/99/V#

      \n WML 99/# PAC/9999/WCL999\n\ \ WML 99/# LN/99/#\n
    • \n Please note the following explanation:

      \n WML 99/#\ \ (where # could mean any positive integer)\n

      LN/99/# (where # could mean any positive integer and can\ \ also have 01,02,---09, 10-99,100-999, etc))

      \n WML 99/# (Could have /T appended) which means a transfer\n\ \

      LN/99/# (Could have any of the following (/M-modification, /V#-variation, /T-transfer, /C-closure) appended\ \ in any combination.

      \n In V#, # means any positive integer.\n

      \n Rationale:\n \ \

      \n 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/WCL001\n\ \

      Further explanation below:

      \n
    • P9999/99X - Permit with division (e.g., P1234/56A)
    • \n \ \
    • P9999/99X/V# - Permit with version number (e.g., P1234/56A/V1)
    • \n
    • WPPC 99/99 - Waste Prevention\ \ and Control (e.g., WPPC 12/34)
    • \n
    • WPPC 99/99/V# - WPPC with version number (e.g., WPPC 12/34/V2)
    • \n\ \
    • WML 99/# - File reference (e.g., C)
    • \n
    • WML 99/#/T - File reference with transfer (e.g., WML\ \ 19/36/T)
    • \n
    • LN/99/# - Licence number (e.g., LN/13/02)
    • \n
    • LN/99/# with suffixes - Licence\ \ with M, V#, T, C, or N in any combination (e.g., LN/13/02/M/V2)
    • \n
    • PAC/9999/WCL999 - Planning Appeals\ \ Commission format (e.g., PAC/2014/WCL001)
    • \n
    • WML 99/# LN/99/# - Combined file reference and licence\ \ (e.g., WML 07/61 LN/13/02/M/V2)
    • \n
    • WML 99/# PAC/9999/WCL999 - Combined file reference and PAC (e.g.,\ \ WML 04/38 PAC/2014/WCL001)
    • \n
    \n

    Business Rules:

    \n
      \n\ \
    • Only one authorisation number is required per site
    • \n
    • Must match a valid UK format pattern\ \ (case-insensitive)
    • \n
    • All UK nation formats are accepted (no nation-specific validation)
    • \n \ \
    • Invalid formats will be rejected with error: \"Site authorisation number must be in a valid UK format\"\
    • \n
    \n" example: EPR/DD2522BF regulatoryPositionStatements: type: array items: type: integer minimum: 1 description: | An array of regulatory position statement (RPS) numbers. A regulatory position statement is issued when the Regulator (EA, SEPA, NIEA, NRW), doesn't require you to have a permit to carry out certain activities that they regulate. The statement will explain which activities you do not require a permit for. Each must be a positive integer.

    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. \ \ \n

    Notes: \n

      \n - The field is case-sensitive, please use the case specified for the code returned\ \ by the GET method.
      \n - A complete list of Disposal and Recovery Codes can be obtained using the GET Disposal\ \ and Recovery Codes method.
      \n
    \n

    Business Rule:

    \n If disposalOrRecoveryCode.code\ \ entered, then it should be in the disposalOrRecoveryCode.code listed in EUR-Lex. \n" 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 - Tonnes

    Business 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 enum: - NotProvided - NotAllowed - InvalidType - InvalidFormat - InvalidValue - OutOfRange - BusinessRuleViolation - UnexpectedError 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 authenticationError: type: object properties: message: type: string validationErrorResponse: type: object properties: validation: type: object properties: errors: type: array items: $ref: '#/components/schemas/validationResult' 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' '402': description: Service charge payment is required. The request cannot be processed because the organisation has not paid the charge for the service. content: application/json: schema: type: object required: - statusCode - error - message example: statusCode: 402 error: Payment Required message: Payment Required properties: statusCode: type: integer description: The HTTP response status code. example: 402 error: type: string description: The HTTP error reason. example: Payment Required message: type: string description: details of why the request was rejected. example: Payment for the service is required before the organisation can submit or update waste receipt records. '401': description: Authentication is required or the token is invalid. content: application/json: schema: $ref: '#/components/schemas/authenticationError' securitySchemes: bearerAuth: type: http scheme: bearer description: Access token supplied in the Authorization header using the Bearer scheme. security: - bearerAuth: []